今天开始学习rgb交替闪烁。
这是一个最基本的io口控制例程。看到ab32vg1编写的内容,感觉有些地方不懂,后面再说。现在先记录整个学习过程。
1.查看硬件电路结构
led接口电路led接口电路2
这里采用了header4×2来转接一下。便于胸口复用。
2.软件设计与编写
可以看到led是低电平使能,在相应的io口轮次输出0,使得led点亮。
获得led
设置pin模式,
轮次输出相应电平,点亮或熄灭相应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.1);
// 设置引脚为输出方式
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);
rt_kprintf(rgb init success\n);
}
//传入参数 on=1:对应亮,on=0:对应灭
//红灯驱动
void rgb_red(rt_bool_t on)
{
rt_pin_write(led.led_g, pin_high);
rt_pin_write(led.led_b, pin_high);
if (on) {
rt_pin_write(led.led_r, pin_low);
} else {
rt_pin_write(led.led_r, pin_high);
}
}
//蓝灯驱动
void rgb_blue(rt_bool_t on){
rt_pin_write(led.led_g, pin_high);
rt_pin_write(led.led_r, pin_high);
if (on) {
rt_pin_write(led.led_b, pin_low);
} else {
rt_pin_write(led.led_b, pin_high);
}
}
//绿灯驱动
void rgb_green(rt_bool_t on)
{
rt_pin_write(led.led_r, pin_high);
rt_pin_write(led.led_b, pin_high);
if (on) {
rt_pin_write(led.led_g, pin_low);
} else {
rt_pin_write(led.led_g, pin_high);
}
}
下面要做的是使得led能够循环工作。
void rgb_switch(void)
{
static uint8_t led_num = 0;
if(led_num == 0)
rgb_red(1);
else if(led_num == 1)
rgb_blue(1);
else if(led_num == 2)
rgb_green(1);
led_num++;
if(led_num == 3)
led_num = 0;
}
操作系统入口函数
void rgb_thread_entry(void* p)
{
rgb_init();
while(1)
{
rt_thread_mdelay(500);
rgb_switch();
}
}
//这个函数不太明白是做什么的,应该是线程控制函数,不知道哪里有相应的教程可以看到
static int thread_rgb(void)
{
rgb_thread = rt_thread_create(rgb, rgb_thread_entry, rt_null, 512, 10, 10);
if(rgb_thread == rt_null)
{
rt_kprintf(thread_grb init error);
return rt_error;
}
rt_thread_startup(rgb_thread);
}
然后看到该同学还设置了key.h函数。
//rgb.h
/*
* copyright (c) 2006-2021, rt-thread development team
*
* spdx-license-identifier: apache-2.0
*
* change logs:
* date author notes
* 2021-11-06 administrator the first version
*/
#ifndef applications_rgb_h_
#define applications_rgb_h_
#endif /* applications_rgb_h_ */
不太明白为什么要做这个,是为了以后扩展用?
修改主函数main.c
/*
* copyright (c) 2020-2021, bluetrum development team
*
* spdx-license-identifier: apache-2.0
*
* change logs:
* date author notes
* 2020/12/10 greedyhao the first version
*/
/**
* notice!
* all functions or data that are called during an interrupt need to be in ram.
* you can do it the way exception_isr() does.
*/
#include
#include board.h
int main(void)
{
rt_kprintf(hello, world\n);
while (1)
{
rt_thread_mdelay(500);
rt_thread_mdelay(500);
}
}
该同学把原来的按键控制删掉后,给了两个mdelay();不明白为什么要这样写。
3.执行downloader
实现功能。
看完了这个学习,感觉疑惑还是很多,
有关于系统本身的,也有关于这位同学的编写代码内容的。可是独学而无友,则孤陋而寡闻。
多向各位大佬学习。
争取能够看明白。
还有这个编辑界面不知道为什么无法直接在word中直接粘贴复制。
难道是需要排版才行?
ymf
整型的signed和unsigned详解 double的二进制位显示
铁芯知识连连看
e络盟供应来自MATRIX Labs的 MATRIX Voice开发平台
中国Chiplet的机遇与挑战及芯片接口IP市场展望
百万像素以上车规级ISP芯片!富瀚微发布中国首款汽车前装芯片 已在比亚迪唐二代上量产
跟AB32VG1开发学习RGB交替闪烁
2020年国内快递自动分拣系统有多成熟?
电瓶修复技术——根据技术经验判断电池故障
电容电介质故障的处理办法
华为云大数据赋能北港集团发展创新,数字化转型成效显著!
科技创新再获肯定,力合微荣膺深圳市科技进步奖
诺思发布基于FBAR工艺的两款中高频LTE频段双工器
OC5021B ——开关降压型 LED 恒流驱动器
WebXR API可能是混合现实的巨大机遇,WebVR升级再次升级
高频车载AC220V逆变器能有什么国产优质IGBT使用
科沃斯服务机器人获ISO/IEC 27701:2019隐私信息管理体系认证
开年就是狠活儿 TCL新电视带来全新技术升级
怎样用Android手机制作多功能智能机器人
电蜂优选厂家怎样检测LVDS连接器的质量?
黑莓Z10拆解:高通CPU加三星闪存能否搭救智能机之父