OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2405|回复: 1

cubeMX生成的串口:不定长数据的问题及网上常用方案的验证

[复制链接]

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-5-4
在线时间
6 小时
发表于 2019-6-9 02:16:00 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 IcySky 于 2019-6-9 02:25 编辑

如题:在调试STM32F103VET6的串口遇到的问题:丢数、卡死(这两种最常见,如果有一直发00的问题,就是语句放的位置不对,这里不讨论)
百度了2天,网上给出的方案90%都是类似这样的:
在main()里面,大循环前面调用一次下面这个函数:
            HAL_UART_Receive_IT(&huart2, &tmp, 1);
    while (1)
    {。。。}

然后在调用回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        if(huart->Instance == USART2){
                HAL_UART_Transmit(&huart2, &tmp, sizeof(tmp),1000);
                HAL_UART_Receive_IT(&huart2, &tmp, 1);
        }
}

基本流程就是这个样子的:好,现在开始上开发板,进行串口调试:
捕获.PNG

----------这样看着好像没啥问题,好再来一次:

捕获 (2).PNG
-------------看到没:发送110个字节,丢了10个字节,好,继续发送更长的数据检测:

捕获 (3).PNG

这次发到第3个长包就挂了,所以这种方式是不能用在实际项目中的,稳定性极差,DMA也测试过了,同样丢数
发这个贴子,意思就是说,上面那种方式通过测试不合理,看了一些例程,里面要判断0d0a,实际项目中很多时候,单片机这边是被动修改协议的,0D0A并不是万能的。
哪位大佬可怜可怜小弟,指条明路吧,怎么样才能单字节稳定收发呀,要不然哭死在键盘上了......






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-5-4
在线时间
6 小时
 楼主| 发表于 2019-6-11 12:41:54 | 显示全部楼层
方式不对,单字节连续收发不适合STM32芯片,收完再发,是可以的,测试已通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 20:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表