你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

NUCLEO-C071RB评测2_UART不定长数据收发的测试

[复制链接]
老牛洋车 发布时间:2025-5-4 17:01

串口通讯是单片机最常用的通讯方式之一,其中的异步通讯以方便快捷的特点更广泛地被应用,本贴记录了使用UART2与电脑的串口助手进行收发通讯的测试过程。

为了方便调试,本次测试没有采用默认的BSP串口设置,而是直接开启UART2,设置仍按默认的8+n+1模式,通讯速率为115200Hz,下图是CubeMX设置界面:

UART_1.png

首先测试的是利用重定向函数printf发送数据,在魔术棒里选择USR MicroLIB,然后添加重定向函数,就可以轻松地用printf函数发送数据了:

UART_4.png

接收定长的数据也比较容易实现,在主程序中如下设置就可以顺利地接收到数据了:

__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE); //打开串口空闲中断

HAL_UART_Receive_IT(&huart2,RxBuff,64); //启用UART2接收中断

如果不能确定接收的数据长度,使用上述方式就不容易区分之前和本次接收的数据,应用起来就不方便,应该采用每次接收一个字节的数据并保存在缓存区里的方式。按照下列方式设置:

__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE); //打开串口接收中断

HAL_UART_Receive_IT(&huart2,&RxByte,1); //启用UART2接收中断

然后在中断回调函数里将接收到的数据保存到缓存区中:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

HAL_UART_Receive_IT(&huart2,&RxByte,1); //开启下次接收

RxBuff[RxLen++] = RxByte; //保存接收到的数据

}

最后在主循环中根据全局变量RxLen>0来判断是否接收到了数据并进行处理。下面是中断回调函数和自定义发送函数的截图:

UART_3.png

使用printf回送接收到的数据时会遇到截尾的情况,即超过13个字节后数据回送不全。通过编写自定义发送函数,可以改善这种现象,但超过29个字节时也会出现这种现象,还不知道是什么原因。

UART_5.png

收藏 评论0 发布时间:2025-5-4 17:01

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版