中级会员
 
- 积分
- 423
- 金钱
- 423
- 注册时间
- 2017-4-1
- 在线时间
- 73 小时
|
1金钱
以下是Cube自动生成的中断服务函数,由于设定的是输出匹配型中断,使用回调函数HAL_TIM_OC_DelayElapsedCallback()。
void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
{
/* Capture compare 1 event */
if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET)
{
if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) !=RESET)
{
{
__HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1); SR的相关中断标志被清除
htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
/* Input capture event */
if((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00)
{
HAL_TIM_IC_CaptureCallback(htim);
}
/* Output compare event */
else
{
HAL_TIM_OC_DelayElapsedCallback(htim); 在main.c中插入HAL_TIM_OC_DelayElapsedCallback回调函数
HAL_TIM_PWM_PulseFinishedCallback(htim);
}
htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
}
}
}
遇到的问题是在调用回调函数之前,SR中的相关标志位已被清除,而多个中断源共用HAL_TIM_OC_DelayElapsedCallback函数是无法判断是当前在为哪一个中断源服务。
不知大家有什么好的方法来解决这个问题,我觉得笨一点的方法,就是为每个中断源分别自编一个不同名称的回调函数。
|
|