STM32单片机的GPIO基本操作一(led灯)

作为一个刚入门的嵌入式程序员。这里算是stm32f103的入门操作,不过在这个程序中体现出了java的部分三层架构思想,数据访问层通过库函数,业务逻辑层通过led.h来实现,表示层通过led.c和main来实现,这样以后在修改一些简单内容(类似于端口)的时候,只需要修改led.h中的内容即可以实现相关功能,简化了后期的维护和拓展。(本来想通过枚举方法只修改led.h中的部分值,实现增加或者减少led灯的程序,不过公司任务较多,没来得及思考具体实现。望大神可以指点一二)


led.h文件

#ifndef __LED_H

#ifndef __LED_H

#define __LED_H

#include "sys.h"

#define LED0_PIN           GPIO_Pin_5

#define LED0_PORT       GPIOB

#define LED1_PIN           GPIO_Pin_5

#define LED1_PORT       GPIOE

#define LED0_ON        GPIO_ResetBits(LED0_PORT,LED0_PIN)  //LED0对应引脚GPIOB.5拉低,亮

#define LED0_OFF      GPIO_SetBits(LED0_PORT,LED0_PIN)  //LED0对应引脚GPIOB.5拉高,灭

#define LED1_ON        GPIO_ResetBits(LED1_PORT,LED1_PIN)  //LED1对应引脚GPIOE.5拉低,亮

#define LED1_OFF      GPIO_SetBits(LED1_PORT,LED1_PIN)   //LED1对应引脚GPIOE.5拉高,灭

void led_init(void);  //初始化led的GPIO端口

#endif


LED.C文件

#include"led.h"

#include"stm32f10x.h"  //只要调用库函数,就需要添加此头文件

void led_init(void)

{

  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口时钟

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Pin = LED0_PIN; 

  GPIO_Init(LED0_PORT, &GPIO_InitStructure); 

  GPIO_InitStructure.GPIO_Pin = LED1_PIN;   

  GPIO_Init(LED1_PORT, &GPIO_InitStructure);

  LED0_OFF; //端口初始化完成后,关闭两个小灯

  LED1_OFF;

}


main文件

#include "stm32f10x.h"

#include "delay.h"//从跑马灯就需要使用该头文件

#include "led.h"  //跑马灯需要的头文件

int main(void)

{

    delay_init();   //初始化延时函数

    led_init();         //初始化LED端口

    while(1)

    {

        LED0_OFF;

        LED1_ON;

        delay_ms(1500); 

        LED0_ON;

        LED1_OFF;

        delay_ms(1500); 

    }

}


这里是库函数底层结构

RCC_APB2PeriphClockCmd():主要是用于打开端口时钟的,主要有2个参数

        RCC_APB2Periph_GPIOB;//对用端口需要打开的始终,如果是多个端口,可以使用"  | "或符号一起使用

        DISABLE ;     DISABLE;//失能   或者使能

GPIO_InitTypeDef定义的gpio初始化的结构体主要有三个参数

        GPIO_Pin; //GPIO的端口号

        GPIO_Speed;//GPIO的速度,可选参数为

                GPIO_Speed_10MHz = 1,

                GPIO_Speed_2MHz,

                GPIO_Speed_50MHz;

        GPIO_Mode//GPIO的可选模式,可选参数

                GPIO_Mode_AIN = 0x0, //模拟输入,主要用于ADC

                GPIO_Mode_IN_FLOATING = 0x04,//浮空输入,主要用于按键检测

                GPIO_Mode_IPD = 0x28,  //Ï下拉输入

                GPIO_Mode_IPU = 0x48,  //上拉输入

                GPIO_Mode_Out_OD = 0x14, //开楼输出

                GPIO_Mode_Out_PP = 0x10,  //通用推完输出

                GPIO_Mode_AF_OD = 0x1C, //复用开漏输出

                GPIO_Mode_AF_PP = 0x18  //复用推完输出

猜你喜欢

转载自www.cnblogs.com/wlstm/p/9694130.html