最近有个板子需要使用STM32驱动一个1.3寸的ST7789芯片的TFT彩屏,本来是很简单的事,结果死活不能正常显示,处理器也换过、屏也换过,程序也换了好几家的,始终不行。。。
结果今天突然想起来会不会是IO复用的问题,一查果然是PB3和PA15的默认功能不是GPIO,是JTAG的功能,设置了就好了。。。
时间太久不用STM32了,这么基础的东西都忘了。。。
---------------------------------------------------下为技术详情--------------------------------------------------
STM32引脚复用踩坑记:如何释放被JTAG占用的PA15、PB3驱动TFT屏幕
前言:几天调试的教训
问题现象:TFT屏幕"罢工"

问题根源:JTAG调试接口的优先级
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
解决方案:引脚重映射技术
1. 使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
2. 重映射调试接口
-
GPIO_Remap_SWJ_JTAGDisable:禁用JTAG,保留SWD(最常用) -
GPIO_Remap_SWJ_Disable:禁用JTAG和SWD(危险,不推荐) -
GPIO_Remap_SWJ_NoJTRST:禁用JTAG复位,保留其他功能
3. 配置GPIO为普通输出模式
关键注意事项
1. 避免完全禁用所有调试功能
GPIO_Remap_SWJ_Disable,这会同时禁用JTAG和SWD功能,导致所有5个调试引脚(PA13、PA14、PA15、PB3、PB4)都变成普通IO。一旦程序下载进去,你将无法再通过ST-Link等调试器下载新程序,只能通过串口ISP等方式恢复,给开发带来极大麻烦。2. 配置顺序很重要
-
使能AFIO时钟 -
执行重映射配置 -
配置GPIO引脚
3. 使用STM32CubeMX简化配置
-
在 Pinout & Configuration视图中,找到System Core分类下的SYS选项 -
在 Debug下拉菜单中,选择Serial Wire(这等同于禁用JTAG,使能SWD) -
生成的代码会自动处理重映射配置
实战代码示例
经验总结与建议
-
引脚规划先行:在项目开始前,仔细查阅芯片数据手册的引脚定义表,特别是调试接口的默认功能。 -
优先使用SWD:对于STM32F103开发,SWD(2线调试)通常已足够,可以安全地禁用JTAG以释放更多GPIO资源。 -
善用STM32CubeMX:图形化配置工具能自动解决大部分引脚冲突问题,减少人为错误。 -
添加调试接口恢复机制:在代码中添加检测机制,当需要恢复调试功能时,可以通过特定条件(如按键组合)触发重映射恢复操作。
评论0
暂时没有评论