Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
RT-Thread
开发板
中科蓝讯AB32VG1系列之UART
发布于 2021-03-22 22:17:00 浏览:912
订阅该版
[tocm] # 一、开发板硬件信息 ## 1.MCU信息 开发板采用中科蓝讯的32位RISC-V指令集的AB32VG1型号MCU,主频120M。MCU有8M的Flash,和192K SRAM,内存指定够用。和我接触的另外一款RISC-V架构的MCU一样都是宽电压供电,支持3.0V-5.0V供电。 与一般MCU不同的是,这款MCU具有MPU模块,就是电源管理模块,支持Charge电路、BUCK电路、LDO电路等等,手册第十页给出了MPU模块的详细参数。 ![QQ截图20210322201739.jpg](https://oss-club.rt-thread.org/uploads/20210322/98148bbd82510bc05b281f8e4da7217d.jpg) ## 2. 开发板特点 (1) 拿到开发板后最先看到就是一个Type-C和USB-A的母口,Type-C口肯定是用来调试和下载的,一般开发板都是采用micro usb或者Type-C接口来做,但是这个使用了USB-A,正好实验室有母对母的线,以后尝试使用使用。![USB.jpg](https://oss-club.rt-thread.org/uploads/20210322/85a543144605509f2674c41f585b5bc6.jpg) (2) 开发板两侧排母是兼容Arduino接口的,可以将一些Arduino uno开发板的代码移植到这个开发板上来。但是这里需要注意下,Vin只支持最大5V输入,如果使用5V以上电源时必须要将Arduino 的VIN引脚断开。 (3) 开发板上有蓝牙天线,手册里也看到了支持蓝牙5.0协议,但是这次用户手册和硬件原理图中并没有给出蓝牙模块的资料,我评测的是串口模块,所以下次等有资料后再来做串口蓝牙来使用。 (4) 其余外设,开发板有三个微动开关,一个用作复位按键,其余两个供用户使用。有按键那必然就要点灯啦,有一个RGB灯使用三个IO口做控制。 ## 3. 串口硬件信息 开发板有三个全双工的UART模块,Uart0有六组IO口的映射,Uart1和Uart2各有两组IO口。但是Uart0是开发板的调试串口,Type-C和USB-A都挂载在Uart0上所以用户使用Uart1和Uart2就可以了。 手册里没有找到Uart配置相关的详细信息,而且是借助我们RTT作为开发平台,肯定进行了封装无需用户调用。 # 二、开发Uart1评测 ## 1.Uart1查看 因为Uart0已经被用来作为调试了,所以留给用户来使用UART1,查找手册后Uart1的RX1引脚为(PA6-G1,PA3-G2)TX1引脚为(PA7-G1,PA4-G2)。 ## 2.新建RTT工程 ![QQ截图20210322204033.jpg](https://oss-club.rt-thread.org/uploads/20210322/7e680161890f9ac77f0fe02b0d354298.jpg) 新建完Demo,Download开发板,RTT有串口输出,使用list_device命令查看已初始化的驱动,发现Uart1已经被初始化,所以进入RTT的库查看初始程序。 ![QQ截图20210322204159.jpg](https://oss-club.rt-thread.org/uploads/20210322/4c4f989b7cfc34401a0a5bc2d6bfc990.jpg) void hal_uart_mspinit(struct uart_handle *huart) { struct gpio_init gpio_init; if (huart->instance == UART0_BASE) { gpio_init.pin = GPIO_PIN_7; gpio_init.pull = GPIO_PULLUP; gpio_init.dir = GPIO_DIR_INPUT; gpio_init.de = GPIO_DIGITAL; gpio_init.alternate = GPIO_AF_MAP_Gx(UT0TXMAP_AF, GPIO_AF_G1) | UT0RXMAP_TX; gpio_init.af_con = GPIO_AFEN | GPIO_AFCON0 | UT0TXMAP_AF; hal_gpio_init(GPIOA_BASE, &gpio_init); } else if (huart->instance == UART1_BASE) { gpio_init.pin = GPIO_PIN_4; gpio_init.dir = GPIO_DIR_OUTPUT; gpio_init.de = GPIO_DIGITAL; gpio_init.alternate = GPIO_AF_MAP_Gx(UT1TXMAP_AF, GPIO_AF_G2); gpio_init.af_con = GPIO_AFEN | GPIO_AFCON0 | UT1TXMAP_AF; hal_gpio_init(GPIOA_BASE, &gpio_init); gpio_init.pin = GPIO_PIN_3; gpio_init.pull = GPIO_PULLUP; gpio_init.dir = GPIO_DIR_INPUT; gpio_init.de = GPIO_DIGITAL; gpio_init.alternate = GPIO_AF_MAP_Gx(UT1RXMAP_AF, GPIO_AF_G2); gpio_init.af_con = GPIO_AFEN | GPIO_AFCON0 | UT1RXMAP_AF; hal_gpio_init(GPIOA_BASE, &gpio_init); /* Interrupt */ } } 这段代码里可以看到开发板在初始化时将Uart1初始化为A4-TX,A3-RX。所以我们将使用这两个IO口挂载串口外设。 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 < obj_num; i++) { /* init UART object */ uart_obj[i].config = &uart_config[i]; uart_obj[i].serial.ops = &ab32_uart_ops; uart_obj[i].serial.config = config; uart_obj[i].serial.config.baud_rate = 1500000; /* register UART device */ result = rt_hw_serial_register(&uart_obj[i].serial, uart_obj[i].config->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; } ![QQ截图20210322210209.jpg](https://oss-club.rt-thread.org/uploads/20210322/e687957dc4ea800dcbd8320160475802.jpg) 新建task.c如下: /*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如下 #ifndef _TASK_H_ #define _TASK_H_ #include
#include "rtconfig.h" #include
#include "drv_common.h" int thread_serial(void); #endif 编译下载,进入命令行开启线程thread_serial。 # 三、演示效果 ## 1.串口调试助手 使用USB转TLL工具连接开发板的RX与TX引脚(开发板的丝印RX和TX即为Uart1,Uart0没有引出,便于调试。)打开命令行开启线程后,串口助手即可输出串口结果。 ![QQ截图20210322221518.jpg](https://oss-club.rt-thread.org/uploads/20210322/b0163acec15965b647f96e9f330685a5.jpg) ![QQ截图20210322221511.jpg](https://oss-club.rt-thread.org/uploads/20210322/d2040cb939a9c45219f06cb8dabca85c.jpg) ## 2.TTL语音合成外设。 TTL语音合成设备自带喇叭,支持5V和3.3V单片机,串口直接控制串口输出什么该产品就报什么语音。比如printf(大家好)﹔产品喇叭就播报“大家好”,支持数字,字母,中文的播报。通信波特率固定为9600,8,n, TTL的视频我就上传到B站啦,把链接会放在下面。 [视频链接在此](https://www.bilibili.com/video/BV1hK4y1T7Hb) 代码参考了BruceOu大佬的文章,在此感谢论坛的各位大佬。 # 三、体验心得 开发板兼容Arduino接口,所以以后可以尝试将Arduino做的产品移植到这个开发板来使用,最重要的是蓝牙模块呦,期待资料更新。 整个开发在RTT的软件包的加持下非常轻松,因为底层已经开发好所以用户无需关注RISC-V指令集与ARM指令集的异同,还是按照之前的开发方式进行开发,这样极大的简化了指令集更新带来的难度。 在ARM几乎垄断的境地下,国内众多原厂不断向开源的RISC-V指令集靠拢,希望未来借助RISC-V指令集诞生出一个像STM一样有影响力的国产MCU品牌。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
乐乐爱学习
这家伙很懒,什么也没写!
文章
8
回答
3
被采纳
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
机器人操作系统 (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
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
PWM
潘多拉开发板_Pandora
定时器
BSP
ADC
中断
flashDB
编译报错
socket
keil_MDK
GD32
msh
Debug
SFUD
MicroPython
ulog
SDIO总线
rt_mq_消息队列_msg_queue
本月问答贡献
小小李sunny
4
个答案
3
次被采纳
a1012112796
3
个答案
2
次被采纳
聚散无由
1
个答案
2
次被采纳
用户名由3_15位
4
个答案
1
次被采纳
踩姑娘的小蘑菇
3
个答案
1
次被采纳
本月文章贡献
聚散无由
1
篇文章
4
次点赞
zhuzhuzhu
1
篇文章
4
次点赞
踩姑娘的小蘑菇
1
篇文章
2
次点赞
Hlafklio
1
篇文章
2
次点赞
YDPB_5935
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部