应用C语言编写程序,在嵌入式实训板上实现点亮一个LED灯。
通过自己动手点亮一个LED灯,就如同照亮了人生前进的道路,激发学生用所学知识,开启自主研发产品的兴趣。
为了完成上述任务,需要先了解LED(Light Emitting Diode)。LED也称为发光二极管,是一种固态的半导体器件,可以直接把电转化为光。发光二极管的心脏是一个半导体晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,整个晶片被环氧树脂封装起来,实物如图2.1所示。
图2.1 发光二极管实物图
发光二极管的管芯结构与普通二极管相似,由一个PN结构成。当在发光二极管PN结上加正向电压时,空间电荷层变窄,载流子扩散运动大于漂移运动,致使P区的空穴注入N区,N区的电子注入P区。当电子和空穴复合时会释放出能量并以发光的形式表现出来。
了解原理后,画出发光二极管任务原理图并分析实现方法,原理图如图2.2所示。要点亮发光二极管LED,只要引脚PB0.1为高电平即可。同理,当引脚PB0.1为低电平时,LED不会被点亮。程序中用“0”表示低电平,“1”表示高电平,因此,要点亮图2.2所示的发光二极管,只需将值“1”赋给嵌入式芯片对应的引脚即可。同理,要熄灭发光二极管,只需将值“0”赋给嵌入式芯片对应的引脚即可。
图2.2 LED原理图
GPIO工作原理及库函数应用讲解(基于LED灯)
GPIO是通用输入/输出寄存器的简称,用于引脚与外部硬件设备连接,可实现与外部通信、控制外部硬件或采集外部硬件数据的功能。
STM32F103VBT6芯片有100个引脚,包括5个通用输入/输出口组成,分别为GPIOA,GPIOB,GPIOC,GPIOD,GPIOE,通常简称为PAx,PBx,PCx,PDx,PEx。GPIO口的电路结构图如图2.3所示。
图2.3 GPIO口的电路结构图
GPIO口的电路结构包括输入/输出寄存器、输入/输出控制电路与驱动器、保护二极管。
①保护二极管:I/O引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。
②TTL施密特触发器:信号经过触发器后,把模拟信号转化为0和1的数字信号。
③P-MOS管和N-MOS管:使GPIO具有“推挽输出”和“开漏输出”的模式。
④GPIO的4种输入模式:浮空模式( IN_FLOATING)、上拉模式( IPU)、下拉模式(IPD)、模拟输入(AIN)。
⑤GPIO的4种输出模式:开漏输出(Out_OD)、开漏复用(AF_PP)、推挽输出(Out_PP)、推挽复用(AF_OD)。
GPIO配置的相关函数API主要位于“stm32f1xx_hal_gpio. c”文件中,GPIO的接口函数分为初始化函数、控制函数和配置函数三类。
①初始化函数,HAL_GPIO_Init:初始化引脚的工作模式,包括引脚的工作速度、复用模式、上拉模式、下拉模式等参数。HAL_GPIO_DeInit:将引脚恢复成默认的状态,即各个寄存器复位时的值。
②控制函数,HAL_GPIO_ReadPin:读取引脚的电平状态,函数返回值为0或1。HAL_GPIO_WritePin:设置引脚电平状态,给引脚写0或1。HAL_GPIO_TogglePin:翻转电平引脚状态。
③配置函数,HAL_GPIO_LockPin:锁定引脚的配置。
引脚初始化流程:
首先利用引脚初始化数据类型定义了一个结构体变量GPIO_InitStruct,并将它的各个成员变量初始化为零。其次根据引脚的配置要求,对相关的成员变量进行赋值。最后调用引脚初始化函数HAL_GPIO_Init,完成引脚的初始化。
1)硬件连接
根据前述分析,原理接线图如图2.4所示。
图2.4 原理接线图
2)软件编程
(1)建立工程
首先使用STM32CubeMX建立工程,在项目1中已经详细讲解过,这里只列出具体的引脚配置部分。
①启动CubeMX选择“ACCESS TO MCU SELECTOR”,进入目标选择界面。
②在芯片搜索框中输入“STM32F103VBT6”,在芯片列表框中双击出现的芯片型号,完成启动芯片。
③配置引脚PA6为输出模式,如图2.5所示。
图2.5 GPIO引脚的配置
(2)主程序流程图
主程序流程图,如图2.6所示。
图2.6 主程序流程图
(3)源程序代码
下面是源程序代码的主要部分,其中重点的程序代码都做了注释,这里没有列出非主要程序代码,完整的程序详见教学资源中的程序和实验视频。
经过程序的调试、编译、下载到STM32主控实训板,实验效果如图2.7所示。
图2.7 实验效果图
如果要实现LED灯闪烁,其实施步骤与点亮一个LED灯的步骤相同,但程序的编写有所不同,这里使用HAL_GPIO_TogglePin电平跳转函数。
1.实现两个相邻LED灯在电路板上常亮。
2.实现两个相邻LED灯在电路板上循环闪烁。