STM32 Nucleo初级例程1:软件延时方式点亮LED灯

作者: fengye5340
上传时间为: 2014-12-08 05:15 PM

有了一个工程模板以后,就可以在上面进行程序开发了。在拿到不同的板卡时,大家第一时间总会想到将板卡上的LED灯点亮,让它闪烁起来,这样一方面验证下载程序是否可行,另一方面,通过简单的IO输出电平操作,踏上程序开发之旅!这一篇文章主要是讲一下利用软件延时的方式来点亮STM32-NUCLEO-072RB开发平台上的用户LED灯。在讲解具体代码实现之前,先简单介绍一下STM32的GPIO库函数及基本内容。

一、 STM32的IO配置方式

在开始编程之前,要明确一下,学习STM32要学会利用库函数的方式编程。因为32位MCU不像8位16位机的寄存器那样数量少,而是非常庞大,采用寄存器方式导致程序可读性不好,移植性不好,开发效率极低,不建议采用。采用STM32库函数编程,要知道stm32f0xx_gpio.h文件定义的GPIO_InitTypeDef结构体,它定义IO配置部分:引脚名、引脚属性(输出类型/上下拉/速度) 

使用时,先定义一个GPIO_InitTypeDef结构体变量通过GPIO_InitTypeDef结构体变量实现对IO引脚名和引脚属性的值设定通过库函数 GPIO_Init()将GPIO_InitTypeDef结构体变量的值统一赋值到 MCU内部的GPIO寄存器中去!利用ST官方提供的库函数,省却了对MCU各个寄存器配置的麻烦,方便短时间内实现对STM32上手编程。下面看一下GPIO_InitTypeDef结构体个成员的宏定义和结构体定义

引脚名称定义:每组IO有16个引脚(GPIOX.0-GPIOX.15)

STM32的IO具有多种配置方式,不像以前51单片机那种双向或者单向配置,如果有MSP430的学习经验,理解STM32的IO配置更加容易。GPIO定义:GPIOMode_TypeDef

STM32的IO配置方式:输入模式,输出模式,复用模式,模拟通道模式

出模式定义GPIOOType_TypeDef

IO输出模式: 开漏输出推挽输出两种模式 。开漏输出:用于IO实现信号1和信号0的逻辑输出,无带负载能力。推挽输出:IO最常用的功能,具有带负载能力,单个IO输出电流最大25mA,MCU总IO电流最大80mA! 驱动大功率负载,要增加外部驱动器和缓冲器才行。

IO输出的速度定义:GPIOSpeed_TypeDef;

这些参数表明的GPIO的IO电路反应时间,并不是IO电平的翻转频率。一般对高速控制而言,采用最高的IO反应速度。

上下拉电阻设置定义:GPIOOPuPd_TypeDef

在配置IO时,设置输入和输出模式时,也能选择上拉,下拉,无上拉功能

有了这些定义,就可以实现基本的库函数了,它是对MCU内部GPIO模块寄存器内容配置的封装。下面这些是实现GPIO电平输出必须的,

IO某个引脚输出高电平

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

IO某个引脚输出低电平

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

对一组IO(16个)进行赋值操作

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

有了这些库函数就可以实现LED点灯了。下面再看一下STM32-NUCLEO-072RB开发板上LED灯的硬件电路。在点亮LED灯时,要知道是那个引脚输出高低电平才行。

可以看到是PA5端口连接到LED上,通过一个限流电阻,只要让PA5输出高低电平就可以点亮LED灯了。这里要把PA5引脚配置为输出模式,推挽模式。具体代码配置过程,看一下在KEIL-MDK中的代码实现:

二、Keil-mdk工程软件代码实现

1、Keil-mdk工程模板中加入led.c文件,在includes.h文件中加入led.h头文件 ,截图

2、led.h头文件里面增加对PA5端口的宏定义 ,这样做是为了以后移植程序到其他STM32的MCU时配置方便

3、PA5端口初始化LED_Init()函数代码的实现

为了降低功耗,STM32的MCU上电初始化后,所有引脚默认都是输入模式,高阻状态,并且GPIO的时钟都处于关闭状态。在我们使用到具体的IO时,需要将其对应的IO时钟打开,否则IO不能工作。在代码中,先定义一个结构体变量,然后打开GPIOA的时钟,将第5引脚配置为推挽输出,上拉模式,速度50MHZ,初始化IO后,先输出低电平,关闭LED。

4、软件延时代码的实现

这几个延时函数比较简单,最关键的是内部的参数设置,这个参数一方面可以利用示波器测量输出高低电平时间来确定,也可以参考官网的参数设定,能基本实现ns级,us级和ms级的延时了。

5、LED点亮和闪烁

有了延时,再让PA5输出高低电平就可以实现LED灯闪烁了。

这个内容比较简单,在main.c里面实现上述代码即可。

代码地址链接

http://www.eeboard.com/bbs/thread-39696-1-1.html

摩尔吧视频地址链接

http://www.moore8.com/courses/306


全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示