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,需要如下设置:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
有了上面两句,就可以进一步对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;
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,需要如下设置:
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;