我有一块STM32F401xB/C板。
我正在尝试为我的直流电机创建一个PWM信号。我已经遵循了这个教程,似乎理解了代码。
https://ruturajn.hashnode.dev/generating-pwm-pulses-on-the-stm32f407-for-servo-motor-control-using-bare-metal-programming
但在我改变引脚后,我想要的pwm输出从我没有得到任何信号。教程参考pa5引脚,它的工作,但pa15不工作,即使它连接到相同的计时器tim2和通道。
你知道吗?
这是我的代码:
//initialises the GPIO pins
void GPIO_Init(){
//give and clock to the GPIOB and GPIOA device
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
//THESE PINS ARE THE PWM DRIVERS
//PA15
//set alternative mode
GPIOA->MODER &= ~(GPIO_MODER_MODER15_1);
GPIOA->MODER |= GPIO_MODER_MODER15_1;
//low part of the alternate function register
GPIOA->AFR[1] |= GPIO_AFRH_AFSEL15_0;
}
//initialise the TIM2 timer device
void TIM2_Init(){
//give pwr and clk to TIM2 device
RCC->AHB1ENR |= RCC_APB1ENR_TIM2EN;
//set prescaler to 1Mhz = 1 microSeconds
TIM2->PSC = 16-1;
//total period of the timer = 20ms
TIM2->ARR = 20000;
//set counter to 0
TIM2->CNT = 0;
//set capture/compare mode register 1 to PWM Mode 1
TIM2->CCMR1 = 0x0060;
//set capture/compare enable register to output on chanel 1
TIM2->CCER |= 1;
//set >50% power
TIM2->CCR1 = 10000;
}
void setup(){
//set the timer to 16 mhz
RCC->CFGR |= 0 << 10;
GPIO_Init();
TIM2_Init();
//start TIM2 timer
TIM2->CR1 |= 1;
}
2条答案
按热度按时间ruoxqz4g1#
这仅清除单个位
应该是
PA15与JTDI共享,可能存在外部干扰。
默认情况下,它使能上拉,如果此引脚用作输出,则应将其清零。
yh2wf1be2#
问题是我没有为时钟正确设置时钟和电源。我应该检查的寄存器是
RCC->APB1ENR
而不是RCC->AHB1ENR
。我通过PA5获得电源的事实是一个巧合。