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

相关推荐
FreakStudio10 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘15 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484915 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150015 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼15 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
牛根生同志15 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
wohoo_wangzi15 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
goldenrolan15 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
✎ ﹏梦醒͜ღ҉繁华落℘15 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展15 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件