基于STM32的智能门锁系统 经典开局,先来个点灯

正常项目开始了,那就先从原理图看一下,点个灯吧

然后再看一下LED_R和LED_G,这两个灯在核心板子哪个IO口上

找到了

那么我们从原理图上可以看到,两个LED通过IO口输出个低电平就可以点亮了,

那接下来就是去初始化配置这两个LED对应的IO没有问题吧

那就我们进入项目,创建LED.c和LED.h两个文件

寄存器示例

在开始编写程序之前,看一下寄存器如何配置IO口的呢

首先还是开启GPIO端口的时钟,让其能工作,接下来配置IO口的输出类型,我们就是选择是输出类型,接着就是输出模式(推挽和开漏),然后配置输出速度,接着就是上下拉,然后我们在默认输出数据寄存器为高电平(默认LED为灭着)。好那么现在输出化完成后,

我们就在LED.h定义几个宏。

红灯

复制代码
#define LED_R_ON (GPIOB->ODR &= ~(1<<8);#define LED_R_OFF (GPIOB->ODR |= (1<<8));#define LED_R_TURN (GPIOB->ODR ^= (1<<8));

绿灯​​​​​​​

复制代码
#define LED_G_ON (GPIOB->ODR &= ~(1<<9));#define LED_G_OFF (GPIOB->ODR |= (1<<9));#define LED_G_TURN (GPIOB->ODR ^= (1<<9));

在主函数中​​​​​​​

复制代码
#include "LED.h"
int main(){  LED_INIT();  LED_R_ON;  LED_G_ON;    while(1){          }}

那么以上是关于寄存器初始化IO口的详细过程,而我们用到这个项目是库函数开发的。

库函数

库函数就是将我上面LED.c写的初始化函数里中直接封装为一个函数了,我们呢只需要调用,然后传参数就可以了,不用我们自己去写寄存器了。

我们可以看到这些外设的函数,这些就是我们在刚开始搭建一个项目环境时,提取的一些内核和外设文件。那我们现在就找GPIO.c的文件,跳到对应的头文件

可以看到有一些库函数,这些就是我们以后用到的库函数,这些函数将我们的寄存器给封装起来,所以在用到的时候很方便。

举例:

比如我现在想配置IIC,那就去找关于IIC的这个函数

也可以看到给我们封装的一些函数。

库函数示例

那么就以上述我们写的初始化GPIO寄存器为例,我们用库函数去解决

时钟配置

首先我们是不是需要开启GPIO时钟,

去到rcc.h中,看到一些函数,我们根据STM的官方数据手册,知道GPIOB控制器是挂载到AHB1总线上,

复制代码
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);

那么就是这个函数

这个函数有两个参数,那我得知道这个参数是什么,那么我们鼠标右键点击去看这个函数定义,所以来到了

那么就可以根据这个,我们知道函数参数为RCC_AHB1Periph_GPIOB

和ENABLE

GPIO配置

再到了GPIO初始化了,我们就继续到库函数,发现这个函数

那么我们就继续上述内容,去找个函数里面找参数,

根据注释,我们发现第一个是不是GPIOB的参数

然后第二个是一个指针类型的参数,我们发现是不是,是GPIO_InitTypeDef指针类型的变量,那我们就继续右键去看找找个结构体

发现这个结构体中就有我们前面去用寄存器开发的一些内容,比如GPIO的模式,速度,输出类型,输入类型,都属于这个结构体中的成员参数了,上一个我们找到的GPIO初始化函数的一个参数,所以我们就知道,我们得需要配置这个结构体,然后在传入这个函数,那么接下来就是如何配置这个结构体

那我们就去定义这个结构变量在我们的LED.c初始化函数

然后我们就去给这个结构体变量中的成员去赋值,最后这个LED.c的GPIO初始化的代码就是,

​​​​​​​

复制代码
void LED_Init(){        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct = {0};	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;	GPIO_InitStruct.GPIO_Speed = GPIO_Medium_Speed;	GPIO_InitStruct.GPIO_OType = PIO_OType_PP;	GPIO_InitStruct.GPIO_PuPd = PIO_PuPd_NOPULL;        ·       GPIO_Init(GPIOB, GPIO_InitTypeDef* GPIO_InitStruct);        GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9)}

上面就是我们把这两个LED的IO口给配置好了,

相关推荐
可爱的鸡仔5 小时前
STM32------存储器映像
stm32·单片机·嵌入式硬件
清风6666665 小时前
基于单片机的自动换挡式高精度数字电压表设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
HXQ_晴天5 小时前
STM32中MX_TIM2_Init函数和HAL_TIM_Base_MspInit函数区别
stm32·单片机·嵌入式硬件
HXQ_晴天6 小时前
STM32实现呼吸灯效果原理
stm32·单片机·嵌入式硬件
清风6666666 小时前
基于单片机的机房环境监测系统设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
江苏学蠡信息科技有限公司6 小时前
STM32 USART框图简介
stm32·单片机·嵌入式硬件
青牛科技-Allen7 小时前
7个常见的DFM问题及其对PCB制造的影响
开发语言·单片机·制造·usb麦克风·立体声录音笔
点灯小铭8 小时前
基于单片机的PID温控风扇设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
feifeigo1238 小时前
基于STM32F103ZET6实现6路舵机控制
stm32·单片机·嵌入式硬件