Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
串口
20
串口带奇偶校验数据时不时出现错误帧?
发布于 2024-05-31 22:27:01 浏览:322
订阅该版
串口配置为9600;偶校验: ```c config_uart3.baud_rate = BAUD_RATE_9600; // 修改波特率为 9600 config_uart3.data_bits = DATA_BITS_9; // 数据位9;带校验位 config_uart3.stop_bits = STOP_BITS_1; // 停止位 1 config_uart3.parity = PARITY_EVEN; // 偶校验 ``` 如官方示例,串口中断函数释放信号量,通知线程接收; ```c /* 接收数据回调函数 */ static rt_err_t SensorReceiveCallback(rt_device_t dev, rt_size_t size) { rt_sem_release(&rx_sem); return RT_EOK; } ``` 串口接收,第一个while(1)循环读取串口中断的数据,直到遇到正确的帧头后,持续读取后续数据; 读取完成后调用数据帧检查和解析函数。 ```c static rt_err_t SensorReceiveResponse(void) { static char pbuff[MAX_FRAME_SIZE];//存放所有接收的数据 static char singlebyte; //接收的单字节 memset(pbuff,0,MAX_FRAME_SIZE); uint32_t BufferSize = 0; rt_err_t result = -RT_ERROR; /* 串口中断读取数据 */ while (1) { while(rt_device_read(serial3, 0, &singlebyte,1)!=1)//当read一个字节,跳出while; 不然一直阻塞 { result = rt_sem_take(&rx_sem, 200); if(result == -RT_ETIMEOUT) { rt_sem_control(&rx_sem, RT_IPC_CMD_RESET, RT_NULL); rt_kprintf("Response Timeout\n"); return result; } } if (singlebyte == (char)HEADER_MAGIC) { pbuff[BufferSize] =singlebyte; break; } else { rt_kprintf("------wrong header byte: 0x%02X -------\n",singlebyte); } } /* 正确读取到帧头后存入后续数据*/ while(1) { if (rt_device_read(serial3, 0, &singlebyte,1)!=1) //如果没有读取成功,等待10ms; { result = rt_sem_take(&rx_sem, 10); } else { BufferSize++; pbuff[BufferSize]=singlebyte; } if (result ==-RT_ETIMEOUT) { rt_sem_control(&rx_sem, RT_IPC_CMD_RESET, RT_NULL); break; } } BufferSize++; //数组从0开始,所以长度需要加1 /*调用接收帧校验函数*/ result = SensorCheckTelegram((rt_uint8_t*)pbuff,BufferSize, INIT_SLOT_NUMBER,index, header_bits, ShortCommandCRC,LongCommandCRC,offset,objectlen); if (result != RT_EOK) { LOG_E("Telegram Check Failed"); return result; } return result; } ``` 实验结果表明:有非常多的次出现,前几个字节错误的情况发生。 几乎是每2次正确读取后出现,数据错误情况; 以下是截取部分(sensor Command为发送的数据,raw rev telegram为接收的数据); 第二次读取为错误的,开头的前3字节应该和发送的一样为0xA5 0x02 0x01,但后面的字节都是正确的。 ```c Sensor Command: 0xA5 0x02 0x00 0x00 0x00 0x12 0x4A ------------------- Raw Rev Telegram: 0xA5 0x02 0x00 0x01 0x00 0xED 0x99 0x20 0x01 0x74 0x27 0x01 0x00 0x4B 0x53 0x47 0x33 0x20 0x53 0x37 0x32 0x30 0x42 0x46 0x30 0x35 0x42 0x30 0x37 0x20 0x20 0x20 0x20 0x20 0x01 0x00 0x11 0x27 0x00 0xD3 0xD9 0xE8 0xF9 ----------------------------- Sensor Command: 0xA5 0x02 0x01 0x02 0x00 0x13 0x84 0x00 0x00 0x00 0x00 0x06 0xAC ------wrong header byte: 0x81 ------- ------wrong header byte: 0xC0 ------- ------wrong header byte: 0x42 ------- ------wrong header byte: 0x18 ------- ------wrong header byte: 0x1F ------- ------wrong header byte: 0x11 ------- ------wrong header byte: 0x00 ------- ------wrong header byte: 0x00 ------- ------wrong header byte: 0x00 ------- ------wrong header byte: 0x06 ------- ------wrong header byte: 0xAC ------- ```
查看更多
1
个回答
默认排序
按发布时间排序
miandain_7
2024-06-03
这家伙很懒,什么也没写!
建议用示波器看一下串口的数据波形,是不是帧头数据的波形有问题
撰写答案
登录
注册新账号
关注者
0
被浏览
322
关于作者
张文彬
这家伙很懒,什么也没写!
提问
7
回答
5
被采纳
0
关注TA
发私信
相关问题
1
串口DMA发送数据时,数据被覆盖
2
关于串口DMA模式下rt_device_close问题
3
利用stm32f427实现usb转串口,电脑端什么也没有识别到
4
finsh 控制台 适配 RS 485请大神指点????
5
uart_sample.c 中,读串口设备时偏移量pos要设置为-1而不是0?
6
【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常
7
串口无法接受数据,但可以发送
8
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
9
串口接收使用方式问题
10
雅特力FINSH问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
16
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部