单片机的输入输出模式和单片机的SWD/JTAG设置为普通IO口(备忘录二)
一 单片机输入输出模式
输入模式有四种:浮空输入,模拟输入,上拉输入,下拉输入。
- 上拉输入: 给一个默认的高电平(上拉开关导通),也就是说当没有外部输入时默认输入为高电平。
- 下拉输入: 给一个默认的低电平(下拉开关导通),也就是说当没有外部输入时默认输入为低电平。
- 浮空输入:引脚上什么都没接(上下拉开关均未导通,经过施密特触发器(0,1)),此时输入电平易受外界干扰导致输入电平不稳定,完全由外部的输入决定(主要读取数字信号0和1)。
- 模拟输入:引脚上下拉开关均未导通,也未经过施密特触发器,主要用于ADC采集(主要读取模拟电压)。
输出模式有四种:推挽输出,开漏输出,复用推挽输出,复用开漏输出。**
- 推挽输出 :有输出高电平能力的输出,IO口具有输出高电平的能力。
- 开漏输出 :只能输出低电平,不能输出高电平。如果要输出高电平,则需要外接上拉(根据上拉的电压输出的电压,可以输出较大电压) 。
- 复用推挽输出 :类似推挽输出,区别是输出由片上外设而非IO口寄存器定义,比如SPI、IIC等外设
- 复用开漏输出 :类似开漏输出,区别是输出由片上外设而非IO口寄存器定义,比如SPI、IIC等外设
输出速度: IO口驱动电路的响应速度,不是输出信号的速度。**
STM32内部有三个响应速度,一般推荐IO引脚的输出速度是其输出信号速度的5-10倍。
2MHz:蜂鸣器,数码管,按键,串口 等使用。
10MHz:400Kbps下的IIC复用功能的输出引脚
50MHz:9M/18Mbps下SPI复用功能的输出引脚,FSMC复用功能连接存储器的输出引脚。
二 单片机SWJ调试端口设置成普通I/O口
STM32有两种程序调试接口(程序烧写口),具体如下:
SWD调试接口: PA13、PA14共两个引脚。
JTAG调试接口: PA13、PA14、PA15、PB3、PB4共五个引脚。
实际使用中,一般只使用 SWCLK、SWDIO这两个引脚用做SW调试接口。
-
配置复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟 -
禁用调试功能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //全功能SW+JTAG,禁用JTRST,PB4可用
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //启用SW,禁用JTAG,PA15、PB3、 PB4可用
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //完全禁用SW+JTAG,PA13、PA14、PA15、PB3、PB4可用
SWJ调试端口,只能使用以上3种重映射方法,不可对单独引脚设置。
- SWJ调试端口设置成普通I/O口程序
/* 禁用 JTAG,PB3、PB4、PA15重定义为普通IO */
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);//使能PA和PB端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//启用SW,禁用JTAG,PA15、PB3、PB4可用
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化
注意 :完全禁用SW+JTAG后,就没有程序烧写口了,谨慎使用!!!
或者在禁用之前延时一段时间,能充分下载完程序的时间,一般推荐最少500ms
参考文章
https://blog.csdn.net/scarecrow_sun/article/details/120287852