zoukankan      html  css  js  c++  java
  • stm32(流水灯)

    主函数:

    #include "stm32f10x.h"
    #include "led.h"
    #include "delay.h"
    int main(void)
    {
        led_Init();                              //led初始化
        Delay_init();                          //延时函数初始化
        while(1)
        {    
            //正向
        GPIO_ResetBits(GPIOC,GPIO_Pin_8);  /**低电平**/
            Delay(300);
            GPIO_SetBits(GPIOC,GPIO_Pin_8);  /**高电平*/
    
            GPIO_ResetBits(GPIOC,GPIO_Pin_9);  /**低电平*/
            Delay(300);
            GPIO_SetBits(GPIOC,GPIO_Pin_9);  /**高电平*/
        
            GPIO_ResetBits(GPIOC,GPIO_Pin_10); /**低电平*/
            Delay(300);
            GPIO_SetBits(GPIOC,GPIO_Pin_10);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_11);  /**低电平*/
            Delay(300);
            GPIO_SetBits(GPIOC,GPIO_Pin_11);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_12);  /**低电平*/
            Delay(300); 
            GPIO_SetBits(GPIOC,GPIO_Pin_12);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_13);  /**低电平*/
            Delay(300);
            GPIO_SetBits(GPIOC,GPIO_Pin_13);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_14);  /**低电平*/
            Delay(300);
            GPIO_SetBits(GPIOC,GPIO_Pin_14);  /**高电平*/
        
            GPIO_ResetBits(GPIOC,GPIO_Pin_15);  /**低电平*/
            Delay(300);
            GPIO_SetBits(GPIOC,GPIO_Pin_15);  /**高电平*/
            Delay(500);
    
    
            //反向
            GPIO_ResetBits(GPIOC,GPIO_Pin_14);  /**低电平*/
            Delay(200);
            GPIO_SetBits(GPIOC,GPIO_Pin_14);  /**高电平*/
        
            GPIO_ResetBits(GPIOC,GPIO_Pin_13);  /**低电平*/
            Delay(200);
            GPIO_SetBits(GPIOC,GPIO_Pin_13);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_12);  /**低电平*/
            Delay(200);
            GPIO_SetBits(GPIOC,GPIO_Pin_12);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_11);  /**低电平*/
            Delay(200);
            GPIO_SetBits(GPIOC,GPIO_Pin_11);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_10);  /**低电平*/
            Delay(200);
            GPIO_SetBits(GPIOC,GPIO_Pin_10);  /**高电平*/
            
            GPIO_ResetBits(GPIOC,GPIO_Pin_9);  /**低电平*/
            Delay(200);
            GPIO_SetBits(GPIOC,GPIO_Pin_9);  /**高电平*/
        
            GPIO_ResetBits(GPIOC,GPIO_Pin_8);  /**低电平*/
            Delay(200);
            GPIO_SetBits(GPIOC,GPIO_Pin_8);  /**高电平*/
            Delay(500);
    }
    }

    led.c

    #include "led.h"
    void led_Init(void)                                       
      //定义led初始化函数
    {
      GPIO_InitTypeDef GPIO_InitStructure;                 
      //定义了一个GPIO_InitTypeDef类型的结构体,要想看到结构体中的内容,可以从stm32f10x.h中找到其结构体内部包含了哪些变量, Structure变量可随意取
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
      //GPIOC的时钟被打开( 因为STM32为了实现低功耗,设计了很复杂的时钟系统,每个外设配置使用前都要开启外设时钟)
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
      //选择要控制的GPIO引脚
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      //设置引脚速率为50MHZ
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
      //选择GPIOC引脚输出方式为推挽输出方式
      GPIO_Init(GPIOC, &GPIO_InitStructure);              
      //是把上面配置的信息写入这个结构体中,也叫对引脚配置的初始化
      GPIO_SetBits(GPIOC,GPIO_Pin_All);                      
      //开始全为高电平————全灭    /
    }

    led.h

    #ifndef __LED_H_
    #define __LED_H_
    #include "stm32f10x.h"
    
    void led_Init(void);
    
    #endif

    delay.c:

    #include "delay.h"
    u32 TimingDelay;
    //32对应就是32位数据了,我们使用库开发时,库文件中已经把原本的unsigned intshortchar宏定义为u32、 u16、 u8等等数据类型了
    //u8是unsigned char,u16是unsigned short,u32是unsigned int这些都属于变量类型
    void Delay_init(void)
    {
    SysTick_Config(SystemCoreClock / 1000);
    //是判断你配置的定时频率是否可以实现,如果可以就继续往下执行,如果不可以就一直停在这里。
    }
    void Delay(u32 nTime)
    { 
    TimingDelay= nTime; 
    //延时函数。1个nTime相当于时间:1ms
    while(TimingDelay != 0);
    }

    delay.h:

    #ifndef __DELAY_H_
    #define __DELAY_H_
    #include "stm32f10x.h"
    void Delay_init(void);
    void Delay(u32 nTime);
    #endif

    以上的流水灯重复度较高,改用switch.....case...语句,并将该功能写为一个函数:

    #include "stm32f10x.h"
    #include "led.h"
    #include "delay.h"
    void LED_Control(u8 LED_Number);   
    
    int main(void)
    {
        u8 LED_Number=0 ;
        led_Init();                              //led初始化
        Delay_init();                          //延时函数初始化
        while(1)
        {    
          LED_Control(LED_Number);
            Delay(200);
            LED_Number++;
            if(LED_Number==8)
            {
                LED_Number = 0;
            }
            
            
      }
    }
    
    void LED_Control(u8 LED_Number)
    {
         GPIO_SetBits(GPIOC,GPIO_Pin_All);        //全灭
        switch(LED_Number)
        {
            case 0:
                        GPIO_ResetBits(GPIOC,GPIO_Pin_8); //
                        break;
            case 1:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_9);     
                    break;
            case 2:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_10);        
                    break;
            case 3:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_11);      
                    break;
            case 4:
                        GPIO_ResetBits(GPIOC,GPIO_Pin_12);       
                        break;
            case 5:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_13);     
                    break;
            case 6:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_14);        
                    break;
            case 7:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_15);      
                    break;
            default:
                      GPIO_SetBits(GPIOC,GPIO_Pin_All);
                      break;
      }
    }

    总结:

    (1)设置输出电平函数:SetBits         高电平

                                              ResetBits     低电平

    (2)推挽输出(GPIO_Mode_Out_PP)

             可以输出高低电平。

    (3)GPIO

             GPIO是通用输入输出端口的简称,就是stm32可以控制的引脚。

             GPIOx:x可以是A、B、C、D、E,以此来选择GPIO外设。

     (4)GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15为控制八个LED等的端口。

  • 相关阅读:
    java版扫雷
    隔离级别
    Servlet Analysis
    Session&Cookie
    centos上部署应用到tomcat
    在CentOS 7中安装与配置Tomcat-8.5方法
    centos7中安装、配置jdk(转载)
    java RE Validation常用
    hello2 source Analysis
    serlvet中的过滤器filter
  • 原文地址:https://www.cnblogs.com/zhai1997/p/11344272.html
Copyright © 2011-2022 走看看