我正在使用 B-L4S5I-IOT01A 板 (STM32L4S5VIT6),并且遵循裸机课程,但我无法在计时器到期时强制 LED 闪烁。
在我的电路板配置中,LED 连接在 PB14 上,并且在文档中我也看到 PB14 在备用功能 1 下具有 TIM1_CH2N。
void initTimerTim1()
{
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
(void)RCC->APB2ENR;
GPIOB->MODER &= ~(1U << 28);
GPIOB->MODER |= 1U << 29;
GPIOB->AFR[1] |= 1U << 24;
GPIOB->AFR[1] &= ~(1U << 25);
GPIOB->AFR[1] &= ~(1U << 26);
GPIOB->AFR[1] &= ~(1U << 27);
TIM1->PSC = 400 - 1;
TIM1->ARR = 20000 - 1;
TIM1->CNT = 0;
TIM1->CCMR1|=TIM_CCMR1_OC2M_0|TIM_CCMR1_OC2M_1;
TIM1->CCER|=TIM_CCER_CC2E;
TIM1->BDTR |= TIM_BDTR_MOE;
TIM1->CR1 |= TIM_CR1_CEN;
}
int main()
{
RCC->AHB2ENR |= 1U << 1;
RCC->AHB2ENR |= 1U << 2;
initTimerTim1();
while (1){}
}
我还检查了一些寄存器,它似乎配置正确(至少根据我的理解)。
GPIOB->MODER MODER14 = 0b10 (10: Alternate function mode)
GPIOB->AFRH PIN14 = 0b0001 (0001: AF1)
TIM1->CR1 CEN = 0b1
TIM1->CCER CC2E = 0b1
TIM1->CCMR1_Output O2CM=0b011
是否可以使用 TIM1 来实现这一目标(我的课程使用 TIM2)。
TIM1_CH2N 由 TIMx_ENR.CC2NE 启用。
JW