本帖最后由 ldqmoon 于 2018-4-17 22:39 编辑 按下面这个方式来写的串口接收程序,中断方式 刚开机的时候,经常接收不到数据, 调试发现只能接收到第一个字节,上位机多发几次才能收到。 网上查了一些资料,说是中断程序太长导致, 可我的这个程序不长啊, 仅仅就是把接收到的数据放到buff中 麻烦大家分析一下 补充一下: 这个程序在正常运行后就不会再出问题 #define MAX_RECV_LEN 2048 uint8_t msg_buff[MAX_RECV_LEN] = {0}; uint8_t * msg = msg_buff; static int flag = FALSE; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { uint8_t ret = HAL_OK; if(UartHandle==(&huart1)) { msg++; if( msg == msg_buff + MAX_RECV_LEN) { msg = msg_buff; } do { ret = HAL_UART_Receive_IT(UartHandle,(uint8_t *)msg,1); }while(ret != HAL_OK); flag = TRUE; } } main()中 memset(msg_buff, 0, sizeof(msg_buff)); msg = msg_buff; printf("hello world\r\n"); HAL_UART_Receive_IT(&huart1, (uint8_t *)msg, 1); //启动第一次中断 do{ if(flag==TRUE) { // doing something memset(msg_buff, 0, sizeof(msg_buff)); msg = msg_buff; (&huart1)->pRxBuffPtr = msg; flag = FALSE; } }while(!exitflag); |
STM32L011D4芯片用SWD无法下载程序
求助:STM32L0系列标准库哪里下?
STM32L051低温时LPUART串口波特率异常
STM32L051单片机ADC如何彻底关闭?
STM32L051C8进入低功耗模式电流偏大
STM32L052C8T6通过I2C模拟读16位数
STM32L0的VLCD外接5V会有问题吗
求助!!使用STM32L073 IO口模拟IIC接口读写AT24CM01 程序不停...
STM32L072RB写Bank2 EEPROM不响应中断
STM32L031无法进入boot
评分
查看全部评分
中断函数里用上do{}很不合理。每次中断执行一次
ret = HAL_UART_Receive_IT(UartHandle,(uint8_t *)msg,1);
就应该返回了。
这个中断不是让你一直等到数据全部接收完才返回的。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分