数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1387|回复: 6

[C51] stm32 PB3 PB4 PA15引脚作为普通IO口使用指南

[复制链接]
发表于 2022-8-13 14:42:11 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

stm32的PB3 PB4 PA15引脚可以在使用SWD仿真和烧录的情况下释放出来,作为普通IO口使用。

初始化代码如下:



[html]  view plain  copy




  • GPIO_InitTypeDef GPIO_InitStructure;  
  •   
  • RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);  
  •       
  • GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);  
  •       
  • GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;  
  • GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  • GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  • GPIO_Init(GPIOB, &GPIO_InitStructure);  
  • GPIO_SetBits(GPIOB,GPIO_Pin_4);  
  •       
  • GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;  
  • GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  • GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  • GPIO_Init(GPIOB, &GPIO_InitStructure);  
  • GPIO_SetBits(GPIOB,GPIO_Pin_3);  
  •   
  • GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;  
  • GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  • GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  • GPIO_Init(GPIOA, &GPIO_InitStructure);  
  • GPIO_ResetBits(GPIOA,GPIO_Pin_15);  



在实际测试的时候,发现工程内PB3 PB15无法当做普通IO使用,最后发现解决办法为:

上面这段初始化代码放在所有IO初始化最后就好了。


通过现象调试找到问题原因:

当把PB3 PB4 PA15初始化好之后,如果再次调用GPIOA GPIOB接口的时钟代码的话,会使得PB3 PA15引脚变回JTAG的引脚

即初始化完之后不能再执行如下代码,否则PB3 PA15引脚会变回JTAG的引脚,而无法作为普通IO使用


[html]  view plain  copy




  • RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);  


以上情况经过实际测试!

打赏

参与人数 1家元 +10 收起 理由
kkdkj + 10 謝謝分享!没帮帮团了,就打这些分吧.

查看全部打赏

发表于 2022-8-13 16:12:10 | 显示全部楼层
用作gpio后, 就无法在线调试和写入代码
回复 支持 反对

使用道具 举报

发表于 2022-8-13 16:56:36 来自手机浏览器 | 显示全部楼层
inthsunshine 发表于 2022-8-13 16:12
用作gpio后, 就无法在线调试和写入代码

可以的,使用复位脚就可以了。
回复 支持 反对

使用道具 举报

发表于 2022-8-13 22:34:40 | 显示全部楼层
本帖最后由 inthsunshine 于 2022-8-13 22:37 编辑
mmxx2015 发表于 2022-8-13 16:56
可以的,使用复位脚就可以了。

设置boot引脚是可以写入程序, 关键是原先的GPIO功能就不能正常工作, GPIO外围电路可能影响 SWD, 在线调试用不了
回复 支持 反对

使用道具 举报

发表于 2022-8-13 22:53:08 | 显示全部楼层
inthsunshine 发表于 2022-8-13 22:34
设置boot引脚是可以写入程序, 关键是原先的GPIO功能就不能正常工作, GPIO外围电路可能影响 SWD, 在线调试 ...

我见过的所有芯片的调试引脚的调试功能和GPIO不能同时同时有效。
就下载而言,不需要设置boot引脚,把复位选项设置为“under Reset”即可。最近用的国产ARM芯片,调试状态下,调试引脚调试功能优先级高于GPIO功能,好像ST的也是这样的。
回复 支持 反对

使用道具 举报

发表于 2022-8-14 11:17:24 | 显示全部楼层
感谢分享,收藏了
回复 支持 反对

使用道具 举报

发表于 2022-8-15 22:06:52 | 显示全部楼层
mmxx2015 发表于 2022-8-13 22:53
我见过的所有芯片的调试引脚的调试功能和GPIO不能同时同时有效。
就下载而言,不需要设置boot引脚,把复 ...

SWD的2个脚(SWIO,SWCLK)有上下拉的要求,具体上拉还是下拉忘记了,如果GPIO的外围电路不是遵循要求,可能会影响调试功能
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-28 13:49 , Processed in 0.702001 second(s), 17 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表