RISC-V MCU中文社区

【分享】 花式点灯

发表于 GD32VF103 MCU 2021-04-06 23:57:30
1
2834
6

听完胡老师的课程之后,自己收获颇丰,便动手做一些小的有关点灯的基础实验和大家一起分享。

一、前言

在课程中,有一个例程就是专门讲使用SoC定时器生成PWM信号,从而控制板载RGB LED,我们首先来对这一个例程进行一个复盘。

1.详细操作步骤:因为在NucleiStudio中没有这个例程,所以我们按照如图所示先在NucleiStudio中创建一个HelloWorld例程,之后在进行替换。

在完成这一系列的步骤之后,我们成功创建了一个HelloWorld程序,但是我们需要点灯的程序我们在芯来提供的github地址下下载RV-STAR的demo工程,里面有如下东西。之后我们先把刚刚创建的HelloWorld程序中的代码删除,也就是在application下的main.c右键删除,接下来再右键application选择import,点击filesystem,在路径中选择rvstar文件夹中的running_led,勾选main.c完成即可。

至此我们就已经建立了一个跑板载LED的程序,通过编译后就可以在板子上运行了。


2.实验效果和代码分析:在编译通过后就可以在板子上运行了,最终效果是按下按键PA0-WKUP,板载LED就会在红绿蓝白灯中切换,同时串口也会有相应的输出。接下来我们对代码进行简单的分析。

首先写了四个关于红绿蓝白灯的函数:例如红灯就是控制LED3亮,LED1和LED2灭,同时在串口输出LED Red,白灯则是LED123均亮以此来产生白光的效果。其次写了一个test函数,主要是用于控制按键和灯的循环:按键每按一次,cnt数值就+1,并除4用余数去做switch选择。main函数则调用test和四个led函数以此来实现最终效果。



二、板载LED进阶实验

在复盘完上述实验后,我们自己来进行一些小的创新熟悉熟悉代码的运用。

1.改变颜色的顺序。这个只需要在main函数中switch循环中更改一下调用四个LED函数的顺序就可以实现,如下图我们就从最开始的蓝红绿白顺序变为绿蓝红白顺序。


2.加入延时,我们可以在主函数中或者LED函数中加入delay_1ms()以此延时,延时的时间就是()ms。

在main函数中加入如图延时,作用是在转换为绿灯后5s内将一直是绿灯,按按键将对其不起作用,只有在5s结束后按键才能起作用。

在LED函数中加入如图延时,作用则是绿蓝红白循环时在红色转白色时会有5s钟的延时,5s过后才会响应从红色转到白色。


3.按键控制不断循环闪烁。

a.代码如下,即改写一下test函数就行,实现按键按下就绿蓝红白顺序闪烁0.5s,之后停在白灯,再次按下将再次循环。

b.错误代码如图所示...即按下按键将会绿蓝红白每个灯顺序闪烁0.5s,如此不间断闪烁下去;按键再次按下后,将会一直停留在红灯状态;按键再一次按下后,将会再次按照绿蓝红白如此闪烁下去......周而复始。(这个实现起来遇到了困难,不能实现在闪烁时按键按下则变成红灯,原因应该是这种写法在程序delay时,按按键不会响应,只有在delay结束后的那一瞬间按才起作用。想要实现这个功能还需要用到中断,有时间再更新)



三、点亮外设LED

在做外设之前先在芯来官网提供的地址学习了一些相关知识,下图是地址。

下载完成之后,在examples文件夹中找到GPIO文件夹,里面就有running_led这个例程,我们把这个例程复制到NucleiStudio中,改掉头文件之后编译通过,之后再连接外设LED。注意连接时的一些问题:例如面包板和RVSTAR要共gnd,然后面包板的基本结构也要掌握,LED的长短脚正负极等等。下面就是我的代码图、连接示意图以及效果图(四个LED顺序闪烁,每个亮一秒)。



喜欢6
用户评论 (1)
promise

promise 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板