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

 

 

posted @ 2017-04-10 15:05  liulangrenaaa  阅读(9862)  评论(0编辑  收藏  举报