Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
UART
关于STM32串口通信的问题
发布于 2016-04-26 17:20:40 浏览:4393
订阅该版
为什么这个程序每次都读写一个字符,最后却能够完成多字符通讯。如果我想自己编写通讯协议,在which内怎么能够同时判定多字符(which内每次读写一个字符) ```c #include
struct rx_msg { rt_device_t dev; rt_size_t size; }; /* 用于接收消息的消息队列*/ static rt_mq_t rx_mq; /* 接收线程的接收缓冲区*/ static char uart_rx_buffer[512]; static char uart_sx_buffer[512]; /* 数据到达回调函数*/ rt_err_t uart_input(rt_device_t dev, rt_size_t size) { struct rx_msg msg; msg.dev = dev; msg.size = size; /* 发送消息到消息队列中*/ rt_mq_send(rx_mq, &msg, sizeof(struct rx_msg)); return RT_EOK; } void device_thread_entry(void* parameter) { struct rx_msg msg; int count = 0; rt_device_t device, write_device; rt_err_t result = RT_EOK; /* 查找系统中的串口1设备 */ device = rt_device_find("uart1"); if (device!= RT_NULL) { /* 设置回调函数及打开设备*/ rt_device_set_rx_indicate(device, uart_input); rt_device_open(device, RT_DEVICE_OFLAG_RDWR); } /* 设置写设备为uart1设备 */ write_device = device; /* 查找系统中的串口2设备 */ device= rt_device_find("uart2"); if (device != RT_NULL) { /* 设置回调函数及打开设备*/ rt_device_set_rx_indicate(device, uart_input); rt_device_open(device, RT_DEVICE_OFLAG_RDWR); } while (1) { /* 从消息队列中读取消息*/ result = rt_mq_recv(rx_mq, &msg, sizeof(struct rx_msg), 50); // if (result == -RT_ETIMEOUT) // { // /* 接收超时*/ // rt_kprintf("timeout count:%d ", ++count); // } // /* 成功收到消息*/ if (result == RT_EOK) { rt_uint32_t rx_length; rx_length = (sizeof(uart_rx_buffer) - 1) > msg.size ? msg.size : sizeof(uart_rx_buffer) - 1; /* 读取消息*/ rx_length = rt_device_read(msg.dev, 0, &uart_rx_buffer[0], rx_length); uart_rx_buffer[rx_length] = '�'; /* 写到写设备中*/ if (write_device != RT_NULL) rt_device_write(write_device, 0, &uart_rx_buffer[0], rx_length); } } } static struct rt_messagequeue s_your_mq;//消息队列控制块对象 static char s_msg_pool[1024];//消息池 int rt_application_init() { /* 创建devt线程*/ rt_thread_t thread = rt_thread_create("devt", device_thread_entry, RT_NULL, 1024, 25, 7); rt_mq_init(&s_your_mq,"test",&s_msg_pool[0],sizeof(struct rx_msg),sizeof(s_msg_pool),RT_IPC_FLAG_FIFO);//初始化消息队列控制块 rx_mq =&s_your_mq;//将rx_mq再指向s_your_mq /* 创建成功则启动线程*/ if (thread != RT_NULL) rt_thread_startup(thread); } ```
查看更多
8
个回答
默认排序
按发布时间排序
skyline
2016-05-18
这家伙很懒,什么也没写!
我也在这段代码上遇到同样问题;区别是我把接收到的字符输出到lcd; 从结果上看 每次只能显示一个或者2个字符; 我的目的是把从uart1接收到的数据帧 解码成可读信息输出到lcd显示
一个潘一个锐
2016-05-18
这家伙很懒,什么也没写!
开一个线程,循环读取串口缓存的数据,1字节或者多字节读到buff里,直到确定为一帧长度或者你约定某个结束符为一帧,即去处理。跟裸机fifo缓存处理方式是一样的。
zqty467896321d
2018-09-26
这家伙很懒,什么也没写!
不知道楼主解决了吗?我也是这样的问题,我想读取串口缓存的数据,来判定接收的数据是不是完整的?但是缓存的数据变化的很快,不知道怎么办?
rockjg0917
2018-09-27
这家伙很懒,什么也没写!
用DMA接收
jeasey
2018-10-25
这家伙很懒,什么也没写!
你好,你使用的库函数还是HAL?我使用的HAL库,rt-thread版本为3.1.1接收数据基本就死在了串口中断里面。 你串口中断怎么处理的,能参考一下吗?谢谢!
venus5712
2018-10-25
这家伙很懒,什么也没写!
我是再自己程序里用到了一个简单的状态机,每接收一个字节读取判断改变状态。解析协议没得问题的。
wszdxmh
2021-04-09
这家伙很懒,什么也没写!
如果是定长数据,可以用DMA接收,做起来比较方便,如果是不定长数据,可以用中断的方式,比较简单,每接收一个数据,按通讯的协议进行判断,如按帧头,帧长度,帧命令字,校验码等进行判断,检验通过后发送信号给相关任务。也可以用DMA+空闲中断的方式,可以搜索一下DMA+环形缓存。
撰写答案
登录
注册新账号
关注者
0
被浏览
4.4k
关于作者
qq_夜止
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
1
rt thread 2.0.2 usart 接收缓存问题
2
STM32F1+RTT串口接收终端数据丢失问题
3
UART TX丢数据?
4
RTT打开串口的时候如何自定义波特率呢?
5
STM32F4的USART数据接收问题
6
串口1234使用问题
7
串口接收回调函数
8
LPC18xx UART问题讨论
9
x1000串口配置的失败问题
10
如何用串口输出一个字符
推荐文章
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
嵌入式大赛Top10排名公布!作品共赏,看大奖花落谁家!
2
基于开源操作系统的融合创新:睿赛德科技荣获汽车操作系统TOP10
3
k230运行rt-smart
4
RT-Thread SCons上手指北
5
CAN调试过程曲折不断,记录调试过程的问题和解决方法。
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
flash
packages_软件包
cubemx
PWM
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
C++_cpp
ulog
at_device
本月问答贡献
出出啊
1515
个答案
342
次被采纳
小小李sunny
1438
个答案
289
次被采纳
张世争
786
个答案
169
次被采纳
crystal266
546
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
6
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部