单片机的输入输出模式和单片机的SWD/JTAG设置为普通IO口(备忘录二)

单片机的输入输出模式和单片机的SWD/JTAG设置为普通IO口(备忘录二)

一 单片机输入输出模式

输入模式有四种:浮空输入,模拟输入,上拉输入,下拉输入。

  1. 上拉输入: 给一个默认的高电平(上拉开关导通),也就是说当没有外部输入时默认输入为高电平。
  2. 下拉输入: 给一个默认的低电平(下拉开关导通),也就是说当没有外部输入时默认输入为低电平。
  3. 浮空输入:引脚上什么都没接(上下拉开关均未导通,经过施密特触发器(0,1)),此时输入电平易受外界干扰导致输入电平不稳定,完全由外部的输入决定(主要读取数字信号0和1)。
  4. 模拟输入:引脚上下拉开关均未导通,也未经过施密特触发器,主要用于ADC采集(主要读取模拟电压)。

输出模式有四种:推挽输出,开漏输出,复用推挽输出,复用开漏输出。**

  1. 推挽输出 :有输出高电平能力的输出,IO口具有输出高电平的能力。
  2. 开漏输出 :只能输出低电平,不能输出高电平。如果要输出高电平,则需要外接上拉(根据上拉的电压输出的电压,可以输出较大电压) 。
  3. 复用推挽输出 :类似推挽输出,区别是输出由片上外设而非IO口寄存器定义,比如SPI、IIC等外设
  4. 复用开漏输出 :类似开漏输出,区别是输出由片上外设而非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调试接口。

  1. 配置复用时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟

  2. 禁用调试功能
    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种重映射方法,不可对单独引脚设置。

  1. 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

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值