查看: 2165|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 06:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-8 10:43:00 | 显示全部楼层 |阅读模式
    分享到:
    有了一个工程模板以后,就可以在上面进行程序开发了。在拿到不同的板卡时,大家第一时间总会想到将板卡上的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里面实现上述代码即可。
    代码地址链接
    https://www.eeboard.com/bbs/thread-39696-1-1.html
    摩尔吧视频地址链接
    https://www.moore8.com/courses/306
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 15:59 , Processed in 0.110273 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.