我正在对一块板进行编程,希望PWM信号出现在引脚上以驱动LED。我正在使用STM32 NUCLEO-F207ZG开发板,并且仅使用低级寄存器编程。它不起作用。
我研究了手册,数据表和应用笔记。还完成了一些Google搜索。
//启用计时器1个时钟:RCC-> APB2ENR | = BIT0;
//Output mode on PWM
TIM1->CCMR1 |= BIT5 | BIT6;
//Period:
TIM1->ARR = 0x0000FFFF;
//Duty cycle:
TIM1->CCR1 = 0x00007FFF;
//Enable preload
TIM1->CCMR1 |= BIT3;
TIM1->CR1 |= BIT7;
//Enable CC1 output
TIM1->CCER |= BIT0;
//Enable timer
TIM1->CR1 |= BIT0;
//Enable GPIOE clock
RCC->AHB1ENR |= BIT4;
//Alternate function mode voor pin PE_9
GPIOE->MODER |= BIT19;
GPIOE->AFR[1] |= BIT4;
我希望引脚D6(PE_9)上有PWM信号来驱动LED。但是LED似乎无能为力。
我没有一点一点地检查您的代码,但总体来说似乎还可以。但是我怀疑是问题的可能原因:通常,在启用任何外设之后,在访问任何外设之前,您应该等待几个时钟周期。我可能是错的,但是外围设备可能忽略了这两行代码,因为它们是在启用时钟后立即执行的:
TIM1->CCMR1 |= BIT5 | BIT6;
GPIOE->MODER |= BIT19;
我建议使用调试器来检查是否所有外设寄存器都加载了正确的值。
我也建议尝试其他PWM通道。由于板卡的硬件配置,可能与您使用的引脚有一些冲突。