STM32单片机释放PB3/PB4/PA15作为普通IO口

来源:互联网 发布:企业模拟经营软件 编辑:程序博客网 时间:2024/05/04 17:37

STM32单片机释放PB3/PB4/PA15作为普通IO口

  一次使用STM32F103RCT6单片机用到多个IO口时发现:不管如何配置,PB3,PB4,PA15无法正常控制输出高低电平,而其他IO口正常。其IO口初始化操作如下:

    GPIO_InitTypeDef GPIO_Initure;    __HAL_RCC_GPIOA_CLK_ENABLE();               //开启GPIOA时钟    __HAL_RCC_GPIOB_CLK_ENABLE();               //开启GPIOB时钟    GPIO_Initure.Pin=GPIO_PIN_15;    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //推挽输出    GPIO_Initure.Pull=GPIO_PULLUP;              //上拉    GPIO_Initure.Speed=GPIO_SPEED_HIGH;         //高速    HAL_GPIO_Init(GPIOA,&GPIO_Initure);    GPIO_Initure.Pin=GPIO_PIN_3|GPIO_PIN_4;    HAL_GPIO_Init(GPIOB,&GPIO_Initure);

  查找相关芯片资料发现,包括这三个引脚在内的PB3,PB4,PA13,PA14,PA15是特殊的IO口,默认用作JTAG/SWD仿真器的调试接口。其中PA13,PA14分别作为SWD调试的SWIO和SWCLK;PB3,PB4,PA13,PA14,PA15共同用于JTAG。

这里写图片描述

这里写图片描述

  如需使用这些IO口需要禁止相关JTAG/SWD功能。查看HAL库文件,可找到相关函数。

/**  * @brief Enable the Serial wire JTAG configuration  * @note  ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State  * @retval None  */#define __HAL_AFIO_REMAP_SWJ_ENABLE()   MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_RESET)/**  * @brief Enable the Serial wire JTAG configuration  * @note  NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST  * @retval None  */#define __HAL_AFIO_REMAP_SWJ_NONJTRST() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_NOJNTRST)/**  * @brief Enable the Serial wire JTAG configuration  * @note  NOJTAG: JTAG-DP Disabled and SW-DP Enabled  * @retval None  */#define __HAL_AFIO_REMAP_SWJ_NOJTAG()   MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_JTAGDISABLE)/**  * @brief Disable the Serial wire JTAG configuration  * @note  DISABLE: JTAG-DP Disabled and SW-DP Disabled  * @retval None  */#define __HAL_AFIO_REMAP_SWJ_DISABLE()  MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_DISABLE)

  在初始化IO操作的最后添加语句:

__HAL_AFIO_REMAP_SWJ_NOJTAG();

  即可禁止JTAG调试功能,将PB3,PB4,PA15用作普通IO口,而保留PA13,PA14的SWD接口,使单片机仍可下载程序与调试。

阅读全文
0 0
原创粉丝点击