Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
【中科蓝讯】中科蓝讯AB32VG1开发板uart1功能评测
发布于 2021-03-30 10:13:07 浏览:992
订阅该版
很幸运成为中科蓝讯测评任务的挑战者,接触RT_Thread已经有很长一段时间了,在平时工作中经常接触到ucosII和Linux的教学与开发工作,所以对国产的RT_Thread很容易上手,尤其是通过这次对中科蓝讯开发板的测评,对国产处理器和国产OS的强势崛起感触颇深!接下来分享一下测评过程。 一、安装好RT-Thread Studio V2.1.0,打开SDK管理器,安装RT-Thread Source_Code latest、Bluetrum板级支持包和工具链RISC-V-GCC V10.1.0,接下来基于蓝讯开发板创建工程AB32VG1_USART。![6610f0a97ff205441195ecfcbb4c0b9f.png](https://oss-club.rt-thread.org/uploads/20210330/6610f0a97ff205441195ecfcbb4c0b9f.png) 编译工程,同时打开蓝讯的下载工具Downloader_v2.0.0,选择通过USB转串口连接开发板的端口号,选择开发模式,并且在开始按钮里把擦除和自动选择上,这样在RT-Thread Studio编译好工程后会自动下载程序到开发板,这个做的很好,赞一下! 下载程序后 ![27.png](https://oss-club.rt-thread.org/uploads/20210330/bf1b7d766df7ef195d80d2d543a9030f.png) 尝试着在添加一行程序 rt_kprintf("Hello, world\n"); rt_kprintf("Hello AB32VG1_USART\n"); 重新编译运行,![3.png](https://oss-club.rt-thread.org/uploads/20210330/bb6209edc1a8ad457b69c966c2d915d7.png) 说明软硬件环境没有问题了。 二、修改相关文件 ![4.png](https://oss-club.rt-thread.org/uploads/20210330/8ae76e691c48f4c56ebb1b503045fc7c.png) ![5.png](https://oss-club.rt-thread.org/uploads/20210330/65ded3a706985c9dbc17f0d58bdf48f1.png) 这个定义不是手动改的,而是通过env环境配置,要添加串口1的配置 可以编辑Kconfig文件,在env环境下使用menuconfig进入图形配置界面。如果不从env配置的方式添加串口 ,可以直接在board.h中直接添加,#define BSP_USING_UART1 以及相关的定义。 在main.c中,添加如下代码,这里使用了静态信号量,用于触发中断时释放信号量,同时定义了串口1的线程函数。 static rt_thread_t usart1_thread = RT_NULL; //串口1线程 static void usart1_thread_entry(void* parameter); static rt_err_t uart1_input(rt_device_t dev, rt_size_t size); static rt_device_t serialuart1; char str[] = "Hello AB32VG1_USART1!\r\n"; static struct rt_semaphore rx_sem1; 在main函数之前实现如下函数, static void usart1_thread_entry(void* parameter) { serialuart1 = rt_device_find("uart1"); rt_device_open(serialuart1 , RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX ); rt_device_set_rx_indicate(serialuart1 , uart1_input); rt_device_write(serialuart1 , 0, str, (sizeof(str) - 1)); char ch; while (1) { while (rt_device_read(serialuart1 , -1, &ch, 1) != 1) { rt_sem_take(&rx_sem1, RT_WAITING_FOREVER); } ch = ch+1; rt_device_write(serialuart1 , 0, &ch, 1); } } static rt_err_t uart1_input(rt_device_t dev, rt_size_t size) { rt_sem_release(&rx_sem1); return RT_EOK; } 在main函数中,创建线程: rt_sem_init(&rx_sem1, "rx_sem1", 0, RT_IPC_FLAG_FIFO); usart1_thread = rt_thread_create( "uart1", //创建串口任务 usart1_thread_entry, RT_NULL, 512, 5, 20); if (usart1_thread != RT_NULL) rt_thread_startup(usart1_thread); else return -1; 查看板子原理图,通过USB转TTL连接串口1和PC机,编译、自动下载后运行: ![7.png](https://oss-club.rt-thread.org/uploads/20210330/66ea30ebdb2af5b9d633512873f9953a.png) ![8.png](https://oss-club.rt-thread.org/uploads/20210330/f74ee05f8981c528eb43080c465dccb9.png) 运行后发现乱码,考虑到串口波特率问题,在drv_usart.c中第191行添加如下代码后现实正常。 if(i == UART1_INDEX) { uart_obj[i].serial.config.baud_rate = 115200; } 在串口调试助手里输入字符,字符+1后返回。串口1测试正常。 三、添加LED线程 串口1运行以后,发现LED不亮了,也是为了测试一下多线程,又写了一个LED线程。 //LED线程 static rt_thread_t led_thread = RT_NULL; static void led_thread_entry(void* parameter); static rt_device_t led; static void led_thread_entry(void* parameter) { uint32_t cnt = 0; uint8_t led0 = rt_pin_get("PE.1"); rt_pin_mode(led0, PIN_MODE_OUTPUT); while (1) { if (cnt % 2 == 0) { rt_pin_write(led0, PIN_LOW); } else { rt_pin_write(led0, PIN_HIGH); } cnt++; rt_thread_mdelay(500); } } 在main函数中,创建LED线程。 //创建led任务 led_thread = rt_thread_create( "led0", led_thread_entry, RT_NULL, 512, 6, 10); if(led_thread != RT_NULL) rt_thread_startup(led_thread); else return -1; 重新编译运行,LED快速的闪烁起来,串口1正常通信,多线程测试ok。 输入list_deivce和ps命令查看系统设备和线程情况,列出了线程名称、优先级、堆栈等信息。 ![9.png](https://oss-club.rt-thread.org/uploads/20210330/c0e7b3090a1d7c44c908a9a38392d1b1.png) 结束语 感谢RT-Thread小师弟温馨提醒!感谢前面测评者的辛勤付出!感谢中科蓝讯和RT-Thread!
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
永恒之约
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
riscv32-elf-xmaker 工具的目的
2
AB32VG1 的 RTC 内部怎么知道自己是第一次上电的呢?
3
AB32VG1 蓝牙功能
4
AB32VG1 片上 flash 的库能否发布出来
5
【中科蓝汛AB32VG1】开发板是否支持USB HOST
6
有基于RT-Thread 和 AB32VG1 的蓝牙示例吗?
7
AB32VG1_RTC时钟
8
AB32 串口2.是哪个管脚
9
AB32VG1开发板的三路LPWM使用
10
使用RT-thread新建AB32VG1工程编译时报错
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
RT-Thread
DMA
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
keil_MDK
编译报错
socket
MicroPython
GD32
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
本月问答贡献
xiaorui
7
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
三世执戟
31
个答案
1
次被采纳
梦笑真美
18
个答案
1
次被采纳
踩姑娘的小蘑菇
14
个答案
1
次被采纳
本月文章贡献
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
3
次点赞
2345vor
2
篇文章
1
次点赞
比特饼干
1
篇文章
6
次点赞
Vangaoven
1
篇文章
3
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部