【10天基于STM32F401RET6智能锁项目实战第2天】(分别用库函数和寄存器点灯)

分别用库函数和寄存器点灯

一、用寄存器点灯

硬件分析:首先我们要先去看原理图找到相应的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);
	}
}

两盏蓝色的就是点亮的灯
在这里插入图片描述

博文就先写到这里,下一篇我们来写按键的操作,如果这篇博文对你有帮助赶紧关注、点赞、收藏吧,感谢你的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是北豼不太皮吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值