【特殊的PB3】设置stm32 PB3 端口作为输入方法

2019-12-12 18:15发布

使用芯片:STM32F103RCT
开发环境:MDK5.1.2
调试方法:JTAG+SWD
遇到问题:PB3端口作为输入,一直读取到的是低电平,不管外部输入是不是高电平,都一直读取到的是低电平。
问题原因:
因为在使用SWD调试的时候要取消trace跟踪调试,Pb3端口还是没法正常读取到数据。
查找资料发现,别人发贴说是以为默认使用的JTAG调试方式或者是SWD方式占用了PB3端口,所以
没办法使用。类似的问题在其他论坛出现过:http://bbs.21ic.com/icview-262751-1-1.html
最后发现解决办法就是:
在程序初始化的时候要加上这两句话来让PB3 PA15 PB3 能正常使用。



RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);              
DBGMCU->CR  &= ~((uint32_t)1<<5);   
AFIO->MAPR = (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24);     /*  PA15 PB3 PB4 */



加上这两句话之后,PB3作为IO口输入数据就正常。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
LVmcu
1楼-- · 2019-12-13 19:13
落叶随风 发表于 2016-5-27 21:23
感谢指正!

我一般使用的时候,这个引脚用作SWO了,调试的时候可以打印一些信息,非常好用 ...

是怎么用SWO输出信息的?
落叶随风
2楼-- · 2019-12-14 00:52
LVmcu 发表于 2016-5-28 09:13
是怎么用SWO输出信息的?

就是把printf重定向

以MDK-ARM + JLINK为例

在.c里写一下代码
  1. #ifdef __GNUC__
  2.   /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  3.      set to 'Yes') calls __io_putchar() */
  4.   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  5. #else
  6.   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  7. #endif /* __GNUC__ */
  8. PUTCHAR_PROTOTYPE
  9. {
  10.     ITM_SendChar(ch);
  11.     return ch;
  12. }
复制代码

在Options里Target页勾选 Use MicroLIB选项

在Debug页的Settings中的Trace页,勾选Enable,Core设成72MHz(STM32F103), Trace Cache 32M

下面ITM Stimulus Ports中,两个都设置为0x00000001

在DEBUG的时候打开Debug (printf) Viewer,就能看到在代码中用printf输出的信息了

这是挺老的一种方法了,现在有新功能

参考
http://www.amobbs.com/forum.php? ... 2&highlight=swo
http://www.amobbs.com/forum.php? ... 0&highlight=SWO
http://www.amobbs.com/forum.php? ... 6&highlight=SWO
LVmcu
3楼-- · 2019-12-14 00:58
 精彩回答 2  元偷偷看……
磊磊映画
4楼-- · 2019-12-14 05:42
更正一下:在程序初始化的时候要加上这两句话来让PB3 PA15 PB4 能正常使用。

一周热门 更多>