一、用寄存器点灯
硬件分析:首先我们要先去看原理图找到相应的GPIO口
然后再去看用到的寄存器
首先我们先看一下GPIO口是挂载在AHB1上面的,要先使能GPIOB的时钟
下面是RCC AHB1的寄存器
然后看一下配置GPIO口的寄存器
下面我们就借助上面原理图和寄存器来写我们点亮LED的代码,工程的建立如果不会可以看一下前面的博文
先建一个led.h和led.c文件别放进去user文件夹的inc和src
led.h中的代码
#ifndef _LED_H
#define _LED_H
#include "stm32f4xx.h"
void Led_Config(void);
#endif
led.c中的代码
主要是配置寄存器
#include "led.h"
/*
函数功能:LED初始化
形参:void
返回值:void
说明:
1、打开GPIOB时钟
2、PB8 ----- 通用推挽模式
PB9 ----- 通用推挽模式
*/
void Led_Config(void)
{
RCC->AHB1ENR |= 1 << 1; //打开GPIOB的时钟
GPIOB->MODER &=~ (3 << 16);
GPIOB->MODER |= (1 << 16);
GPIOB->OTYPER &=~ (1 << 8);
GPIOB->OSPEEDR |= 2 << 16;
GPIOB->PUPDR &=~ (3 << 16);
GPIOB->ODR |= 1 << 8;//默认灭
GPIOB->MODER &=~ (3 << 18);
GPIOB->MODER |= (1 << 18);
GPIOB->OTYPER &=~ (1 << 9);
GPIOB->OSPEEDR |= 2 << 18;
GPIOB->PUPDR &=~ (3 << 18);
GPIOB->ODR |= 1 << 9;//默认灭
}
main.c中的代码
#include "main.h"
int main()
{
Led_Config();//LED初始化
while(1)
{
/*
*寄存器点亮LED(PB8、PB9)
*/
GPIOB->ODR &=~ (1 << 8);//LED1亮
GPIOB->ODR &=~ (1 << 9);//LED2亮
GPIOB->ODR &=(1 << 8);//LED1灭
GPIOB->ODR &=(1 << 9);//LED2灭
}
}
main.h中的代码
#ifndef _MAIN_H
#define _MAIN_H
#include "stm32f4xx.h"
#include "led.h"
#endif
两盏蓝色的就是点亮的灯
二、用库函数点灯
工程跟上面是一样的只是代码变了,换成了调用库函数
led.h中的代码
#ifndef _LED_H
#define _LED_H
#include "stm32f4xx.h"
void Led_Config(void);
#endif
led.c中的代码
#include "led.h"
/*
函数功能:LED初始化
形参:void
返回值:void
说明:
1、打开GPIOB时钟
2、PB8 ----- 通用推挽模式
PB9 ----- 通用推挽模式
*/
void Led_Config(void)
{
/*
*库函数版本
*/
GPIO_InitTypeDef GPIO_InitStruct;//声明结构体变量
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//打开GPIOB的时钟
//初始化PB8和PB9
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//通用输出
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;//第八号管脚
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//速度50Mhz
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_SetBits(GPIOB, GPIO_Pin_8);//默认灭
GPIO_SetBits(GPIOB, GPIO_Pin_9);//默认灭
}
main.h中的代码
#ifndef _MAIN_H
#define _MAIN_H
#include "stm32f4xx.h"
#include "led.h"
#endif
main.c中的代码
#include "main.h"
int main()
{
Led_Config();//LED初始化
while(1)
{
/*
*库函数点亮LED(PB8、PB9)
*/
//方式一不使用宏定义
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
GPIO_ResetBits(GPIOB, GPIO_Pin_9);
GPIO_SetBits(GPIOB, GPIO_Pin_8);
GPIO_SetBits(GPIOB, GPIO_Pin_9);
}
}
两盏蓝色的就是点亮的灯
博文就先写到这里,下一篇我们来写按键的操作,如果这篇博文对你有帮助赶紧关注、点赞、收藏吧,感谢你的支持!