• STM32F407第一步之点亮LED


    STM32F407第一步之点亮LED。

    要点亮LED,首先了解一下F4的GPIO模块。首先看一下STM32F4数据手册,GPIO模块的内部结构图

    看上去有点复杂,不要怕,慢慢理解就可以了。对外引脚那里二极管就是保护的作用。通过上、下拉对应的开关配置,控制引脚默认状态的电压,开启上拉的时候引脚电压为高电平,开启下拉的时候引脚电压为低电平,这样可以消除引脚不定状态的影响。但是这个不应该用来作为外部的上拉或下拉用,如按键的拉电阻不能用这个内部来作用,如果用可能会引起按键不稳定。

    GPIO 具有了“推挽输出”和“开漏输出”两种模式。在该结构中输入高电平时,上方的 P-MOS 导通,下方的 N-MOS 关闭,对外输出高电;而在该结构中输入低电平时, N-MOS 管导通, P-MOS 关闭,对外输出低电平。当引脚高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。

    输出数据寄存器:由 GPIO“输出数据寄存器GPIOx_ODR”提供的,因此通过修改输出数据寄存器的值就可以修改 GPIO 引脚的输出电平。而“置位/复位寄存器 GPIOx_BSRR”可以通过修改输出数据寄存器的值从而影响电路的输出。

    “复用功能输出”中的“复用”是指 STM32 的其它片上外设对 GPIO 引脚进行控制,此时 GPIO 引脚用作该外设功能的一部分,算是第二用途。但是同一时刻只能用一个功能,如有的GPIO具有SIP功能,又具有I2C功能,在使用时只能配置成一种功能,要么是SPI要么是I2C。

    输入数据寄存器:GPIO 引脚经过上、下拉电阻后引入的,它连接到施密特触发器,信号经过触发器后,模拟信号转化为 0、 1 的数字信号,然后存储在“输入数据寄存器 GPIOx_IDR”中,通过读取该寄存器就可以了解 GPIO 引脚的电平状态。

    基本就是这样的了,具体的要参考STM32F4参考手册。

    对于点亮LED来说,首先看一下电路图,确认一下是高电平1点亮还是低电平0点亮。

    由以上原理图可以确定,三个灯是低电平0点亮的,那了解了GPIO的基本配置开始设计程序了,采用库函数方式,所以要添加相应的文件,stm32f4xx_gpio.c

    1、首先是配置LED对应GPIO引脚,让这些引脚设置为输出。

      

    static int initialize( void )
    {
    GPIO_InitTypeDef uGPIO_InitStructure;

    //映射时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);

    //配置引脚相关参数
    uGPIO_InitStructure.GPIO_Pin = LED_RED_PIN | LED_GREEN_PIN | LED_BLUE_PIN; //设置连接三色LED灯的IO端口
    uGPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //设置端口为输出模式
    uGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
    uGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
    uGPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //设置速度

    GPIO_Init(GPIOI,&uGPIO_InitStructure);

    //
    GPIO_SetBits(GPIOI,LED_RED_PIN | LED_GREEN_PIN | LED_BLUE_PIN);

    }

    2、可以操作LED对应引脚的高低电平,让LED能亮与灭。

    //LOW-ON
    #define LED_RED_OFF     GPIO_SetBits(LED_RED_PORT,LED_RED_PIN);
    #define LED_RED_ON      GPIO_ResetBits(LED_RED_PORT,LED_RED_PIN);

    #define LED_GREEN_OFF    GPIO_SetBits(LED_GREEN_PORT,LED_GREEN_PIN);
    #define LED_GREEN_ON   GPIO_ResetBits(LED_GREEN_PORT,LED_GREEN_PIN);

    #define LED_BLUE_OFF   GPIO_SetBits(LED_BLUE_PORT,LED_BLUE_PIN);
    #define LED_BLUE_ON    GPIO_ResetBits(LED_BLUE_PORT,LED_BLUE_PIN);

  • 相关阅读:
    [luogu3393]逃离僵尸岛
    [BZOJ2818]GCD
    [SCOI2015]情报传递
    [NOIP2010]引水入城
    [luogu4315]月下“毛景树”
    「LibreOJ NOI Round #2」不等关系
    [HNOI2013]游走
    Yet Another Minimization Problem
    ZJOI2015 地震后的幻想乡
    [九省联考2018]一双木棋chess
  • 原文地址:https://www.cnblogs.com/mouou/p/5551221.html
Copyright © 2020-2023  润新知