Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ART-Pi
RT-Thread
《玩转ART-Pi开发板》第6章 ART-Pi 添加一个串口设备
发布于 2021-03-17 21:57:14 浏览:1797
订阅该版
[tocm] RTT 中外设作为设备存在,在建立工程的时候,**ART-Pi串口4被作为系统调试串口**,假如现在有一个串口模块需要和单片机通讯,则可以再初始化一个串口。如果没有驱动,那么第一步就需要写驱动,针对ART-Pi,已经有4个写好的UART驱动设备,只需要打开相应的设备即可,ART-Pi扩展引脚有UART1,因此这里使用UART1,本文给出两种使用方式。 ## 6.1手动添加串口设备 在目前的RTT版本中,可以通过定义board.h中相关的宏定义来添加串口设备。添加一个串口设备需要以下几个步骤: 在 board.h 中已经添加了UART1的引脚定义宏,代码如下: ![69Wghj.png](https://oss-club.rt-thread.org/uploads/20220714/8b659ff2b72ee5eaee0a6292085c5afba177b1a8.png) 在 rtconfig.h 中打开UART1设备即可,添加代码如下: ```c #define BSP_USING_UART1 ``` ![69WW3n.png](https://oss-club.rt-thread.org/uploads/20220714/158d8423c1b586d54eecc32c9cf6ec7d706641e6.png) ---- 在applications新建task.c和task.h文件。 **[task.c]** ```c /** ****************************************************************************** * @file task.c * @author BruceOu * @lib version HAL * @version V1.0 * @date 2021-02-27 * @blog https://blog.bruceou.cn/ * @Official Accounts 嵌入式实验楼 * @brief RTT任务 ****************************************************************************** */ /*Includes**********************************************************************/ #include "task.h" #define THREAD_PRIORITY 2 #define THREAD_STACK_SIZE 512 #define THREAD_TIMESLICE 5 static rt_thread_t tid1 = RT_NULL; #define SAMPLE_UART_NAME "uart1" /* 串口设备名称 */ static rt_device_t serial; /* 串口设备句柄 */ struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 初始化配置参数 */ /* 线程 的入口函数 */ static void thread_entry(void *parameter) { rt_uint32_t count = 1; char str[] = "hello RT-Thread!\r\n"; /* step1:查找串口设备 */ serial = rt_device_find(SAMPLE_UART_NAME); /* step2:修改串口配置参数 */ config.baud_rate = BAUD_RATE_9600; //修改波特率为 9600 config.data_bits = DATA_BITS_8; //数据位 8 config.stop_bits = STOP_BITS_1; //停止位 1 config.bufsz = 128; //修改缓冲区 buff size 为 128 config.parity = PARITY_NONE; //无奇偶校验位 /* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */ rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config); /* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */ rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); while (count++) { if(count == 5000) { count = 1; } rt_thread_mdelay(2000); /* 发送字符串 */ rt_device_write(serial, 0, str, (sizeof(str) - 1)); } } /* 线程 */ int thread_serial(void) { /* 创建线程 ,名称是 thread,入口是 thread_entry*/ tid1 = rt_thread_create("thread", thread_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); /* 如果获得线程控制块,启动这个线程 */ if (tid1 != RT_NULL) rt_thread_startup(tid1); return 0; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(thread_serial, thread serial); ``` **[task.h]** ```c #ifndef _TASK_H_ #define _TASK_H_ #include
#include "rtconfig.h" #include
#include "drv_common.h" int thread_serial(void); #endif ``` 编译,下载。在finish中终端使能thread_serial: ![69WO3R.png](https://oss-club.rt-thread.org/uploads/20220714/8f3a1c2e26df7cd6b6c292e92a5f9983639fc8d7.png) 使用串口调试助手即可查看uart1的输出信息。 ![69Wjjx.png](https://oss-club.rt-thread.org/uploads/20220714/969e044ee2bb1f9f454f1a2a8ba123931dfe6b72.png) ## 6.2使用Env工具添加串口设备 进入工程环境,打开env控制台,输入 menuconfig 命令后即可打开其界面。依次进入以下选项: > → Hardware Drivers Config → On-chip Peripheral → Enable UART 使能UART1,保存退出即可。 ![69fSHO.png](https://oss-club.rt-thread.org/uploads/20220714/670344f5a01fabf09e1ad9ebbce9a93eea2b359c.png) 和自动添加串口设备一样,添加相应的应用程序。也就是task.c的内容。 ![69fZKP.png](https://oss-club.rt-thread.org/uploads/20220714/52a175fc454900922ea43c71b6f6bcfb155bc5f8.png) 目录中运行 scons 命令即可使用默认的 ARM_GCC 工具链编译: ![69fmb8.png](https://oss-club.rt-thread.org/uploads/20220714/972f17935c213989f069da73d9ae97c43c1d9e44.png) 编译成功: ![69fM5Q.png](https://oss-club.rt-thread.org/uploads/20220714/a354462646ace2bd37e1be3cc75d783baa2c93c6.png) 如果编译没有问题,现象和手动添加的一样。 ---- 如果使用 mdk/iar 来进行项目开发,可以直接使用ART-Pi 中的工程文件或者使用以下命令中的其中一种,重新生成工程,再进行编译下载。 ![69f18s.png](https://oss-club.rt-thread.org/uploads/20220714/47e2d719d4920ac70b3fcd8865d448f6a3034baf.png) 打开工程,在 **rtconfig.h** 中则会自动添加UART1的宏定义: ![69f32n.png](https://oss-club.rt-thread.org/uploads/20220714/874c0d484721147ed640aced45c9e035f0f63ee3.png) [RT-Thread UART参考](https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/)
**** **** ### 代码获取方法 1.长按下面二维码,关注公众号[**嵌入式实验楼**] 2.在公众号回复关键词[**Art-Pi**]获取资料 ![嵌入式实验楼](https://oss-club.rt-thread.org/uploads/20220714/fd420eff5a1e144b53d5c2bfca8ec412f963c8db.jpg) ### 欢迎访问我的网站 [BruceOu的哔哩哔哩](https://space.bilibili.com/338944611) [BruceOu的主页](https://www.bruceou.cn/) [BruceOu的博客](https://blog.bruceou.cn/) [BruceOu的CSDN博客](https://blog.csdn.net/bruceoxl) [BruceOu的gitee](https://gitee.com/ouxiaolong/)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
BruceOu
这家伙很懒,什么也没写!
文章
27
回答
0
被采纳
0
关注TA
发私信
相关文章
1
RT-THREAD在STM32H747平台上移植lwip
2
正点原子miniSTM32开发板读写sdcard
3
反馈rtt串口驱动对低功耗串口lpuart1不兼容的问题
4
Keil MDK 移植 RT-Thread Nano
5
RT1061/1052 带 RTT + LWIP和LPSPI,有什么坑要注意吗?
6
RT thread HID 如何收发数据
7
求一份基于RTT系统封装好的STM32F1系列的FLASH操作程序
8
RT-Thread修改项目名称之后不能下载
9
rt-studio编译c++
10
有木有移植rt-thread(nano)到riscv 32位MCU上
推荐文章
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组件
热门标签
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部