STM32的 PA13/14/15 & PB3/4无法正常使用

PA13/14/15 & PB3/4默认配置为JTAG功能

首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些
端口设置为普通I/O口。具体方法如下:
在GPIO_Configuration(); // 配置使用的 GPIO 口:


GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure); 

注意:不要忘记在RCC_Configuration()中开启AFIO时钟,
  //AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

 

 

 

STM32F103 的 JTAG, 默认状态是Full SWJ。

The default state after reset is “000” (whole pins assigned for a full JTAG-DP connection).

PB3作为JDO,被JTAG占用。

在 TRACE Asynchronous mode,PB3还是TRACESWO。

 

若系统不需要JTAG,将PB3当作GPIO,需要如下设置:

扫描二维码关注公众号,回复: 8632929 查看本文章

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);

 

第一句中的 RCC_APB2Periph_AFIO 设置 AFIOEN(如果没有这一句,后面两句失效)。

如果一个模块的clock DISABLE,那么,寄存器的值也无法读写。

 

有了上面两句,就可以进一步对PB3进行操作了。

例如

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIOB->ODR = 0x08

分享:

发布了112 篇原创文章 · 获赞 120 · 访问量 62万+

猜你喜欢

转载自blog.csdn.net/qq_36958104/article/details/102784676