前言
UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。是在应用程序开发过程中使用频率最高的数据总线。本文使用RT_Thread通用 I/O 设备管理接口来访问串口硬件,从W600 UART1中读取数据,并原样返回。
一、API简介
RT_Thread支持设备API函数如下表所示:
![9ada1ecc58fc899a117435f657987cbe.png](https://i-blog.csdnimg.cn/blog_migrate/2a6499337f71e3d267f8b2342b41d4b3.jpeg)
API详细说明,请参考RT_Thread官方文档中心串口设备描述,地址如下:https://www.rt-thread.org/document/site/
二、使用实例
1.环境配置
使用ENV工具配置串口资源,选择Hardware Drivers Config
![c975e601f5755951fb9033ccba8534b2.png](https://i-blog.csdnimg.cn/blog_migrate/8f08f5c885959b375f53e5c2c6d64554.jpeg)
选择on-chip Peripheral Drivers --->
![cd6ba040c48f4b42359cff19f9051c5f.png](https://i-blog.csdnimg.cn/blog_migrate/1198d3b3d417b789ed9a0c263dc30579.jpeg)
查看默认已经打开了串口1(PB11:RX, PB12:TX)
![776a32773d502f456f2fc15d8b5d49ef.png](https://i-blog.csdnimg.cn/blog_migrate/4468d924ee084d5429be97788ed6fc7d.jpeg)
2.中断接收并发送
#include #include // 用于接收消息的信号量 */static struct rt_semaphore rx_sem;rt_device_t user_uart;static rt_err_t user_uart_input(rt_device_t dev, rt_size_t size){ rt_sem_release(&rx_sem); return RT_EOK;}static void user_uart_thread_entry(void *args){ char ch; while (1) { while (1 != rt_device_read(user_uart, -1, &ch, 1)) { rt_sem_take(&rx_sem, RT_WAITING_FOREVER); } //send back rt_device_write(user_uart, 0, &ch, 1); } }int main(void){ rt_err_t ret = RT_EOK; char str[] = "hello world!"; user_uart = rt_device_find("uart1"); if (!user_uart) { rt_kprintf("find uart1 failed!"); return RT_ERROR; } rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); rt_device_open(user_uart, RT_DEVICE_FLAG_INT_RX); rt_device_set_rx_indicate(user_uart, user_uart_input); rt_device_write(user_uart, 0, str, sizeof(str) - 1); rt_thread_t uart_thread = rt_thread_create("user_uart", user_uart_thread_entry, RT_NULL, 1024, 25, 10); if (uart_thread != NULL) { rt_thread_startup(uart_thread); }else { ret = RT_ERROR; } return ret;}
三、下载运行
在ENV控制台,输入scons命令,在build/Bin目录下生成rtthread_1M.FLS,烧录运行后,将模块PB12连接串口小板的RX,PB11连接串口小板的TX,共地。
![57f4e4e636e19b7bc3ab8d865c9024f8.png](https://i-blog.csdnimg.cn/blog_migrate/6b5909c3716ce67012d2b318636a8608.jpeg)
上电后,模块会向串口小板发送hello world!,然后通过串口工具发送
hello RT_Thread,模块收到串口工具发送信息后,会自动返回。
![be20c5eb7357d1ee2c8553692fd68434.png](https://i-blog.csdnimg.cn/blog_migrate/8141cdeff534e3516daedcc4d4db0a50.jpeg)
作者:小驿
寄语:如果决定要出发,就不要把时间浪费在犹豫上!