新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2021-5-3
- 在线时间
- 3 小时
|
5金钱
我在定时器中断中使用can通信,但是can的发送函数里面的HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout)中有关发送超时的一部分 /* Check End of transmission flag */
while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox)))
{
/* Check for the Timeout */
if(Timeout != HAL_MAX_DELAY)
{
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
{
hcan->State = HAL_CAN_STATE_TIMEOUT;
/* Process unlocked */
__HAL_UNLOCK(hcan);
return HAL_TIMEOUT;
}
}
}
其中HAL_GetTick()的返回值不增加,经过各种搜索说是,系统systick的中断优先级小于我设置的定时器中断,导致不能进入systick的中断处理函数所以不增加。这个要如何解决,怎么提高systick的中断优先级
|
最佳答案
查看完整内容[请看2#楼]
在非抢占模式下,tim中断不退出,tick中断就不进,tick值自然就不累加,再高的优先级也没用。 说的简单点,尽量不要让外设在定时器中断内干活。这应该是arm编程基本规范之一。
解决办法是在tim中断计算时间,主循环判断时间标记决定是否让外设干活。
|