- 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。这是为什么了?
|
为什么会栈溢出?我是用指针函数