本帖最后由 eefocus_3995051 于 2025-2-20 23:37 编辑  
 
大家好,俺又来了,经过昨天简单的研究、查阅东拼西凑的资料,对sdk中的一些库函数已经有了简单的了解,今天楼楼又来点灯啦,没错,楼楼我发誓要做最厉害的嵌入式点大师!本次楼楼分享使用按键中断和pwm的方式来点亮板载的led灯,使用pwm的方式来实现呼吸灯的效果,话不多说,直接开始!(实在不想吐槽了,刚刚精心写了两个多小时的帖子说吞被吞了,我现在很开心) 
 
最终效果展示: 
 
 
 
 
 
 
 在之前的实验中,我们通过循环读取按键电平的方式点亮了一颗LED,这种方法虽然简单直接,但需要不断地读取GPIO引脚的电平状态,这无疑会占用芯片资源,为了更高效地实现相同的功能,我们可以采用中断的方式来点亮LED。 
参考资料:在线文档
 
 
老规矩我们还是使用之前的gpio工程进行修改,因为这个工程代码里面有使用到了中断,我们可以参照他的示例照猫画虎就可以实现我们想要中断功能,这也是最简单粗暴的方法,楼楼在代码中也添加了一些注释 
我们可以在中断函数中进行我们的操作,在进入中断后停留的时间越短越好,我们这里使用电平翻转函数对led1所在的引脚进行电平切换,当按键按下中断触发之后就可以实现灯珠在亮灭之间来回切换的效果。 
 
 
我们把程序下到板子上之后通过按下按键就可以点灯啦,跟之前读取gpio的效果一样,只不过是通过按键中断的方式实现。 
 
 
看资料这个板子应该是有6路pwm,我们直接使用pwm的demo进行本次实验,楼楼参考demo研究了一会,代码不多,其中最关键的函数就是pwm_set_tcmp(),有两个参数,在文档中有对该函数的描述,我们可以使用这个函数来调整占空比,通过动态的调整占空比来实现灯珠呼吸的效果。 
在使用BDT烧录工具烧录固件的时候,可以通过点击reopen选项来选择最近烧录过的固件路径,这样就省得每次都要打开选择固件这种麻烦的操作了,是不是挺方便! 
 
将固件烧录到板子后就可以看到绿色灯珠在不停的闪烁了。 
我们可以通过修改之前的代码,多复制几段代码出来,然后定义不同的pwm通道、引脚,通过控制对应的通道就可以实现多颗灯珠轮流呼吸,一起呼,跳着呼,想怎么呼就怎么呼,pwm功能的定义可以在gpio.h头文件中找到。 
将代码编译后烧录到芯片中,就可以实现上面一样的循环呼吸闪烁效果啦,是不是很简单! 
好啦,以上就是楼楼本次的分享,我们通过点灯的方式学习了中断和pwm的使用,这样我们就可以举一反三,通过pwm来控制无缘蜂鸣器进行播放midi音乐,控制电机等等应用... 
 |