<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > stm32 怎樣釋放pa15,pb3,pb4作為gpio口使用

          stm32 怎樣釋放pa15,pb3,pb4作為gpio口使用

          作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          當(dāng)STM32引腳不夠用時(shí),可以分配JTAG/SWD的引腳作為GPIO口使用。
          查看數(shù)據(jù)手冊的引腳定義可以看到,PA15引腳復(fù)位后的主要功能為JTDI,PB3為JTDO,PB4為JNTRST,如果把這些引腳作為普通引腳使用時(shí),需要進(jìn)行重映射。

          通過設(shè)置復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)的SWJ_CFG[2:0]位,配置為“啟用SW-DP,關(guān)閉JTAG-DP”來釋放PA15(JTDI), PB3(JTDO), PB4(NJTRST)引腳。詳見中文參考手冊V10.2版本p118 表35 調(diào)試端口映像。
          庫文件中幾個(gè)相關(guān)的宏定義分別為:
          #defineGPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ // 完全SWJ(JTAG-DP + SW-DP),但沒有JNTRST
          #defineGPIO_Remap_SWJ_JTAGDisable((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DP Enabled */ // 關(guān)閉JTAG-DP,啟用SW-DP
          #defineGPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */ // 關(guān)閉JTAG-DP,關(guān)閉SW-DP
          另外,注意PB3的腳注,“I/O口只可在不使用異步跟蹤時(shí)使用”,詳見中文參考手冊V10.2版本p748 29.16.3 調(diào)試MCU配置寄存器。
          DBGMCU_CR寄存器的bit7:5(TRACE_MODE[1:0]和TRACE_IOEN),配置TRACE_IOEN=0,不分配跟蹤引腳。見下表。
          相關(guān)代碼:
          DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5); // 不分配跟蹤引腳,釋放PB3
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); // 使能復(fù)用時(shí)鐘和引腳GPIO時(shí)鐘
          GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); // 切換到SWJ調(diào)試,釋放PA15,PB4, PB3


          關(guān)鍵詞: stm32gpio

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();