课件:SM32单片机IO端口编程.ppt_第1页
课件:SM32单片机IO端口编程.ppt_第2页
课件:SM32单片机IO端口编程.ppt_第3页
课件:SM32单片机IO端口编程.ppt_第4页
课件:SM32单片机IO端口编程.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章 STM32单片机IO端口编程,2.1 STM32单片机管脚和命名规则,2.2 STM32单片机时钟 配置,2.3 STM32单片机I/O端口配置,2.4 STM32单片机I/O端编程步骤,STM32单片机管脚,STM32系列单片机命名规则,2.1 STM32单片机管脚和命名规则,STM32F103CBT6 共有37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。,STM32单片机管脚:以STM32F103Cx为例,采用的封装形式LQFP48,一般而言,嵌入式系统在工作前,都要进行初始化工作,其中包括调用RCC_Configuration(复位和时钟设置)函数。用于系统复位和初始化STM32系列微控制器的时钟。,2.2 STM32单片机时钟配置,2.2.1 STM32时钟系统,2.2.2 RCC_Configuration(复位和时钟设置)函数,STM32系列微控制器中,有5个时钟源: HSI (High Speed Internal) :高速内部时钟、 HSE (High Speed External):高速外部时钟、 LSI (Low Speed Internal) :低速内部时钟、 LSE(Low Speed External) :低速外部时钟、 PLL(Phase Locked Loop) :锁相环倍频输出。 其中的HSI、HSE、 或PLL可被用来驱动系统时钟。 其中的LSI、LSE作为二级时钟源。,STM32时钟系统结构图(P56),2.2.1 STM32时钟系统,其中的HSI、HSE、 或PLL可被用来驱动系统时钟。,实际PLL是来自于HSI、HSE,外设总线:包括APB1(Advanced Peripheral Bus 1) 和APB2(Advanced Peripheral Bus 2),APB2:用于高速外设 APB1:用于低速外设,AMBA片上总线:已成为一种流行的工业片上总线标准。它包括AHB(Advanced High performance Bus)和APB(Advanced Peripheral Bus ),前者作为系统总线,后者作为外设总线。,STM32系统结构图,连接在APB1(低速外设)上的设备:有,连接在APB2(高速外设)上的设备:有,连接在AHB(Advanced High performance Bus)上的设备:有,1、使能 挂接在APB1总线上的外设 对应的时钟 命令:,RCC_APB1PeriphClockCmd( ) 函数,例如,使能TIM2对应的时钟: RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);,RCC_APB2PeriphClockCmd( )函数,2、使能 挂接在APB2总线上的外设 对应的时钟 命令:,例如,使能GPIO端口对应的时钟: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE,ENABLE);,3、使能 挂接在AHB总线上的外设 对应的时钟 命令:,RCC_AHBPeriphClockCmd( ) 函数,例如,使能DMA对应的时钟: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA,ENABLE);,使用操作符“|”可以一次选中上表中的一个或多个取值的组合作为该参数的值。,复位和时钟控制(RCC),STM32F103xx增强型模块框图,基于ARM Cortex内核的MCU 和 普通的8/16位单片机 在系统结构上 最大区别:,普通的8/16位单片机:只有1个系统时钟频率, 而基于ARM Cortex内核的MCU:具有多个时钟频率,分别供给内核 和 不同外设模块使用。,本课程的学习难点之一:就是ARM时钟 比 单片机时钟 复杂得多。,为什么ARM时钟这么复杂?,原因二:时钟分开有助于实现低功耗。,原因一:高速时钟供中央处理器等高速设备使用, 低速时钟供外设等低速设备使用。,时钟输出使能,STM32处理器因为低功耗的需要,各模块需要分别独立开启时钟。 当需要使用某个外设模块时,记得一定要先使能对应的时钟。否则,这个外设不能工作。,2.2.2 RCC_Configuration( )函数,1、RCC复位和时钟配置寄存器组,2、枚举类型ErrorStatus,3、RCC_Configuration ( ):(复位和时钟设置)函数,( Reset and Clock Configuration( ), 复位和时钟设置 函数 ),STM32单片机的复位和时钟设置 :共包括10个设置寄存器 一个32位的时钟控制寄存器(RCC_CR) 一个32位的时钟配置寄存器(RCC_CFGR) 一个32位的时钟中断寄存器 (RCC_CIR) 一个32位的APB2外设复位寄存器 (RCC_APB2RSTR) 一个32位的APB1外设复位寄存器 (RCC_APB1RSTR) 一个32位的AHB外设时钟使能寄存器 (RCC_AHBENR) 一个32位的APB2外设时钟使能寄存器(RCC_APB2ENR) 一个32位的APB1外设时钟使能寄存器(RCC_APB1ENR) 一个32位的备份域控制寄存器 (RCC_BDCR) 一个32位的控制/状态寄存器 (RCC_CSR),Backup domain control register (RCC_BDCR),详见参考手册 V10_1 第P60,编程时,时钟的具体配置是从RCC(Reset and Clock Configuration,复位和时钟配置)寄存器组开始。在固件库中,用结构体RCC_TypeDef 定义 RCC寄存器组:,在文件“stm32f10x_map.h”中,定义如下:,/*- Real-Time Clock -*/ typedef struct vu32 CR; vu32 CFGR; vu32 CIR; vu32 APB2RSTR; vu32 APB1RSTR; vu32 AHBENR; vu32 APB2ENR; vu32 APB1ENR; vu32 BDCR; vu32 CSR; RCC_TypeDef;,1、RCC复位和时钟配置寄存器组,/* Peripheral base address in the bit-band region */ #define PERIPH_BASE (u32)0x40000000),/* Peripheral memory map */ #define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE + 0x1 0000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x2 0000),#define RCC_BASE (AHBPERIPH_BASE + 0x1000),#ifdef _RCC #define RCC (RCC_TypeDef *) RCC_BASE) #endif /*_RCC */,该宏定义的功能:在程序中,所有写RCC的地方,编译器的 预处理程序,都将它替换为:(RCC_TypeDef *) 0x40021000),2、枚举类型ErrorStatus,在文件“stm32f10x_type.h”中,包含 typedef enum ERROR=0, SUCCESS=! ERROR ErrorStatus;,该语句,定义了新枚举类型名ErrorStatus,代表左侧定义的枚举类型。,3、RCC_Configuration(复位和时钟设置)函数:在“HelloRobot.h”中,ErrorStatus HSEStartUpStatus;,void RCC_Configuration(void) /*将外设RCC寄存器组重新设置为默认值,即复位 。 RCC system reset*/ RCC_DeInit(); /*打开外部高速时钟晶振HSE ,Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /*等待HSE外部高速时钟晶振稳定,或者在超时的情况下退出,Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS) / SUCCESS: HSE晶振稳定就绪 /*设置AHB时钟= SYSCLK= 48 MHz , HCLK(即 AHB时钟) = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /*设置高速PCLK2时钟(即APB2 clock)= = AHB时钟/2 = 24 MHz,PCLK2 = HCLK/2 */ RCC_PCLK2Config(RCC_HCLK_Div2); /*设置低速PCLK1时钟(即APB1 clock)= AHB时钟/4=12 MHz ,PCLK1 = HCLK/4 */ RCC_PCLK1Config(RCC_HCLK_Div4); /RCC_HCLK_Div4: APB1 clock = HCLK/4=12MHz,此处不同于鸥鹏公司的程序(=36MHz) /*设置Flash 延时时钟周期数:为2 */ FLASH_SetLatency(FLASH_Latency_2); /* Enable Flash Prefetch Buffer预取指令指令缓冲区,这2句与RCC没有关系 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 利用锁相环将HSE外部8MHz晶振6倍频到48 MHz。PLLCLK = 8MHz * 6 = 48 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); /此处不同于鸥鹏公司的程序:PLLCLK = 8MHz * 6 = 48 MHz /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready,等待 锁相环 输出稳定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /选择PLLCLK作为SYSCLK,所以SYSCLK为48 MHz /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) /* Enable peripheral clocks -*/ /* GPIOA, GPIOB and SPI1 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE); /* Enable GPIOC, GPIOD clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD, ENABLE); ,枚举类型,变量,/*设置低速PCLK1时钟(即APB1 clock)= AHB时钟/4=12 MHz ,PCLK1 = HCLK/4 */ RCC_PCLK1Config(RCC_HCLK_Div4); /RCC_HCLK_Div4: APB1 clock = HCLK/4=12MHz,此处不同于鸥鹏公司的程序(=36MHz) /*设置Flash 延时时钟周期数:为2 */ FLASH_SetLatency(FLASH_Latency_2); /* Enable Flash Prefetch Buffer预取指令指令缓冲区,这2句与RCC没有关系 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 利用锁相环将HSE外部8MHz晶振6倍频到48 MHz,作为PLLCLK。 PLLCLK = 8MHz * 6 = 48 MHz */ RCC_PLLConfig ( RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); /此处不同于鸥鹏公司的程序:PLLCLK = 8MHz * 6 = 48 MHz /* Enable PLL */ RCC_PLLCmd(ENABLE);,/* Wait till PLL is ready,等待 锁相环 输出稳定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /* Select PLL as system clock source */ /选择PLLCLK作为SYSCLK,所以SYSCLK为48 MHz RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) /* Enable peripheral clocks -*/ /* GPIOA, GPIOB and SPI1 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE); /* Enable GPIOC, GPIOD clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD, ENABLE); ,以上所见的固件库函数: 详见“中文版:STM32F10xxx_固件库函数 V2.pdf P193”,固件库函数的具体实现:见文件“stm32f10x_rcc.h”,其中RCC_DeInit();,/* * Function Name : RCC_DeInit * Description : Resets the RCC clock configuration to the default reset state. * Input : None * Output : None * Return : None */ void RCC_DeInit(void) /* Set HSION bit */ RCC-CR |= (u32)0x00000001; /* Reset SW1:0, HPRE3:0, PPRE12:0, PPRE22:0, ADCPRE1:0 and MCO2:0 bits */ RCC-CFGR ,2.3 STM32单片机I/O端口配置,2.3.1 STM32单片机的 I/O端口和管脚,2.3.2 STM32单片机的 I/O端口配置,2.3.1 STM32单片机的 I/O端口和管脚,STM32单片机 最多有7个16位的并行 I/O端口:PA、PB、PC、PD、PE、PF、PG。,STM32F103Cx单片机 只有4个16位的并行 I/O端口:PA、PB、PC、PD。,STM32F103CBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。,STM32单片机的I/O端口和管脚:以STM32F103Cx为例,每个GPIOx端口:共有7个设置寄存器 两个32位的配置寄存器(GPIOx_CRL, GPIOx_CRH) (GPIOx_CRL) (x=AG): GPIOx configuration register low, GPIOx端口低配置寄存器,用于配置GPIOx端口的第0位第7位。 两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR) (GPIOx_IDR) (x=AG): GPIOx input data register 一个32位的置位/复位寄存器 (GPIOx_BSRR) (GPIOx_BSRR) (x=AG): GPIOx bit set/reset register 一个16位的复位寄存器(GPIOx_BRR) 一个32位的锁定寄存器(GPIOx_LCKR) (GPIOx_LCKR) (x=AG): GPIOx configuration lock register,在MCS-51单片机中,每个IO端口:只有1个设置寄存器 P0端口:P0端口寄存器-P0, P1端口:P1端口寄存器-P1, P2端口:P2端口寄存器-P2, P3端口:P3端口寄存器-P3。 对应STM32单片机的数据寄存器 两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR) (GPIOx_IDR) (x=AG): GPIOx input data register,MCS-51单片机I0端口的输入、输出数据寄存器共用1个寄存器Px,而STM32单片机的输入、输出数据寄存器是分开的。,MCS-51单片机的特殊功能寄存器,在固件函数库的 “stm32f10x_map.h”文件中,对应的定义:,/*- General Purpose IO -*/ typedef struct vu32 CRL;/configuration register low(GPIOx_CRL)(x=AE) vu32 CRH; vu32 IDR; vu32 ODR; vu32 BSRR; vu32 BRR; vu32 LCKR; GPIO_TypeDef; /用结构体GPIO_TypeDef定义GPIOx端口,(即定义 GPIOx端口的7个设置寄存器),2.3.2 STM32单片机的 I/O端口配置,5、在使用GPIO端口时,首先要使能该外设对应的时钟,1、GPIOx 端口 定义,2、GPIO_Pin_x 管脚 定义,3、GPIO_InitTypeDef 初始化端口参数 定义,4、GPIO_Init 初始化端口 定义,6、GPIO编程 步骤,1、编程时,GPIOx端口的具体配置是从GPIOA、 GPIOB、GPIOC、 GPIOD、 或 GPIOE寄存器组开始。首先,在固件库中,用结构体GPIO_TypeDef定义GPIOx端口,(即定义 GPIOx端口的7个设置寄存器):,在文件“stm32f10x_map.h”中,定义如下:,/*- General Purpose IO -*/ typedef struct vu32 CRL;/configuration register low32(GPIOx_CRL)(x=AE) vu32 CRH; vu32 IDR; vu32 ODR; vu32 BSRR; vu32 BRR; vu32 LCKR; GPIO_TypeDef; /用结构体GPIO_TypeDef定义 GPIOx端口 /或称用结构体GPIO_TypeDef定义 GPIOx寄存器组,GPIOx端口的7个设置寄存器,端口配置低寄存器(GPIOx_CRL) (x=AE) :,表3.11:端口位配置表,表3.12:输出模式位,#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) #define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) #define GPIOG_BASE (APB2PERIPH_BASE + 0x2000),GPIOA、 GPIOB、GPIOC、 GPIOD、 或 GPIOE寄存器组 的首地址:,/* Peripheral base address in the bit-band region */ #define PERIPH_BASE (u32)0x40000000),/* Peripheral memory map */ #define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000),0x40011000,0x40010800,0x40010C00,0x40011400,0x40011800,0x40011C00,0x40012000,#ifdef _GPIOA #define GPIOA (GPIO_TypeDef *) GPIOA_BASE) #endif /*_GPIOA */ #ifdef _GPIOB #define GPIOB (GPIO_TypeDef *) GPIOB_BASE) #endif /*_GPIOB */ #ifdef _GPIOC #define GPIOC (GPIO_TypeDef *) GPIOC_BASE) #endif /*_GPIOC */ #ifdef _GPIOD #define GPIOD (GPIO_TypeDef *) GPIOD_BASE) #endif /*_GPIOD */ #ifdef _GPIOE #define GPIOE (GPIO_TypeDef *) GPIOE_BASE) #endif /*_GPIOE */ #ifdef _GPIOF #define GPIOF (GPIO_TypeDef *) GPIOF_BASE) #endif /*_GPIOF */ #ifdef _GPIOG #define GPIOG (GPIO_TypeDef *) GPIOG_BASE) #endif /*_GPIOG */,在文件“stm32f10x_gpio.h”中,定义,2、 GPIO_Pin_x 管脚 定义:,/* Exported constants -*/ /* GPIO pins define -*/ #define GPIO_Pin_0 (u16)0x0001) /* Pin 0 selected */ #define GPIO_Pin_1 (u16)0x0002) /* Pin 1 selected */ #define GPIO_Pin_2 (u16)0x0004) /* Pin 2 selected */ #define GPIO_Pin_3 (u16)0x0008) /* Pin 3 selected */ #define GPIO_Pin_4 (u16)0x0010) /* Pin 4 selected */ #define GPIO_Pin_5 (u16)0x0020) /* Pin 5 selected */ #define GPIO_Pin_6 (u16)0x0040) /* Pin 6 selected */ #define GPIO_Pin_7 (u16)0x0080) /* Pin 7 selected */ #define GPIO_Pin_8 (u16)0x0100) /* Pin 8 selected */ #define GPIO_Pin_9 (u16)0x0200) /* Pin 9 selected */ #define GPIO_Pin_10 (u16)0x0400) /* Pin 10 selected */ #define GPIO_Pin_11 (u16)0x0800) /* Pin 11 selected */ #define GPIO_Pin_12 (u16)0x1000) /* Pin 12 selected */ #define GPIO_Pin_13 (u16)0x2000) /* Pin 13 selected */ #define GPIO_Pin_14 (u16)0x4000) /* Pin 14 selected */ #define GPIO_Pin_15 (u16)0x8000) /* Pin 15 selected */ #define GPIO_Pin_All (u16)0xFFFF) /* All pins selected */,使用按位或运算符“|”可以一次选中多个管脚。可以使用上表中的任意组合。,3、GPIO_InitTypeDef 初始化端口参数 定义,(1) 枚举类型GPIOSpeed_TypeDef:用于定义GPIO管脚 的 响应速度,(2) 枚举类型GPIOMode_TypeDef: 用于定义GPIO管脚 的 工作模式,(3) 结构体GPIO_InitTypeDef: 用于初始化端口参数,难点,在文件“stm32f10x_gpio.h”中,定义:,typedef enum GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz GPIOSpeed_TypeDef; /定义GPIO管脚 的 响应速度,(1) 枚举类型GPIOSpeed_TypeDef:用于定义GPIO管脚 的 响应速度,typedef enum GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, GPIO_Mode_Out_PP = 0x10, GPIO_Mode_AF_OD = 0x1C, GPIO_Mode_AF_PP = 0x18 GPIOMode_TypeDef; /定义GPIO管脚 的 工作模式,(2) 枚举类型GPIOMode_TypeDef: 用于定义GPIO管脚 的 工作模式,STM32单片机的每一个输入/输出引脚(即GPIO端口的每一位)可以配置成以下8种模式(4输入+2输出+2复用输出):,STM32单片机的GPIO端口模式:,输入浮空:IN_FLOATING 输入上拉:IPU(In Push-Up) 输入下拉: IPD(In Push-Down) 模拟输入: AIN (Analog In) 开漏输出:Out_OD (Open Drain Output) 推挽式输出:Out_PP (Push-Pull Output) 推挽式复用功能:AF_PP (Push-Pull Output Alternate-Function) 开漏复用功能:AF_OD (Open Drain Output Alternate-Function),输 入,输 出,复用输 出,/* Configuration Mode enumeration -*/ typedef enum GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, GPIO_Mode_Out_PP = 0x10, GPIO_Mode_AF_OD = 0x1C, GPIO_Mode_AF_PP = 0x18 GPIOMode_TypeDef; /定义GPIO管脚 的 工作模式,工作模式:用低4位 区分。,输 入,输 出,输入、输出: 高4位为1-输出,否则为输入。,I/O端口位的基本结构,输入数据寄存器,输出数据寄存器,位置位/ 复位寄存器,I/O端口位的输入电路,I/O端口位的输出电路,I/O端口位的输入电路,I/O端口位的浮空/上拉/下拉输入电路,I/O端口位的高阻抗模拟 输入电路,图3.11:I/O端口位的输入浮空/上拉/下拉配置,激活施密特触发输入,输出缓冲器被禁止,根据输入配置(上拉,下拉或浮空)的不同,弱上拉和下拉电阻被连接,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,-参见“!STM32F10x_中文版_参考手册 V10_1( 2010年1月10日) .pdf” P108,图3.14: I/O端口位的高阻抗模拟输入配置,输出缓冲器被禁止,禁止施密特触发输入。,施密特触发输出值被强置为0,弱上拉和下拉电阻被禁止,读取输入数据寄存器时数值为0,I/O端口位的输出电路,I/O端口位的开漏输出电路,I/O端口位的推挽输出电路,I/O端口位的复用功能的推挽输出电路和开漏输出电路,图3.12 I/O端口位的开漏输出配置,开漏模式: P-MOS从不被激活,仅N-MOS工作。,开漏模式:输出寄存器上的0激活N-MOS,输出低电平;而输出寄存器上的1将端口置于高阻状态(P-MOS从不被激活)。,激活施密特触发输入,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,图3.12 I/O端口位的推挽输出配置,推挽模式:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS。,激活施密特触发输入,弱上拉和下拉电阻被禁止,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,图3.13: I/O端口位的复用功能配置,激活施密特触发输入,弱上拉和下拉电阻被禁止,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,复用功能Input,到片上外设,自片上外设,如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。,图3.13: I/O端口位的复用功能配置,仅有输出,才有复用功能。,复用功能Input,到片上外设,自片上外设,开漏输出、推挽输出 和 复用功能的开漏输出、推挽输出 不同之处:引脚和输出寄存器断开,并和片上外设的输出信号连接。 增加了复用功能Input,/* GPIO Init structure definition */ typedef struct u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; GPIO_InitTypeDef; /用于初始化GPIOx端口的参数(包括管脚号、管脚响应速度、管脚工作模式),(3) 结构体GPIO_InitTypeDef: 用于初始化端口参数,比较 结构体GPIO_TypeDef 和GPIO_InitTypeDef:,4、GPIO_Init 初始化端口 定义,功能:根据GPIO_InitTypeDef中指定的参数,初始化外设GPIOx端口,例如,GPIO_InitTypeDef G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论