购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

任务2.3 点亮LED

库函数开发:点亮LED

2.3.1 点亮LED的开发步骤

(1)硬件电路设计。

(2)软件设计。

(3)点亮LED(点亮单灯)。

2.3.2 硬件电路设计

为了点亮LED,需要先了解LED的硬件电路,这样就可以有的放矢地完成任务。本书使用的扩展板上的LED电路原理图如图2-31所示。在通过GPIOA0点亮LED时,首先要做的就是拿一根杜邦线连接图2-31的1引脚和图2-32中的A0引脚。

图2-31 LED电路原理图

图2-32 STM32F407扩展板的引脚图

硬件电路连接好以后,我们要分析一下LED的电路原理图。从图2-31可以很清楚地看出,LED的阳极通过电阻连接到3.3 V的电源,LED的阴极则使用杜邦线接到图2-32中的A0引脚。从这个连接方式可以看出,要想点亮LED,就需要使A0引脚保持低电平,因此接下来的任务就是如何使A0引脚保持低电平。

2.3.3 软件设计

点亮LED实验

(1)使用开发模板新建工程。

(2)开启外设时钟。

(3)配置GPIO。

(4)点亮LED(将GPIOA0设置为低电平)。

为了完成这个任务,在使用标准固件库函数建立工程后,还需要新建一个led.c文件并将该文件保存到HARDWARE文件夹中。led.c中的内容是与LED相关的GPIO接口配置,因此还要新建一个led.h文件,其内容就是led.c中函数的声明。在main.c中调用led.c,将GPIOA0设置为低电平。

需要注意的是,led.c要添加到HARDWARE文件夹中,在main.c中要包含led.h,即“#include"led.h"”。

led.c和led.h的主要代码如下:

在头文件(led.h)的开头使用了关键字“#ifndef”,用于判断标号“__LED_H”是否被定义。若“__LED_H”未被定义,则从“#ifndef”到“#endif”之间的内容都有效,也就是说,这个头文件若被其他文件包含,“__LED_H”就会被包含到相应的文件中。头文件在“#ifndef__LED_H”后使用了关键字“#define”定义上面判断的标号“__LED_H”。当这个头文件被同一个文件第二次包含时,由于在第一次包含头文件时“#define__LED_H”是有效的,再次判断“#ifndef__LED_H”时,判断的结果就是假,因此从“#ifndef”到“#endif”之间的内容就无效了,从而可以防止在同一个头文件被多次包含时,出现redefine(重复定义)的编译错误。

一般来说,我们不会直接在源文件写两行“#include”语句来包含同一个头文件,但可能因为头文件内部的包含导致重复定义,使用关键字“#ifndef”的目的是避免重复定义。

另外,为什么要用两个下画线来定义“__LED_H”标号呢?其目的是避免“__LED_H”与其他普通宏定义重复。如果用“GPIO_PIN_0”来代替这个标号“__LED_H”,就会因为stm32f4xx.h已经定义了GPIO_PIN_0,导致led.h文件无效,相当于led.h一次都没有被包含。

主函数的关键代码如下:

完成工程配置后单击“ ”按钮即可进行编译,如图2-33所示,当出现“0 Error(s),0Warning(s)”时表示编译成功,即没有错误没有警告。

图2-33 工程编译

在确保仿真器和核心板连接正确的情况下,即可单击“ ”按钮下载编译后的程序,如图2-34所示。

图2-34 下载程序

仿真器和核心板的连接如图2-35所示,需要注意LED1是否与GPIOA0引脚的连接是否正确。

图2-35 仿真器与核心板连接

本书使用的仿真器是ST-LINK,在单击“ ”按钮下载程序前要确保ST-LINK的设置是正确的。ST-LINK的设置详见图1-42。

即使仿真器与核心板连接,以及仿真器的设置都正确,在下载程序时也可能会遇到问题,如提示“No Target”。这是由于核心板下载接口的电平造成的,在反复实验中,总结出了一种下载的方法:按住核心板的复位键后单击“ ”按钮,再松开复位键,这样就能够成功下载程序。

程序在核心板上的运行结果是点亮LED,如图2-36所示。

图2-36 点亮LED r2hqBacCrH4fHxYvN18EYnAYzG4KnrYuIRnEVg2W2MXIroCvAM8D5PNOuApflr3m

点击中间区域
呼出菜单
上一章
目录
下一章
×