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的亮灭了。
完结

相关推荐
传感器与混合集成电路4 小时前
210℃与175℃高温存储器选型研究:LHM256MB与LDMF4GA-H架构与可靠性对比(上)
嵌入式硬件·能源
时光找茬4 小时前
【瑞萨AI挑战赛-FPB-RA6E2】+ 从零开始:FPB-RA6E2 开箱测评与 e2 studio 环境配置
c++·单片机·边缘计算
17(无规则自律)5 小时前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
@good_good_study5 小时前
FreeRTOS内存管理
单片机
Hello_Embed6 小时前
libmodbus 移植 STM32(基础篇)
笔记·stm32·单片机·学习·modbus
qq_397562317 小时前
QT工程 , 生成别的电脑运行的exe程序
嵌入式硬件·qt
qqssss121dfd9 小时前
STM32H750XBH6的ETH模块移植LWIP
网络·stm32·嵌入式硬件
想放学的刺客10 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
天昊吖10 小时前
stc8H启用DMA发送后 卡住【踩坑日志】
单片机
李永奉11 小时前
杰理芯片SDK开发-ENC双麦降噪配置/调试教程
人工智能·单片机·嵌入式硬件·物联网·语音识别