初级会员

- 积分
- 88
- 金钱
- 88
- 注册时间
- 2013-10-10
- 在线时间
- 12 小时
|
本帖最后由 紫阳真人 于 2018-8-2 12:20 编辑
主函数循环里面开启了printf,后面不加延时,并且HAL_UART_Receive_IT写在中断里,通过上位机给发送指令程序会卡死。单片机接收指令后,中断里HAL_UART_Receive_IT不会返回HAL_OK,但是退出中断在主函数循环里再次调用HAL_UART_Receive_IT的时候正常。
主函数循环部分代码如下:
while (1)
{
printf("\nLocation:%d",AdcValueFilter(MOTOR_LOCATION));
// HAL_Delay(50);/**/
// HAL_UART_Receive_IT(&huart3,(uint8_t*)aRxBuffer,4);
/*其他*/
}
中断回调函数部分代码:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
do
{
ret = HAL_UART_Receive_IT(&huart3,(uint8_t*)aRxBuffer,4);/*判忙?*/
}
while(ret != HAL_OK);
}
以下是在上面程序上做修改后的现象:
1、如程序所示,此时接收一次数据之后直接在do while里面死循环;
2、把do while去掉,只留HAL_UART_Receive_IT,系统接收一次之后不能再接收;
3、主函数加上HAL_Delay(50);正常;
4、HAL_UART_Receive_IT写在主函数,中断里do while去掉,正常;
5、去掉主函数里的printf语句,正常;
请问到底是哪里出了问题,原理是什么,该怎么改?
|
|