野火霸天虎STM32F4笔记(四)——根据官方手册写固件库点灯程序

野火霸天虎STM32F407笔记(四)——根据官方手册写固件库点灯程序

一、根据官方手册写固件库程序

  1. #ifndef (条件编译)的作用
  • #ifndef 是在头文件使用,因为该头文件会被包含在很多.c文件中,该头文件里面肯定会定义一些宏定义,如果多个文件包含它的话,这些宏就会被重复定义,就会出错。

1.编写步骤

  1. 在建立的头文件中包含寄存器映射头文件
#ifndef _BSP_LED_H  
#define _BSP_LED_H

//要驱动LED,就要用到GPIO,就要编程这个GPIO,涉及到寄存器编程,就要映射该头文件
#include "stm32f4xx.h"


#endif   //
  1. 开始写程序,写一个函数操作GPIO,用之前需要初始化,所有的初始化可以简单的总结为四个部分:
  • 第一步:开外设的时钟

    • 时钟是由RCC控制的,首先找到RCC的文件,这里先以GPIO为例,先在参考手册中找到GPIO对应的是哪个总线。(在存储器组织结构里面找),是AHB1告诉总线上
      在这里插入图片描述

    • 在参考手册上找到RCC寄存器说明,以前用的是寄存器,现在来介绍怎么用固件库。在RCC头文件里找到初始化函数。将声明的函数放入.c文件中,配置形参

    在这里插入图片描述

  • 第二步:定义一个外设初始化结构体(在GPIO头文件里面)先找到GPIO.c文件,在该文件里面进入头文件

  • 第三步:配置GPIO初始化结构体的成员

    在这里插入图片描述

    • 有了结构体,就要定义成员了,这里我们要点亮红灯(PF6)(这里是根据原理图来的)

    在这里插入图片描述

    在这里插入图片描述

    • 接下来是模式成员定义,配置为输入模式,找到该枚举定义

    在这里插入图片描述

    在这里插入图片描述

    • 接下来是端口输出类型,是开漏(I2C,sm)还是推挽,这里是推挽,应该是配置成0这个寄存器。

    在这里插入图片描述

    在这里插入图片描述

    • 接下来设置输出速率,这个主要是影响功耗,我们配置最低即可。

    在这里插入图片描述

    • 最后一个就是配置是上拉还是下拉,这里先配置上拉。

    在这里插入图片描述

  • 第四步:调用GPIO初始化函数,把配置好的结构体成员的参数写入寄存器

  • main.c

#include "stm32f4xx.h"   //最基本的寄存器映射头文件
#include "bsp_led.h"

void Delay(uint32_t count)
{
	for( ;count != 0;count--);

}


int main(void)
{
	/*在这里添加自己的程序*/
	LED_GPIO_Config();

	
	//为了程序上电运行的时候程序不会乱飞,先写一个死循环,在程序运行到此处时停住
	while (1)   //红灯闪烁
	{
		
		GPIO_ResetBits(GPIOF, GPIO_Pin_6);    //亮
		Delay(0xffffff);
		GPIO_SetBits(GPIOF, GPIO_Pin_6);      //灭
		Delay(0xffffff);
	
	}
}
  • bsp_led.c
//bsp  :board suppurt package 扳级支持包

#include "bsp_led.h"

void LED_GPIO_Config()   
{
	//所有的外设初始化都可以简单的总结为四部分
	//第一步:开GPIO时钟(时钟是由RCC控制的)
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
	//第二步:定义一个GPIO初始化结构体
	GPIO_InitTypeDef GPIO_InitStruct;
	
	//第三步:配置GPIO初始化结构体成员
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;  //这里GPIO_Pin_6也是根据gpio的头文件来的

	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT ;  //配置为输入模式
	
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP ; //推挽输出
	
	GPIO_InitStruct.GPIO_Speed = GPIO_Low_Speed ; //配置最低的功耗
	
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP ;  //配置上拉
	
	//第四步:调用GPIO初始化函数,把配置好的结构体成员的参数写入寄存器中
	GPIO_Init(GPIOF, &GPIO_InitStruct);
	
	

}
  • bsp_led.h
#ifndef _BSP_LED_H  
#define _BSP_LED_H

//要驱动LED,就要用到GPIO,就要编程这个GPIO,涉及到寄存器编程,就要映射该头文件
#include "stm32f4xx.h"
//#include "stm32f4xx_gpio.h"
void LED_GPIO_Config(void);

#endif   //


  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值