实验 1 LED 闪烁实验
STM32 最简单的外设莫过于 IO 口的高低电平控制了,本章将通过一个经典
的 LED 闪烁程序,带大家开启 STM32 之旅, 通过本章的学习, 你将了解到
STM32 的 IO 口作为输出使用的方法。在本章中我们将通过代码控制普中科技
STM32 开发板上的 8个 LED,实现闪烁灯的效果。 本章分为以下学习目标:
1、 了解 STM32用有几种 GPIO模式。
2、 怎么学会设置 STM32的GPIO输出控制 LED灯。
1.1 硬件设计
首先我们来看一下我们开发板上面 LED的接线图:
LED 灯接线图
从上面的图,我们可以看到 LED 灯是接到单片机的 PC 口的 PC0 到 PC7。而
点 亮一盏LED的原理就是把相应LED接到单片机的相应的IO口输出低电平, IO
口 输出为高电平就能够熄灭 LED,所以要实现 LED闪烁也就是将单片机 PC管脚
每间隔一段时间不输出一个高低电平脉冲即可。
1.2: STM32 的IO 口简介
本章将要实现的是控制普中科技 STM32开发板上的8个 LED 实现LED灯闪
烁的效果, 该实验的关键在于如何控制 STM32 的 IO 口输出。了解了 STM32 的
IO 口如何输出的,就可以实现闪烁灯了。通过这一章的学习, 你将初步掌握
STM32 基本 IO 口的使用,而这是迈向 STM32 的第一步。这一章节因为是第一
个实验章节,所以我们在这一章将讲解一些知识为后面的实验做铺垫。在讲解
STM32 的 GPIO之前,首先打开我们光盘的第一个实验工程 LED 闪烁实验,可以
看到我们的实验工程目录:
接下来我们逐一讲解一下我们的工程目录下面的组以及重要文件。
① StdPeriph_Driver 下面存放的是 ST 官方提供的固件库函数,里面的函数我
们可以根据需要添加和删除,这里面的文件内容用户不需要修改。
② Startup 下面存放的是固件库必须的启动文件。这里面的文件用户不需要修
改。
③ cmsis 下面存放的是固件库必须的核心文件。这里面的文件用户不需要修改。
④ APP 下面存放的是每个实验的外设驱动代码,他的实现是通过调用
StdPeriph_Driver 内 的 固 件 库 文 件 实 现 的 , 比 如 led.c 里 面 调 用
stm32f10x_gpio.c 里面的函数对 led 进行初始化,这里面的函数是讲解的重
点。 后面的实验中可以看到会引入多个源文件。
⑤ user 下面存放的主要是用户代码。 stm32f10x_it.c 里面存放的是中断服
务函数,public存放的是公用函数,Main.c 函数主要存放的是主函数了,这个
大家应该很清楚。
准备内容我们就讲解到这里,接下来我们就要进入我们 LED 闪烁实验的讲解
部分了。 这里需要说明一下,我们在讲解固件库之前会首先对重要寄存器进行
一个讲解,这样是为了大家对寄存器有个初步的了解。大家学习固件库,并不需
要记住每个寄存器的作用,而只是通过了解寄存器来对外设一些功能有个大致的
了解,这样对以后的学习也很有帮助。
首先要提一下,在固件库中,GPIO 端口操作对应的库函数函数以及相关定
义在文件 stm32f10x_gpio.h 和 stm32f10x_gpio.c 中。STM32 的 IO 口相比
51 而言要复杂得多,所以使用起来也困难很多。 首先 STM32 的 IO 口可以由
软件配置成如下 8 种模式:
余下内容请下载附件
源码:
- *
- --------------------------------------------------------------------------------
- * 实 验 名 : LED灯闪烁实验
- * 实验说明 : 通过delay延时实现LED灯闪烁效果
- * 连接方式 :
- * 注 意 : 延时函数及显示函数在led.c文件内
- *******************************************************************************/
- #include "public.h" //公共函数头文件
- /****************************************************************************
- * Function Name : main
- * Description : Main program.
- * Input : None
- * Output : None
- * Return : None
- ****************************************************************************/
- int main()
- {
- LED_Init(); //LED端口及时钟初始化
- while(1)
- {
- led_display(); //led显示
- }
- }
复制代码
余下内容请下载附件:
32单片机LED闪烁.zip
(2.08 MB, 下载次数: 52)
|