Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GPS
RT-Thread Studio
debug工具没法接收到gps接的usart2发送的数据
发布于 2020-07-18 17:34:04 浏览:944
订阅该版
/* * 程 序 清 单: 这 是 一 个 串 口 设 备 使 用 例 程 * 例 程 导 出 了 uart_sample 命 令 到 控 制 终 端 * 命 令 调 用 格 式:uart_sample uart2 * 命 令 解 释: 命 令 第 二 个 参 数 是 要 使 用 的 串 口 设 备 名 称, 为 空 则 使 用 默 认 的 串 口 设 备 * 程 序 功 能: 通 过 串 口 输 出 字 符 串"hello RT-Thread!", 然 后 错 位 输 出 输 入 的 字 符 */ #include
#define HUARTNAME2 "uart2" #define HUARTNAME1 "uart1" /* 用 于 接 收 消 息 的 信 号 量 */ static struct rt_semaphore rx_sem; static rt_device_t serial2; static rt_device_t serial1; /* 接 收 数 据 回 调 函 数 */ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) { /* 串 口 接 收 到 数 据 后 产 生 中 断, 调 用 此 回 调 函 数, 然 后 发 送 接 收 信 号 量 */ rt_sem_release(&rx_sem); return RT_EOK; } static void serial_thread_entry(void *parameter) { char ch; while (1) { /* 从 串 口 读 取 一 个 字 节 的 数 据, 没 有 读 取 到 则 等 待 接 收 信 号 量 */ while (rt_device_read(serial2, -1, &ch, 1) != 1) { /* 阻 塞 等 待 接 收 信 号 量, 等 到 信 号 量 后 再 次 读 取 数 据 */ rt_sem_take(&rx_sem, RT_WAITING_FOREVER); } /* 读 取 到 的 数 据 通 过 串 口 错 位 输 出 */ ch = ch; rt_device_write(serial2, -1, &ch, 1); printf("%c",ch); } } static int uart_sample(int argc, char *argv[]) { rt_err_t ret = RT_EOK; char uart2_name[RT_NAME_MAX]; char uart1_name[RT_NAME_MAX]; char str[] = "hello RT-Thread!\r\n"; if (argc == 2) { rt_strncpy(uart2_name, argv[1], RT_NAME_MAX); rt_strncpy(uart1_name, argv[1], RT_NAME_MAX); } else { rt_strncpy(uart2_name, HUARTNAME2, RT_NAME_MAX); rt_strncpy(uart1_name, HUARTNAME1, RT_NAME_MAX); } /* 查 找 系 统 中 的 串 口 设 备 */ serial2 = rt_device_find(uart2_name); serial1 = rt_device_find(uart1_name); if (!serial2) { rt_kprintf("find %s failed!\n", uart2_name); return RT_ERROR; } if (!serial1) { rt_kprintf("find %s failed!\n", uart1_name); return RT_ERROR; } /* 初 始 化 信 号 量 */ rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); /* 以 中 断 接 收 及 轮 询 发 送 模 式 打 开 串 口 设 备 */ rt_device_open(serial2, RT_DEVICE_FLAG_INT_RX); rt_device_open(serial1, RT_DEVICE_FLAG_INT_RX); /* 设 置 接 收 回 调 函 数 */ rt_device_set_rx_indicate(serial2, uart_input); /* 发 送 字 符 串 */ rt_device_write(serial2, 0, str, (sizeof(str))); rt_device_write(serial1, 0, str, (sizeof(str))); /* 创 建 serial 线 程 */ rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); /* 创 建 成 功 则 启 动 线 程 */ if (thread != RT_NULL) { rt_thread_startup(thread); } else { ret = RT_ERROR; } return ret; } /* 导 出 到 msh 命 令 列 表 中 */ MSH_CMD_EXPORT(uart_sample, uart device sample); int main(int argc,char *argv[]){ uart_sample(argc, argv); return RT_EOK; }
查看更多
3
个回答
默认排序
按发布时间排序
grey
2020-07-18
这家伙很懒,什么也没写!
![Snipaste_2020-07-18_17-54-55.png](/uploads/20200718/e75ddf6a9e9662621a569371b7d94d19.png)
红枫
认证专家
2020-07-18
这家伙很懒,什么也没写!
shell也是使用的uart2吧?和你例程的串口冲突了吧!
阿基米东
认证专家
2020-07-18
https://github.com/luhuadong
肯定收不到啦 ( ̄_, ̄ ) 首先,你是在 main 函数调用 uart_sample 直接给串口发送数据的。 ``` int main(int argc,char *argv[]) { uart_sample(argc, argv); return RT_EOK; } ``` 然后 uart_sample 函数里要初始化串口,又要发送数据。 ``` /* 初 始 化 信 号 量 */ rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); /* 以 中 断 接 收 及 轮 询 发 送 模 式 打 开 串 口 设 备 */ rt_device_open(serial2, RT_DEVICE_FLAG_INT_RX); rt_device_open(serial1, RT_DEVICE_FLAG_INT_RX); /* 设 置 接 收 回 调 函 数 */ rt_device_set_rx_indicate(serial2, uart_input); /* 发 送 字 符 串 */ rt_device_write(serial2, 0, str, (sizeof(str))); rt_device_write(serial1, 0, str, (sizeof(str))); /* 创 建 serial 线 程 */ rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); ``` 问题就在这里呀!你都还没设置好 uart 回调函数,就 open 。。。还没启动串口数据接收线程,就 write 。。。 怎么可能收到数据啊! 所以,解决办法很简单啦,就是调一下顺序呗! ``` /* 初 始 化 信 号 量 */ rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); /* 设 置 接 收 回 调 函 数 */ rt_device_set_rx_indicate(serial2, uart_input); /* 创 建 serial 线 程 */ rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); /* 创 建 成 功 则 启 动 线 程 */ if (thread != RT_NULL) { rt_thread_startup(thread); } else { ret = RT_ERROR; } /* 以 中 断 接 收 及 轮 询 发 送 模 式 打 开 串 口 设 备 */ rt_device_open(serial2, RT_DEVICE_FLAG_INT_RX); rt_device_open(serial1, RT_DEVICE_FLAG_INT_RX); /* 发 送 字 符 串 */ rt_device_write(serial2, 0, str, (sizeof(str))); rt_device_write(serial1, 0, str, (sizeof(str))); ``` 另外,你打开两个串口是为了测试是吧?像楼上说的,先确认好串口是不是 uart2,然后改改代码再测试一下吧!应该是可以的! PS. 建议把串口初始化和 write 操作分开来。 <( ̄︶ ̄)>
撰写答案
登录
注册新账号
关注者
0
被浏览
944
关于作者
grey
这家伙很懒,什么也没写!
提问
1
回答
1
被采纳
0
关注TA
发私信
相关问题
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部