OpenEdv-开源电子网

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

使用STM32CUBEMX测试串口问题

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2023-6-3
在线时间
4 小时
发表于 2023-7-25 22:47:16 | 显示全部楼层 |阅读模式
5金钱
最近在使用STM32CUBEMX测试串口的时候发现,在接收回调函数中将接收到的数据发送出去的话,会出现发出来的数据分别是第1,3,5...的字节,即每2个字节丢失一个字节,但是如果使用缓冲接收完字节后再在循环中发送,则能发送完整的数据包,不知道这是为啥;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        if(huart == (&huart1))
        {
                HAL_UART_Transmit_IT(&huart1,&recbuff[reclen],1);
                HAL_UART_Receive_IT(&huart1,&recbuff[reclen],1);
        }
}



串口打印信息:
TXD:01 02 03 04 05 06 07 08
RXD:01 03 05 07
TXD:01 02 03 04 05 06 07 08
RXD:01 03 05 07

最佳答案

查看完整内容[请看2#楼]

串口助手发送一串数据,之间无间隔,比如1ms发送1字节; 但是单片机发送时,由于有多余的代码,会消耗比1字节的时间多一点,比如1.1ms, 那么,下一字节到来时,这一字节还没发完,就可能会来不及处理接收到的数据。 关键,你这样的用法是:收到一字节就关中断,发送一字节,开中断,在发送期间估计收到了新数据,但未来得及开中断,所以丢失。 你看看HAL_UART_Receive_IT的介绍。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-7-25 22:47:17 | 显示全部楼层
串口助手发送一串数据,之间无间隔,比如1ms发送1字节;
但是单片机发送时,由于有多余的代码,会消耗比1字节的时间多一点,比如1.1ms,
那么,下一字节到来时,这一字节还没发完,就可能会来不及处理接收到的数据。

关键,你这样的用法是:收到一字节就关中断,发送一字节,开中断,在发送期间估计收到了新数据,但未来得及开中断,所以丢失。
你看看HAL_UART_Receive_IT的介绍。
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 04:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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