zoukankan      html  css  js  c++  java
  • STM32F4 GPIO 呼吸灯【库函数操作】

    GPIO的一些特性,翻译自ST的参考手册

    1、16组IO可用

    2、推挽/开漏+上拉/下拉

    3、可从ODR输出数据,也可从外设输出数据

    4、每个IO速度可独立设置

    5、浮空输入,上下拉输入,模拟输入

    6、输入数据到IDR或者外设

    7、ODR中数据可通过GPIOx_BSRR单独设置某一位。

    8、IO锁定装置,可冻结IO配置。(知道下次reset)

    9、模拟公呢

    10、复用输入输出选择及存取

    11、IO快速反转,两个时钟周期可反转一次。

    12、易配置的复用功能,可使一个IO有多个功能。

    本实验值用到了数字输出,控制IO反转时间以形成一组PWM波形驱动接在IO口上的LED。

    【代码实现】

    LED的定义:

    typedef enum
    {
      LED1 = 0,
      LED2 = 1,
      LED3 = 2,
      LED4 = 3
    } Led_Def;

    static GPIO_TypeDef* LED_PORT[4]={GPIOD, GPIOD, GPIOD, GPIOD};
    static const u16 LED_PIN[4]={GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14,GPIO_Pin_15};

    LED的初始化函数

    void LED_Init(void)
    {
          GPIO_InitTypeDef  GPIO_InitStructure;

          RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 |GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
          GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
          GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
          GPIO_Init(GPIOD, &GPIO_InitStructure);
    }

    void LEDOn(Led_Def Led)//LED亮
    {
          LED_PORT[Led]->BSRRL=LED_PIN[Led];
    }

    void LEDOff(Led_Def Led)//LED灭
    {
          LED_PORT[Led]->BSRRH=LED_PIN[Led]; 
    }

    void LEDTog(Led_Def Led)//LED状态翻转
    {
          LED_PORT[Led]->ODR^=LED_PIN[Led];
    }

    初始化完成后,在主函数中控制LED的通断。当PWM占空比大于一个值时候,LED亮度变化不明显,所以调整PWM的变化率使得整个过程中亮度变化均匀。当占空比太小时,LED完全没亮度,我将这段占空比取消掉了,主函数的实现如下:

    没有用while(1)这个循环,照样是无休止的反复亮灭。

    for(i = 100;(i<2000)&(i>=0);i=i+j)
    {
      LEDOn(LED2);
      delay_us(i);
      LEDOff(LED2);
      delay_us(2000-i);
      if( i == 1990)
        j =-5;
      if(i == 10)
        j = 1;
      if(i>=1000)
        j = 5;
      if((j == 5)&(i <= 1000))
        j = -1;
    }

    Technorati 标记: STM32F4,GPIO,LED,呼吸灯
  • 相关阅读:
    电商网站测试总结
    web测试总结—用户体验
    测试用例的常用方法
    linux系统中如何查看日志 (常用命令)
    web与app测试的区别
    Json模块dumps、loads、dump、load函数介绍
    postman—集成到jenkins
    Postman—命令执行脚本及生成报告
    Postman—测试脚本
    Postman—前置请求脚本
  • 原文地址:https://www.cnblogs.com/zyqgold/p/3097997.html
Copyright © 2011-2022 走看看