STM32
直播中

吴湛

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

求助,关于STM32F030定时器通道设置问题求解

                  

  • void bsp_StartHardtimer(uint8_t _CC, uint32_t _uiTimeOut, void * _pCallBack)
  • {

  •    uint32_t cnt_now;
  •    uint32_t cnt_tar;
  •    TIM_TypeDef* TIMx = TIM3;

  •    cnt_now = TIMx->CNT;
  •    cnt_tar = cnt_now + 5000;            /* 计算捕获的计数器值 */
  •    if (_CC == 1)
  •     {
  •       s_TIM_CallBack1 = (void (*)(void))_pCallBack;

  •       TIMx->CCR1 = cnt_tar;                 /* 设置捕获比较计数器CC1 */
  •       TIMx->SR = (uint16_t)~TIM_IT_CC1;   /* 清除CC1中断标志 */
  •       TIMx->DIER |= TIM_IT_CC1;            /* 使能CC1中断 */
  •                         Set_T1M3_CC1_Count = _uiTimeOut;
  •     }

  •    else if (_CC == 2)
  •     {
  •       s_TIM_CallBack2 = (void (*)(void))_pCallBack;

  •       TIMx->CCR2 = cnt_tar;                 /* 设置捕获比较计数器CC1 */
  •       TIMx->SR = (uint16_t)~TIM_IT_CC2;   /* 清除CC1中断标志 */
  •       TIMx->DIER |= TIM_IT_CC2;            /* 使能CC1中断 */
  •                         Set_T1M3_CC2_Count = _uiTimeOut;
  •     }
  • }



  • void TIM3_IRQHandler()
  • {

  •         if(TIM_GetITStatus(TIM3,TIM_IT_CC1) != RESET)
  •         {
  •                 T1M3_CC1_Count++;
  •                 TIM_ClearITPendingBit(TIM3,TIM_IT_CC1);

  •                 if(Set_T1M3_CC1_Count == T1M3_CC1_Count)
  •                 {

  •                         TIM_ITConfig(TIM3,TIM_IT_CC1,DISABLE);
  •                         Set_T1M3_CC1_Count=0;
  •                         T1M3_CC1_Count= 0;
  •                         s_TIM_CallBack1();
  •                 }
  •         }




  •         if(TIM_GetITStatus(TIM3,TIM_IT_CC2) != RESET)
  •         {
  •                 T1M3_CC2_Count++;
  •                 TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);

  •                 if(Set_T1M3_CC2_Count == T1M3_CC2_Count)
  •                 {

  •                         TIM_ITConfig(TIM3,TIM_IT_CC2,DISABLE);
  •                         Set_T1M3_CC2_Count=0;
  •                         T1M3_CC2_Count= 0;
  •                         s_TIM_CallBack2();
  •                 }
  •         }
  • }
上面代码是网上抄的,经过我修改
我同一时间只需要调用1个通道,1个指针函数就可以了。后面指针函数越写越多。4个通道不够用了,我想直接在形参void * _pCallBack调用就可以了,
然后都用CC1.后来发现会进入HardFault_Handler。这是为什么了?



回帖(1)

李椰潭

2024-4-9 15:00:39
中断里边执行的函数,栈溢出了吧
举报

更多回帖

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