我正在使用STM32F103RCT6来闪烁连接到PA15的LED - PU中的JTDI。
我的GPIO配置就像这样
GPIOA->CRH |= GPIO_CRH_MODE15; //Output mode, max speed 50 MHz.
GPIOA->CRH &= ~GPIO_CRH_CNF15; //General purpose output push-pull\
我正试图像这样闪烁
#define LED_HIGH() (GPIOA->BSRR |= GPIO_BSRR_BR15) //LED High
#define LED_LOW() (GPIOA->BSRR |= GPIO_BSRR_BS15) //LED LOW
在数据表中它说
要释放GPIO引脚,我们需要使用010或100配置SWJ_CFG [2:0]。所以我正在配置
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1; //((uint32_t)0x02000000) as 010
数据表还说我们需要对ODR / IDR寄存器做一些事情,但我没有弄清楚如何将PA15(或任何JTAG引脚)配置为GPIO。
AFIO_MAPR中的SWJ_CFG为
任何建议都会有所帮助。
提前谢谢
答案 0 :(得分:2)
请勿忘记启用GPIOA
和AFIO
的时钟。两者都可以在RCC->APB2ENR
中启用。只要它们未被启用,寄存器写入就会被忽略。
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN;
答案 1 :(得分:1)
在你们的帮助下,我得到了答案。
此处的完整代码是使用CMSIS用keil v5编写的
#include "stm32f10x.h"
#define LED_LOW() (GPIOA->BSRR |= GPIO_BSRR_BR15) //Led Low
#define LED_HIGH() (GPIOA->BSRR |= GPIO_BSRR_BS15) //Led High
void GPIO_Init(void);
void Blink_Led(uint16_t ms);
void Delay(uint16_t ms);
int main(void)
{
GPIO_Init();
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1; //To Free PA15
while(1)
{
Blink_Led(1000);
}
}
/*Random Delay*/
void Delay(uint16_t ms)
{
for (int i=0;i<ms;i++)
for (int j=0;j<5120;j++);
}
void Blink_Led(uint16_t ms)
{
LED_LOW();
Delay(ms);
LED_HIGH();
Delay(ms);
}
void GPIO_Init()
{
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; //Clock for Port A - PA15
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; //ENABLE clock for alternate function
GPIOA->CRH |= GPIO_CRH_MODE15; //Output mode, max speed 50 MHz.
GPIOA->CRH &= ~GPIO_CRH_CNF15; //General purpose output push-pull
}