STM32的JTAG与SWD接口禁用问题
我们在用单片机开发产品是无可避免的会使用到JTAG或者SWD接口或者是硬件工程师的粗心大意,或者是因为硬件资源的限制,当我们遇到这些问题的时候就需要复用这些IO口
#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */
#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DP Enabled */
#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */
这是STM32官方库的宏定义
#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*SWD使能、JTAG使能但是不包括JNRST引脚 */
#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*SWD使能、JTAG失能 */
#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*SWD与JTAG全部失能 */
(1)复用JTAG接口,保留SWD接口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//
(2)复用JTAG接口与SWD接口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//
(3)只复用JNRST引脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);//
其中有几个情况比较让人头疼
(1)在完全复用了JTAG与SWD接口情况下要是想修改程序怎么办呢?
答:目前有两种方案:方案一:一般PCB肯定会引出复位引脚的可以先按keil的下载按钮,然后迅速按下PCB的复位按钮,一般可以下载成功
方案二:改变BOOT0接到3.3V用串口下载程序,要是串口没有引出来或者BOOT0直接接地了建议方案一
(2)在复用JTAG接口PB4的时候贴主遇到了一些问题
就是PB4作为输出引脚的时候有些模式不能完全输出高电平或者低电平,要切换电平状态有时候还得切换一下输出模式,可能是STM32的一些设计BUG