stm32F10x PB3 GPIO口无法作为普通IO口使用的原因
用stm32没多久,PB3当作GPIO口采集信号量,结果老读不到信息,读到的都是0,各种测试,无果,草草下了个结论:片子有问题。结果,新板子焊好后再测,结果还是一样,这下坐不住了,查各种手册,网上查,这才弄明摆是怎么回事。
以下内容引自网络:
STM32F103 的 JTAG, 默认状态是Full SWJ。
The default state after reset is “000” (whole pins assigned for a full JTAG-DP connection).
PB3作为JDO,被JTAG占用。
我们可以使用以下语句来实现部分或是全部屏蔽JTAG功能:
// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
以下为屏蔽PB3,PB4的JTAG功能为例的代码:
/*开启GPIOB的外设时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO| RCC_APB2Periph_GPIOB, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); //屏蔽所有作为JTAG口的GPIO口 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //屏蔽PB口上IO口JTAG功能
以上代码,我们就可以按操作其他普通GPIO口一样操作了。
凯特网版权声明:以上内容允许转载,但请注明出处,谢谢!