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

然后再看一下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口给配置好了,