完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. 前言说明
1.1 本章内容 本章通过RT-Thread Studio配置AB32VG1片上外设GPIO的引脚,控制RGB彩灯进行简单的颜色变换 1.2 模块介绍 开发板上板载一个三色RGB彩灯 RGB彩灯原理图如下 开发板引脚连接如下图,引脚PA2对应蓝灯,引脚PE1对应红灯,引脚PE4对应绿灯,RGB为共阳极,当引脚拉低时,对应的led点亮 1.3 开发软件 编译平台:RT-Thread Studio: 安装链接 下载平台:Downloader: 安装链接 2. 步骤说明 2.1 新建工程 点击 文件-> 新建-> RT-Thread项目控件 选择基于开发板的项目,填写工程名字,选择我们使用到的开发板(AB32VG1),调试器我们随便选,下载方式不是通过此处下载 注意:如果第一次使用RISC-V芯片需要安装工具链,在SDK管理器中下载工具链 然右击项目名称,进入属性 找到MCU->RISC-V ToolchainsPat ,配置Tool的环境,在软件安装位置下面的路径中 软件安装位置RT-ThreadStudiorepoExtractToolChain_Support_PackagesRISC-VRISC-V-GCC10.1.0bin 工程新建后左边的项目资源管理器会显示我们的工程,我们把他展开,编译一下,编译结果如下 编译无报错,新建工程完成了! 2.2 编写RGB驱动程序文件 新建程序文件:在applications文件夹下新建立一个rgb.c和.h文件,建立后如下 rgb.c内写入如下程序 添加头文件,定义一个RGB结构体,并声明LED #include "rgb.h" #include #include "board.h" struct Led_s { uint8_t LED_R; uint8_t LED_B; uint8_t LED_G; }; // 定义一个RGB结构体 struct Led_s Led; 编写初始化驱动程序,调用rt_pin_get获取led句柄,通过句柄设置对应引脚模式为输出模式 void RGB_Init(void) { // 获得led Led.LED_R = rt_pin_get("PE.1"); Led.LED_G = rt_pin_get("PE.4"); Led.LED_B = rt_pin_get("PA.2"); // 设置引脚为输出方式 rt_pin_mode(Led.LED_R, PIN_MODE_OUTPUT); rt_pin_mode(Led.LED_G, PIN_MODE_OUTPUT); rt_pin_mode(Led.LED_B, PIN_MODE_OUTPUT); } 编写rgb不同颜色点灯驱动,通过rt_pin_write来控制gpio口电平高低,点亮红灯即拉低红灯引脚,拉高其他两个颜色灯的引脚 //传入参数 on=1:对应亮,on=0:对应灭 //红灯驱动 void RGB_Red(rt_bool_t on) { if (on) { rt_pin_write(Led.LED_R, PIN_LOW); }else { rt_pin_write(Led.LED_R, PIN_HIGH); } rt_pin_write(Led.LED_G, PIN_HIGH); rt_pin_write(Led.LED_B, PIN_HIGH); } //蓝灯驱动 void RGB_Blue(rt_bool_t on){ if (on) { rt_pin_write(Led.LED_B, PIN_LOW); }else { rt_pin_write(Led.LED_B, PIN_HIGH); } rt_pin_write(Led.LED_G, PIN_HIGH); rt_pin_write(Led.LED_R, PIN_HIGH); } //绿灯驱动 void RGB_Green(rt_bool_t on) { if (on) { rt_pin_write(Led.LED_G, PIN_LOW); }else { rt_pin_write(Led.LED_G, PIN_HIGH); } rt_pin_write(Led.LED_R, PIN_HIGH); rt_pin_write(Led.LED_B, PIN_HIGH); } 2.3 编写主程序文件 编写rgb彩灯运行线程,三种颜色依次切换,中间延时1s static void rgb_thread_entry(void* p) { RGB_Init(); while(1) { rt_thread_mdelay(1000); RGB_Blue(1); rt_thread_mdelay(1000); RGB_Green(1); rt_thread_mdelay(1000); RGB_Red(1); } } 创建线程启动函数,用于启动上一步编写的线程主体 static int Thread_RGB(void) { rt_thread_t thread = RT_NULL; thread = rt_thread_create("rgb", rgb_thread_entry, RT_NULL, 512, 10, 10); if(thread == RT_NULL) { rt_kprintf("Thread_GRB Init ERROR"); return RT_ERROR; } rt_thread_startup(thread); } 添加将线程初始化添加入系统初始化中 INIT_APP_EXPORT(Thread_RGB); 1 3. 代码验证 编译程序,可以看到无报错 编译完成,打开Downloaded下载器,通过download下载生成的.dcf文件(第一次使用前需要先安装串口驱动) 扫描串口,点击开始后,按一下板子上复位按键下载程序 程序现象 4. 章节总结 本章节我们学会了如何在RT-Thread上配置GPIO口,总的来说GPIO的使用步骤很简单,第一步获取对应GPIO句柄,第二步配置GPIO模式,之后就可以调用rtt函数对GPIO进行读写操作了! |
|
|
|
只有小组成员才能发言,加入小组>>
3308 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:18 , Processed in 1.256484 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号