STM32复用的GPIO引脚配置 STM32所有内置外设的外部引脚都是与标准GPIO引脚复用的,例如你举的这个例子,21管脚为PB10/SCL2/TX3,表示在上电之后它的默认功能为PB10,而I2C2的SCL和USART3的TX为它的复用功能。 STM32基本上每个引脚都有8种配置模式: 1)浮空输入 2)带弱上拉输入 3)带弱下拉输入 4)模拟输入 5)推挽输出 6)开漏输出 7)复用推挽输出 8)复用开漏输出 通常有5种方式使用某个引脚功能,它们的配置方式如下: 1)作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。 2)作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。 3)作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。 4)作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。 5)作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。 --------------------------------------------------------------------------------、 注意如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。 比如你要使用21、22脚的USART3功能,则需要配置21脚为复用推挽输出或复用开漏输出,配置22脚为某种输入模式,同时使能USART3并保持I2C2的非使能状态。 -------------------------------------------------------------------------------- STM32JTAG引脚复用DB3与DB4是JTAG引脚复用,我并非用JTAG-DP调试端口,而是SW-DP,只需要JTMS/SWDIO与JTCK/SWCLK。但是stm32复位后,JTAG与SW默认同时开启的,即所有的JTAG端口均被系统保留,软件设置GPIO是不起作用的,所以导致DB4一直为高电平,DB3一直为低电平,ST的文档里说明,如果要释放多余的JTAG端口,需设置SWJ_CFG[2:0]为010,关闭JTAG-DP,启用SW-DP并且开启端口复用的始终,在代码上体现是这样的: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 备注:若SWD被禁后无法下载程序,则按住复位键,点击下载程序 STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些端口设置为普通I/O口。具体方法如下: GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); // 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP) GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); // 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能 GPIO_Configuration(); // 配置使用的 GPIO 口
|