跑马灯实验-库函数版

来源:互联网 发布:垃圾处理器 知乎 编辑:程序博客网 时间:2024/06/16 01:13
1、参考资料
        《STM32F1开发指南-库函数版本》-第六章 跑马灯实验6.1小节
        《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO)

2、WarShip原理图
         LED0--PD5   LED1--PE5  共阳极   低电平有效
   推挽输出:
       可以输出强高低电平,连接数字器件

   操作IO口:
       头文件:stm32f10x_gpio.h
       源文件:stm32f10x_gpio.c

3、重要函数:
      1个初始化函数:
      void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

      2个读取输入电平函数:
      uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
      uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

      2个读取输出电平函数:
      uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
      uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

      4个设置输出电平函数:
      void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
      void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
      void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
      void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

4、跑马灯用到三个函数
         GPIO_Init()    GPIO_SetBits()   GPIO_ResetBits()

   ·使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();
       不同的IO组,调用的时钟使能函数不一样
   ·初始化IO口模式。调用GPIO_Init();
   ·操作IO口,输出高低电平
        GPIO_SetBits();
        GPIO_ResetBits();

5、复制工程模板,新建文件夹HARDWARE,在HARDWARE文件夹中添加LED文件夹
         添加文件LED.c和led.h
         
6、写代码
      led.h
           #ifndef __LED_H
           #define __LED_H
           
           void LED_Init(void);
           
       #endif
       
       LED.c
               #include "led.h"
               #include "stm32f10x.h"
               void LED_Init(void)
               {
                       GPIO_InitTypeDef GPIO_InitStructure;                 //定义一个GPIO初始化结构体
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //PB口时钟使能
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); //PG口时钟使能
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE); //PF口时钟使能
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //PC口时钟使能
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //PE口时钟使能
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;         //设置第13管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOB, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOB, GPIO_Pin_13);                  //设置PB13管脚输出高电平
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //设置第0管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOG, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOG, GPIO_Pin_0);                  //设置PG0管脚输出高电平
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;         //设置第14管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOF, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOF, GPIO_Pin_14);                  //设置PF14管脚输出高电平
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;         //设置第12管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOF, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOF, GPIO_Pin_12);                  //设置PF12管脚输出高电平
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;         //设置第2管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOB, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOB, GPIO_Pin_2);                  //设置PB2管脚输出高电平
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //设置第0管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOB, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOB, GPIO_Pin_0);                  //设置PB0管脚输出高电平
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;         //设置第4管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOC, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOC, GPIO_Pin_4);                  //设置PC0管脚输出高电平
                                
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;         //设置第5管脚
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
                                GPIO_Init(GPIOA, &GPIO_InitStructure);            //调用GPIO初始化函数
                                GPIO_SetBits(GPIOA, GPIO_Pin_6);                  //设置PA6管脚输出高电平
                }
               
                main.c
                    #include "stm32f10x.h"
                    #include "led.h"
                    #include "delay.h"
                    int main()
                    {
                                  delay_init();//延时初始化函数
                                                LED_Init();  //LED初始化函数
                                                while(1)
                                                {
                                                    GPIO_SetBits(GPIOB, GPIO_Pin_13);//设置PB13管脚输出高电平
                                                    GPIO_SetBits(GPIOG, GPIO_Pin_0);//设置PG0管脚输出高电平
                                                    GPIO_SetBits(GPIOF, GPIO_Pin_14);//设置PF14管脚输出高电平
                                                    GPIO_SetBits(GPIOF, GPIO_Pin_12);//设置PF12管脚输出高电平
                                                    GPIO_SetBits(GPIOB, GPIO_Pin_2);//设置PB2管脚输出高电平
                                                    GPIO_SetBits(GPIOB, GPIO_Pin_0);//设置PB0管脚输出高电平
                                                    GPIO_SetBits(GPIOC, GPIO_Pin_4);//设置PC4管脚输出高电平
                                                    GPIO_SetBits(GPIOA, GPIO_Pin_6);//设置PA6管脚输出高电平
                                                    delay_ms(300);
                                                    GPIO_ResetBits(GPIOB, GPIO_Pin_13);//设置PB13管脚输出低电平
                                                    GPIO_ResetBits(GPIOG, GPIO_Pin_0);//设置PG0管脚输出低电平
                                                    GPIO_ResetBits(GPIOF, GPIO_Pin_14);//设置PF14管脚输出低电平
                                                    GPIO_ResetBits(GPIOF, GPIO_Pin_12);//设置PF12管脚输出低电平
                                                    GPIO_ResetBits(GPIOB, GPIO_Pin_2);//设置PB2管脚输出低电平
                                                    GPIO_ResetBits(GPIOB, GPIO_Pin_0);//设置PB0管脚输出低电平
                                                    GPIO_ResetBits(GPIOC, GPIO_Pin_4);//设置PC4管脚输出低电平
                                                    GPIO_ResetBits(GPIOA, GPIO_Pin_6);//设置PA6管脚输出低电平
                                                    delay_ms(300);
                                                }              

                        }



0 0
原创粉丝点击