如何通过RT-Thread Studio配置片上外设UART

通过 rt-thread studio 配置 ab32vg1 片上外设 uart 的功能,实现开发板和 pc 进行
通信。
1.2. 模块介绍
ab32vg1 的串口 0 被用作系统调试串口,串口 1 可以用作通讯端口。rt-thread 里做好了
uart0 和 uart1 的驱动,只要打开相应的设备即可。
开发板上串口部分的电路图如下图所示:
从电路图上看,串口 1 使用的是 pa3 和 pa4。
新建工程
2.1.1.文件->新键->rt-thread 项目。
2.1.2.选择基于开发板,填写工程名字。
2.1.3.开发板:ab32vg1-ab-prougen。
2.1.4.bsp:1.0.8。
2.1.3.其他默认,点完成。一个新的项目就建成了。
2.2. 编写测试程序
在 applications 新键 task.c 文件。此例程源自 rt-thread 文档中心,引用时有修改。
/** 程序清单:这是一个 串口 设备使用例程* 例程导出了 uart_sample 命令到控制终端* 命令调用格式:uart_sample uart1* 命令解释:命令第二个参数是要使用的串口设备名称,为空则使用默认的串口设备* 程序功能:通过串口输出字符串hello rt-thread!,然后错位输出输入的字符*/#include #define sample_uart_name uart1/* 用于接收消息的信号量 */static struct rt_semaphore rx_sem;static rt_device_t serial;/* 接收数据回调函数 */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(serial, -1, &ch, 1) != 1) { /* 阻塞等待接收信号量,等到信号量后再次读取数据 */ rt_sem_take(&rx_sem, rt_waiting_forever); } /* 读取到的数据通过串口错位输出 */ ch = ch + 1; rt_device_write(serial, 0, &ch, 1); } }static int uart_sample(int argc, char *argv[]){ rt_err_t ret = rt_eok; char uart_name[rt_name_max]; char str[] = hello rt-thread!\r\n; if (argc == 2) { rt_strncpy(uart_name, argv[1], rt_name_max); } else { rt_strncpy(uart_name, sample_uart_name, rt_name_max); } /* 查找系统中的串口设备 */ serial = rt_device_find(uart_name); if (!serial) { rt_kprintf(find %s failed!\n, uart_name); return rt_error; } /* 初始化信号量 */ rt_sem_init(&rx_sem, rx_sem, 0, rt_ipc_flag_fifo); /* 以中断接收及轮询发送模式打开串口设备 */ rt_device_open(serial, rt_device_flag_int_rx); /* 设置接收回调函数 */ rt_device_set_rx_indicate(serial, uart_input); /* 发送字符串 */ rt_device_write(serial, 0, str, (sizeof(str) - 1)); /* 创建 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);由于在初始化串口时,默认波特率是 1500000,可以在 libraries->hal_drivers->drv_usart.c中 int rt_hw_usart_init(void)做些修改。int rt_hw_usart_init(void){ rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct ab32_uart); struct serial_configure config = rt_serial_config_default; rt_err_t result = 0; rt_hw_interrupt_install(irq_uart0_2_vector, uart_isr, rt_null, ut_isr); for (int i = 0; i name, rt_device_flag_rdwr | rt_device_flag_int_rx | rt_device_flag_int_tx | uart_obj[i].uart_dma_flag , null); rt_assert(result == rt_eok); } return result;}
电线束百科知识
华为mate10强悍配置国产无机可敌,与iPhone8争辉!
一加5已正式发布,一加5和荣耀9哪个好?一加5和华为荣耀9对比评测!
智能语音翻译机实现了智能语音语言技术的突破
矢量控制与V/F控制详解
如何通过RT-Thread Studio配置片上外设UART
mdobus ASCII协议转换网关支持CAN OPEN JAE1939
以C8051F单片机为控制核心的气流仪设计
百度在云智峰会发布ARM私有云重磅新品
ThinkPad S2 2021锐龙版轻松实现双屏/会议投影拓展
python循环创建变量并赋值
MP2731光伏充电解决方案
现代微控制器系统的能耗
BLE蓝牙模块功能应用②——定位功能
《2023世界新能源汽车大会共识》发布
开关电源之电压的影响因素和指标
人脸识别技术是生物识别技术的一种 主要通过信息的相似度识别身份
柔性印刷线路板缺陷检测方法指南
抗击疫情,物流仓储人该怎么做?
背投电视的安装方法_背投电视的保养维护