ST意法半导体
直播中

的撒的

9年用户 667经验值
擅长:可编程逻辑
私信 关注
[问答]

输入捕获预分频器都无法按预期工作的原因?怎么解决?

我正在尝试在直接输入捕获模式 (STM32F3-DISCOVERY) 中使用 tiM1 测量方波的频率。我可以成功测量频率,但我想添加一个输入预分频器,无论我设置的预分频器的值是多少,我都会在我的捕获/比较寄存器 (CCR1) 上获得相同的值。
我的 TIM1 代码:
  • void TIM1_IC_INIT(void) {
  •         RCC->AHBENR |= RCC_AHBENR_GPIOAEN;                 //ENABLE GPIOA CLOCK
  •         RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;                  //ENABLE TIMER CLOCK
  •         RCC->CFGR3 |= RCC_CFGR3_TIM1SW;                      //SELECT CLOCK SOURCE PLLCLK*2
  •         GPIOA->MODER |= GPIO_MODER_MODER8_1;      //SET GPIO TO ALETERNATE FUNCTION
  •         GPIOA->AFR[1] |= 6 << GPIO_AFRH_AFRH0_Pos;    //AF6 FOR PA8 , TIM1_CH1
  •         TIM1->SMCR |= 5 << TIM_SMCR_TS_Pos | TIM_SMCR_SMS_2;   //RESET MODE
  •         TIM1->CCMR1 |= 1 << TIM_CCMR1_CC1S_Pos;        //CONFIGURE CH1 AS INPUT
  •         TIM1->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);        //RISING EDGE POLARITY
  •         TIM1->CCMR1 |= 3 << TIM_CCMR1_IC1PSC_Pos;     //SET A PRESCALER OF 8
  •         TIM1->CCER |= TIM_CCER_CC1E;                                //ENABLE CAPTURE
  •         TIM1->CR1 |= TIM_CR1_CEN;                                      // START TIMER
  • }
在调试时,我检查了 CCMR1 的值以检查预分频器位是否已正确设置,是的,IC1PSC[3:2] 的值设置为 0b11。我不知道问题出在哪里,有什么想法吗?





回帖(1)

王宇

2023-1-4 10:15:41
从模式控制器的输入未被预分频,即每个上升沿都会重置计数器,因此无论预分频器是什么,捕获的值都来自前一个重置,即前一个边沿。
不要使用从模式控制器复位,而是根据两个连续捕获值的差值计算频率。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分