当前位置: 首页 > news >正文

【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32

🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏

🪔本系列专栏 -  蓝桥杯嵌入式_勾栏听曲_0的博客

🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️

📌个人主页 - 勾栏听曲_0的博客📝

🔑希望本文能对你有所帮助,如有不足请指正,共同进步吧🏆

🎇大鹏一日同风起,扶摇直上九万里。假令风歇时下来,犹能簸却沧溟水。📈


目录

看原理图

 设置STM32CubeMX

配置文件

 初始化LED函数

实例运用


看原理图

可以看到控制LED灯的是PC8~PC15,由于图中最左边是VDD,也就是高电平控制的,所以当PC8~PC15为高电平的时候,LED亮,为低电平的时候,LED灭。同理PD2低电平关,高电平开。

设置STM32CubeMX

打开我们已经建立好的工程(如何初始化STM32工程)中的STM32CubeMX

将PC8~PC15和PD2引脚设置为输出模式

 然后点击红框中的System Core中的GPIO,在弹出来的中间界面中选中PC8~PC15,根据原理图的分析,我们将这些引脚置为高电平(high)。

同理,将PD2置为低电平(low)

 然后右上角点击生成代码(GENERATE CODE)即可

配置文件

首先打开Keil5,新建两个文件,命名为led.c和led.h,并加入到我们的bsp文件中去。

然后再左侧工程文件右击,添加一个组(Add Group...)

创建成功后,双击红框中的bsp,找到你的bsp文件路径下的lcd.c,并添加进去

 接下来我们要将我们写得bsp模块代码路径添加到默认路径中去

点击魔法棒,点击C/C++,根据图中数字引导,在第五步时将bsp的路劲添加进去即可(记得点OK 哦)

初始化LED函数

初始化一个函数前,我们首先要明白要将这个设备初始化成上面样子的,如LED灯,我们一般希望LED灯初始化后,是全部熄灭的,从这个角度来些代码

另外我们有时还希望初始化能集成一些其他功能,如LED的初始化,我们可以使它拥有点亮灯的功能,于是有如下代码(特别要理解第一句与第二句代码的关系哦)

/*
LED_Disp:全灭LED灯,然后点亮一个LED灯@dsLED:要点亮的LED灯,如dsLED==0x01,点亮LED1
*/
void LED_Disp(uchar dsLED)
{HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);		//将GPIOC的所有引脚置为高电平,也就是LED初始化熄灭HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);			//因为控制LED灯是在8~15位,上面一句代码是默认前八位置0,所以我们左移8位,就能将GPIOC的8~15置为0了HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);			//初始化锁存器HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

 这样,我们的初始化函数就写成啦,其中的参数设置为“0x01”,就是LED灯全熄灭了。

实例运用

现在我们来简单的写一个流水灯吧

如果理解了初始化代码中的第一句与第二句,我们就可以利用位运算来用更简单的代码实现流水灯了,以下是从左至右依次亮0.5秒,然后熄灭0.5秒:

/*
LED_liushui:实现LED灯流水
*/
void LED_liushui(void)
{int i = 1;while(1){LED_Disp(i);HAL_Delay(500);LED_Disp(0x00);HAL_Delay(500);if(i == 128)i = 1;elsei = i<<1;}
}

http://www.lryc.cn/news/24624.html

相关文章:

  • RK3288-android8-es7210-阵列麦克风
  • 硬件工程师常见问题与答疑
  • 【Java】Java进阶学习笔记(一)—— 面向对象(封装)
  • jsp拆迁管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • CCNP350-401学习笔记(易错题合集)
  • 喀秋莎Camtasia2023最新版本电脑录屏剪辑软件
  • 「考研算法」
  • Android Framework-操作系统基础
  • 美国最新调查显示 50% 企业已在用 ChatGPT,其中 48% 已让其代替员工,你怎么看?
  • [Java·算法·中等]LeetCode17. 电话号码的字母组合
  • C#7/C#8/C#9 与dotnetSDK 以及dotnet framework对应关系
  • jvm调优经验总结
  • 等保合规知识常见问题解答
  • 分享5款Windows同类软件中的翘楚
  • 记--springboot-工具类中使用@Component、@Resource与@Value失效
  • 手写一个react,看透react运行机制
  • JS判断输入值是否为正整数,判断变量是否为数字
  • Android开发八股文,Android也有自己的八股文了
  • 你需要同款“Unreal项目自动化编译、打包和部署”方案吗?
  • 电子技术——CMOS-AB类输出阶
  • 2023王道考研数据结构笔记第二章线性表
  • [chapter 11][NR Physical Layer][Layer Mapping]
  • 什么是工业物联网(IIoT)?
  • 「TCG 规范解读」PC 平台相关规范(4)
  • CSS背景属性之颜色渐变
  • IPv4地址细讲
  • sql语句中exists用法详解
  • 思迅软件端口不通导致软件和软锁报错的问题
  • Docker之路(7.DockerFile文件编写、DockerFile 指令解释、CMD与ENTRYPOINT的区别)
  • [软件测试]如何使用Eclipse导入项目并打开