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

相关推荐
半杯咖啡半行码11 小时前
STM32之ARM通用汇编指令详解:从指令格式到寻址方式
汇编·arm开发·stm32
创界工坊工作室12 小时前
22-基于STM32的汽车防盗系统设计
stm32·单片机·嵌入式硬件·proteus
雨田言炎13 小时前
STM32之RCC系统时钟控制(芯片的心脏控制器)
stm32·单片机·嵌入式硬件
李永奉14 小时前
日常使用的锂电池上,新、旧锂电池的差异分析
单片机·嵌入式硬件·物联网·智能手机·电脑
额额额对了14 小时前
IMX6ULL 杂项设备 LED 驱动
stm32·单片机·嵌入式硬件
长春的KAKA15 小时前
Proxmark3 Iceman分支CLI命令总表
嵌入式硬件
半杯咖啡半行码16 小时前
STM32开发之IIC通信详解:从协议基础到FM24CL04实战
stm32·单片机·嵌入式硬件
硅基手札16 小时前
【I2C 技术系列 05】I2C 多主仲裁与时钟同步
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
szxinmai主板定制专家16 小时前
面向虚拟电厂协调控制:RK3588+FPGA+AI边缘控制器设计思路与算力评估
人工智能·嵌入式硬件·fpga开发·机器人·jetson·zynq·振动采集
Zw-awa17 小时前
DO 和 AO 到底怎么选:比较器替你决定了什么
stm32