美文网首页
Stm32之点亮LED灯源代码分析

Stm32之点亮LED灯源代码分析

作者: 月与树 | 来源:发表于2020-04-26 23:24 被阅读0次

分析

首先看原理图

LED灯的连接情况

从上图我们可以知道LED灯的两个IO接口分别是PB0与PB1,

#ifndef __LED_H
#define __LED_H  //条件编译,防止重复引用
#include "sys.h"
// 设置宏定义的好处是易于阅读,做项目的时候更好理解每个接口是干嘛的

/*根据原理图定义IO接口*/
#define IO_LEDPORT  GPIOB   
#define IO_LED1OUT  GPIO_Pin_0  
#define IO_LED2OUT  GPIO_Pin_1

/*定义和LED灯相关函数*/
void LED_Init(void);   //初始化
void LED1(u8 a);
void LED2(u8 a);
                            
#endif

接下来看led.c,通过查阅手册来获得GPIO_Init(),GPIO_SetBits()的相关用法。

#include "led.h"

//LED灯的接口初始化
void LED_Init(void){ 
      GPIO_InitTypeDef  GPIO_InitStructure;//定义一个GPIO_InitTypeDef类型的结构体
    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);// 使能GPIOB的外设时钟,
    
      GPIO_InitStructure.GPIO_Pin = IO_LED1OUT | IO_LED2OUT; //配置要操作的端口                        
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式,因为需要点亮LED灯,所以是输出模式,且推挽输出大电流点亮LED      
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    
      GPIO_Init(IO_LEDPORT, &GPIO_InitStructure);//将上述参数写入寄存器,进行初始化
    
      GPIO_ResetBits(IO_LEDPORT,IO_LED1OUT|IO_LED2OUT); //LED灯都为低电平(0) 初始为关灯            
}
void LED1(u8 a){ //LED灯控制 参数为0灯灭
    if(a)GPIO_SetBits(IO_LEDPORT,IO_LED1OUT);
    else GPIO_ResetBits(IO_LEDPORT,IO_LED1OUT);
}
void LED2(u8 a){ //LED灯控制 参数为0灯灭
    if(a)GPIO_SetBits(IO_LEDPORT,IO_LED2OUT);
    else GPIO_ResetBits(IO_LEDPORT,IO_LED2OUT);
}

/*
选择IO接口工作方式:
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_AF_PP 复用推挽输出
GPIO_Mode_AF_OD 复用开漏输出
*/

我们转到stm32f10x_gpio.h这个文件查看这个嵌套结构体的定义

typedef struct
{
  uint16_t GPIO_Pin;  //指定要配置的引脚             

  GPIOSpeed_TypeDef GPIO_Speed;  //指定引脚输出的最高频率
    
  GPIOMode_TypeDef GPIO_Mode;    //指定引脚的工作模式
}GPIO_InitTypeDef;

结论

在使用和操作GPIO的时候,大概分为如下几个流程:

  • 根据电路原理图宏定义引脚,便于以后的开发
  • 开启外设时钟
  • 定义结构体,设置端口的相关属性
  • 利用GPIO_Init()函数来将上述的配置写入寄存器

相关文章

网友评论

      本文标题:Stm32之点亮LED灯源代码分析

      本文链接:https://www.haomeiwen.com/subject/sqaswhtx.html