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

相关推荐
一川月白7097 小时前
51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)
嵌入式硬件·51单片机·串口通信·异步通信·串行通信·同步通信·并行通信
逼子格8 小时前
【Proteus仿真】定时器控制系列仿真——秒表计数/数码管显示时间
数据库·单片机·嵌入式硬件·51单片机·proteus·定时器·硬件工程师
2401_888423099 小时前
51单片机-按键、蜂鸣器、定时器模块及中断
单片机·嵌入式硬件·51单片机
东亚_劲夫10 小时前
STM32—SPI协议
stm32·单片机·嵌入式硬件
♞沉寂11 小时前
c51串口通信原理及实操
单片机·51单片机·c51
猫头虎12 小时前
2025最新超详细FreeRTOS入门教程:第一章 FreeRTOS移植到STM32
stm32·单片机·嵌入式硬件·机器人·硬件架构·freertos·嵌入式实时数据库
清风66666614 小时前
基于STM32单片机的酒驾检测设计
stm32·单片机·嵌入式硬件·毕业设计·课程设计
恒森宇电子有限公司14 小时前
IP5326_BZ 支持C同口输入输出的移动电源芯片 2.4A的充放电电流 支持4LED指示灯
c语言·开发语言·单片机
涂山苏苏⁠14 小时前
STM32之ADC
stm32·单片机·adc
曙曙学编程15 小时前
stm32——NVIC,EXIT
c语言·c++·stm32·单片机·嵌入式硬件