stm32 GPIO简单介绍及初始化配置(库函数)

前言:

相信,大部分查找GPIO的人,都是刚刚接触STM32的人,而刚接触STM32的人,大部分是从51上来的人,所以我会由浅入深,从51和STM32的区别入手,通过对比这两个处理器的配置方法,来跟大家慢慢讲解(学知识可不能急于求成)。博主以stm32f1为主控芯片,以下均简称为stm32。

首先,上一张我的理解图(画不好。。。但能看),给个形象的概念

stm32 GPIO简单介绍及初始化配置(库函数)_第1张图片

一、讲图之前,先给大家一个stm32的概念:“时钟概念”

1.  STM32的时钟是什么?

stm32的时钟是由内部或外部振荡器产生的“频率”,而被人们形象的称为“系统时钟”。最大为72MHz换成周期T为:1/72MHz≈13.9ns

2.  为什么要用时钟?

因为耗电量,stm32功能强大,能做很多事,但与之同时带来的消耗也越严重,当stm32不引入时钟时钟的话,就像51一样外设全开,如果大家是使用电池的话,就会感到电量的珍贵(开机几分钟就没电了。。。),所以厂家(st公司)为了解决这个问题,引入了“时钟概念”,即使用哪个外设就给哪个外设时钟(频率),不使用的就关掉(不震荡)。此做法大大降低了功耗,续航持久。

二、接下来说说片内外设

1、 什么是片内外设?

我来个比喻吧,stm32是一个工厂,内部CPU是老板,而外设就是帮助CPU干活的工人。老板(CPU)想做某件事,于是就命令(指令)有这个能力的工人(外设)去做这件事,并给予研究经费(时钟频率)。工人拿了经费,就按照老板的命令来执行工作。这就是CPU和外设的关系(不可逆关系。。。)

另外,片内外设也可以等同于一块内部芯片,它有内部寄存器,CPU给出指令,片内外设得到指令,并配置其内部寄存器,以达到功能的实现。

三、初始化GPIO,点亮LED灯

外设的功能都是完全不同的,但是初始化都是大同小异,学会了GPIO这最简单的外设初始化,那么后面就很好办了。点灯是所有学单片机的人都应该学会的第一项技能,这样子才算入门。51单片机的点灯是,通过控制寄存器将片外引脚(我们称之为IO口)拉低拉高,输出高低电平,以控制LED亮灭。

51过程是这样子:单片机给指令->控制寄存器->给IO口电平->控制LED亮灭

而stm32的点灯则是,通过使能外设GPIO时钟,发出指令给外设GPIO,外设GPIO收到指令后,着手配置自己的寄存器,然后给IO口模式,让其实现各种功能(我说过STM32功能强大吧?IO口的配置也是有很多知识的,之后会介绍)。

stm32过程是这样子(参照上图):CPU给指令->GPIO收到指令->配置内部寄存器->配置IO口模式(注意是模式)->控制LED亮灭。

贴上代码:

void led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;                    //定义初始化结构体
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA时钟
	
	GPIO_InitStruct.GPIO_Mode    = GPIO_Mode_Out_PP;     //配置模式
	GPIO_InitStruct.GPIO_Pin     = GPIO_Pin_0;           //配置哪个IO口
	GPIO_InitStruct.GPIO_Speed   = GPIO_Speed_50MHz;     //配置IO口速度,仅输出有效
	GPIO_Init(GPIOA,&GPIO_InitStruct);                   //初始化GPIOA的参数为以上结构体
}
int main(void)
{
	led_init(void);				//调用LED初始化函数
	GPIO_ResetBits(GPIOA,GPIO_Pin_0)	//拉低电平
	GPIO_SetBits(GPIOA,GPIO_Pin_0)	 	//拉高电平
	while(1);				//死循环(停止程序)
}

步骤:

1、首先必须先使能时钟,时钟总线可参考:中文参考手册P28页,这一页是时钟总线上挂载的片内外设,我就不上图了。时钟使能函数在官方库函数的对应头文件里有,比如找RCC函数则应该在“stm32f10x_rcc.h”里(拉到最后面void开头的那些函数)
2、定义初始化结构体,结构体是外设的初始化参数
3、初始化结构体中的参数,复制并粘贴结构体然后按“.”这个符号,会出来个框,框内就是外设的参数。

3、调用外设初始化函数,初始化函数也是在官方库函数的对应头文件里。比如找GPIO函数则应该在“stm32f10x_gpio.h”里。符号“&”是取地址符,意思是:初始化的参数地址为。。。(然后MDK就寻找结构体的位置,以找到结构体的参数)。

4、初始化完成后,在主函数中调用初始化函数,再调用官方库函数,即可进行相应的操作。(调用的官方库函数说明,请在“STM32固件库使用手册”中查看,博主不多作说明)

小知识:

首先呢,初始化函数,都可以在“STM32固件库使用手册”中查到使用说明(我就不提供连接了);其次,点击函数并右键,会出现“go to definition of'函数名'”(或者按F12),接着画面会跳转到官方库的 .c 文件,那里有很详细的说明(说明中标明有哪些函数需要配置),还有,可以自定义库函数,具体我后面(可能会写),网上有攻略写得比我好。

以上。

GPIO八种模式


flag(今后会更新的,正文是大概框架): 1、GPIO寄存器简单介绍及配置

你可能感兴趣的:(stm32)