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

STM32小实验1--点亮LED

1.实验目的

点亮LED

2.硬件清单

  • STM32
  • ST-Link

3.代码

我们在写一些模块的代码时最好是写在一个属于自己的.c文件中,这样就可以在多个.c文件中调用它。
所以在准备好的STM32工程模版中的Drivers/BSP新建一个名为led的文件夹,在文件夹里新建led.c和led.h,然后点击“品”将led.c导入,再点击魔法棒将led文件夹的路径导入。
这样前期准备工作就OK了

3.1led.c

在这里插入图片描述
第一行代码是将自己的头文件写进去,因为我们有可能会在led.c里的代码中调用自己写的函数,就比如在第16行写关闭led的代码时就调用了下面我们自己写的关闭led的函数,当然关闭led的代码我们可以直接将26行代码写在16行也可以。
第二行代码是关于时钟的头文件,这个文件中包含了配置时钟的函数,和stm32f1xx.h的头文件,这个头文件是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义,比如说GPIOB这个名字就是在stm32f1xx.h中进行宏定义的。
第四行到第十七行代码就是初始化GPIO的函数。
第六行这个代码是定义了一个名字为gpio_initstruct的结构体变量,因为在第十四行调用了初始化GPIO的函数,这个函数需要传入的第二个变量就是一个结构体,所以就定义了一个结构体变量将结构体里面的成员都赋了相应的值。
第八行代码是打开时钟调用的代码,为什么要打开时钟呢?因为这行代码专门用于使能GPIOB端口的时钟,没有这行GPIOB的所有寄存器都无法正常工作。
没有时钟信号,GPIOB的所有寄存器都无法正常工作
第十行代码就是给结构体中成员Pin赋值,它的作用是选择这一组引脚的哪一个,代码中是选择了第8个引脚
第十一行代码就是给结构体成员Mode赋值,它的作用是选择GPIO引脚的工作模式,一共是八种工作模式,如下图
在这里插入图片描述
第一个是输入模式,第二个是推挽输出,第三个是开漏输出,第四个是复用推挽输出,第五个是复用开漏输出,第六个和第一个一样,第七个是模拟输入,其中第一个输入还可以通过结构体成员变为输入浮空,输入上拉,输入下拉。
第十二行代码就是给结构体成员Pull赋值,它的作用是选择上拉,下拉,浮空三种模式的。
第十三行
代码就是给结构体成员Speed赋值,它的作用是选择GPIO的速度,有低速,中速,高速三种。
第十四行代码就是初始化GPIO时要调用的库函数,第一个返回值是选择GPIO是哪一组,第二个返回值是刚才说的结构体。因为这个函数是官方提供的库函数,在创建工程时就将官方的库函数的路径添加进去了,所以调用库函数时就不需要和库函数相关的.h文件
第十六行代码就是调用下面写的关闭LED的函数。
第二十一行代码就是点亮LED需要调用的库函数。
第二十六行代码就是熄灭LED需要调用的库函数。
第三十一行代码就是翻转LED需要调用的库函数。

3.2led.h

在这里插入图片描述
这里面的代码就是将led.c中的函数写入,方便在使用是调用函数。

3.3main.c

在这里插入图片描述
前三行代码就是将用到的头文件包含进去
第六行代码是初始化HAL库,为什么要初始化HAL库呢?因为HAL_Init() 是使用HAL库时必须调用的初始化函数,它的主要作用是初始化HAL库运行所需的基础环境,如果不初始化HAL_Delay() 无法正常工作(因为SysTick未配置),部分HAL函数可能返回错误(如HAL_ERROR)。
第七行代码是设置时钟,为什么要设置时钟呢?因为所有CPU指令执行、外设(GPIO/UART/SPI等)的工作都需要时钟信号驱动,没有正确配置时钟,芯片可能无法运行,或外设行为异常。如果不设置时钟,程序运行极慢(如延迟函数实际时间远大于预期),串口通信波特率错误,数据乱码,PWM输出频率偏差。
第八行代码就是刚才写的初始化GPIO的函数。
下面就可以控制LED的亮灭了。
完结

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

相关文章:

  • 【HarmonyOS】元服务概念详解
  • 学习日志09 python
  • 若依(RuoYi)框架项目结构全解析
  • 注解@Autowired和@Resource的区别
  • USB读写自动化压力测试
  • 【React Native】ScrollView 和 FlatList 组件
  • C++中STL六大组件List的简单介绍
  • UI前端大数据处理新挑战:如何高效处理实时数据流?
  • AI创作系列第18篇:海狸IM移动端UI统一大升级 - 从混乱到规范的技术重构之路
  • 华为MateBook D 16 SE版 2024款 12代酷睿版i5集显(MCLF-XX,MCLF-16)原厂OEM预装Win11系统
  • 浏览器自动化领域的MCP
  • Spring Boot + Thymeleaf + RESTful API 前后端整合完整示例
  • 单片机(STM32-串口通信)
  • 延迟双删
  • 【ASP.NET Core】内存缓存(MemoryCache)原理、应用及常见问题解析
  • 位置编码类型彩色图解
  • 张艺兴探班RED女团一周年舞台,见证21岁的梦想落地生根
  • 代码随想录算法训练营第二十天
  • 一文读懂现代卷积神经网络—稠密连接网络(DenseNet)
  • Journal of Engineering Mechanics and Machinery,工程力学期刊,1-2天录用,7天出版,即将送检!
  • 自定义类型 - 联合体与枚举(百度笔试题算法优化)
  • 前端将传回的List数据组织成树形数据并展示
  • 用于监测线性基础设施的分布式声学传感:现状与趋势
  • 深度剖析:动态接口代理核心原理与高级应用
  • APP测试之Monkey压力测试
  • Relocations in generic ELF (EM: 40)
  • Qt小组件 - 2(布局)瀑布流布局,GridLayout,FlowLayout
  • 虚拟列表组件如果滑动速度过快导致渲染性能问题
  • UART寄存器介绍
  • 前端学习5:Float学习(仅简单了解,引出flex)