第9章 使用库函数点亮第一个LED

2024/11/21 STM32
第9章 使用库函数点亮第一个LED

一、硬件设计

pAsPfl6.png

  1. 两个指示灯DS0和DS1,分别接在PB5和PE5
  2. 发光二极管的阳极连接一个限流电阻,连接到3.3V,阴极连接到一个GPIO,输出低电平,这个时候发光二极管导通发光,要让他熄灭,就给它一个高电平,阴极和阳极的电平一样,所以它会熄灭

二、软件设计

  1. 程序主要框架:
    • ① 初始化系统时钟(固件库已经封装好,自己完成调用)
    • ② 使能对应GPIO时钟,并初始化GPIO相关参数
    • ③ 点亮LED
  2. 所使用的库文件介绍
    • ① GPIO外设库文件:stm32f10x_gpio.c、stm32f10x_gpio.h
    • ② RCC(外设时钟)外设库文件:stm32f10x_rcc.c、stm32f10x_rcc.h
  3. 所使用的库函数介绍
    • GPIO挂载在APB2高速总线上
    • ① 使能GPIO时钟函数:
      void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
      Periph:外设,Clock:时钟,Cmd:使能
      两个参数,参数1:ABPB2上的外设选择,参数2:功能状态(打开还是关闭)
      

      ② GPIO初始化函数:

      void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)
      参数1:选择端口,GPIOA,GPIOB...
      参数2:结构体,通过结构体调用成员
      

      ③ 设置管脚输出电平函数: 设置位功能函数,输出高电平

      void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
      参数1:选择端口,GPIOA,GPIOB...
      参数2:选择你要操作的引脚
      

      复位引脚,输出低电平

      void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
      参数1:选择端口,GPIOA,GPIOB...
      参数2:选择你要操作的引脚
      

      对位(GPIO引脚)进行写

      void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
      参数1:选择端口,GPIOA,GPIOB...
      参数2:选择你要操作的引脚,对该引脚进行写,
      参数3:写1还是0
      

      GPIO写,一个端口组进行写 一个端口组有16个管脚,所以传值是对应一组端口

      void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
      参数1:选择端口,GPIOA,GPIOB...
      参数2:输入你要操作的引脚,如0x01,就是对0号引脚进行操作
      

      ④ 读取管脚输入电平函数: 读取一个位(引脚)

      uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
      参数1:选择端口,GPIOA,GPIOB...
      参数2:选择你要操作的引脚
      

      GPIO读,一个端口组进行读

      uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
      参数1:选择端口,GPIOA,GPIOB...
      

      ⑤ 读取管脚输出电平函数:

      uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
      uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
      

三、文件夹创建及文件添加

  1. 创建APP文件夹,用来存放外设部分的代码,方便对工程的管理

pAyfFhR.png

  1. APP文件夹下创建LED文件夹,用来存放LED相关代码

pAWZr79.png

  1. 在工程目录文件组中添加APP文件组,用来管理操作的外设资源,如:LED

pAWZykR.png

  1. 此时LED文件夹中没有文件,此时要新建一个文件

pAWZcfx.png 两种方法,任选其一即可

  1. 将创建好的文件保存并命名

pAWZfXD.png

  • 同理,再添加一个LED.h文件
  1. 添加文件

pAWZI7d.png

  1. 添加头文件路径

pAWw3FI.png

四、.h文件

#ifndef __LED_H
#define __LED_H

#endif

  1. 格式功能:防止头文件被重复包含
  2. 头文件一般存放引脚定义,函数声明,相关结构体的封装等
  3. LED.h会在LED.c中调用,也会在main.c中调用,就会出现重定义,要避免重定义,就需要使用上述结构
  4. 具体解释,例如在LED.c文件中定义了,就会顺序执行#ifndef __LED_H#define __LED_H#endif,当在main.c中再定义的时候,就不会执行这些,避免了重定义
  5. 因为要对引脚进行操作,所以也需要把头文件定义到.h文件中去
#ifndef __LED_H
#define __LED_H

#include "stm32f10x.h"

#endif

五、配置须知

  1. 工作模式

pAWDdmD.png

  • 1) GPIO_Mode_IPU 上拉输入;
  • 2) GPIO_Mode_IPD 下拉输入;
  • 3) GPIO_Mode_IN_FLOATING 浮空输入;
  • 4) GPIO_Mode_AIN 模拟输入;
  • 5) GPIO_Mode_Out_OD 开漏输出;
  • 6) GPIO_Mode_Out_PP 推挽输出;
  • 7) GPIO_Mode_AF_OD 复用开漏输出;
  • 8) GPIO_Mode_AF_PP 复用推挽输出。
  1. 速度

pAWDw0e.png 输出要配置速度,输入不需要

六、代码实现

  1. main.c:

pAWhbmn.png

  1. LED.c

pAWhLT0.png

  1. LED.h

pAWhjYT.png

七、软件优化提高移植性

使用宏定义去定义端口时钟,端口号,引脚

  1. main.c

pAW5LGT.png

  1. LED.c

pAW5HI0.png 第二次由于模式和速度是和原来一致的,所以可以省略,因为用的是一个结构体,上面已经赋值。如果模式不同,那么就需要重新进行修改

  1. LED.h

pAW5vM4.png

八、批处理文件

pAW5xsJ.png 这个是批处理文件,双击它,他自动会把编译器生成的OBJ文件中的乱七八糟的文件删除,只留下hex文件,减轻电脑内存占用容量

文档信息

搜索

    Table of Contents