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

前言:

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

首先,上一张个人理解图(画很差。。。但能看),给个形象的概念函数

1、讲图以前,先给你们一个stm32的概念:“时钟概念”

1.  STM32的时钟是什么?

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

2.  为何要用时钟?

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

2、接下来讲说片内外设

一、 什么是片内外设?

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

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

3、初始化GPIO,点亮LED灯

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

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

而stm32的点灯则是,经过使能外设GPIO时钟,发出指令给外设GPIO,外设GPIO收到指令后,着手配置本身的寄存器,而后给IO口模式,让其实现各类功能(我说过STM32功能强大吧?IO口的配置也是有不少知识的,以后会介绍)。it

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

贴上代码:

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);				//死循环(中止程序)
}

步骤:

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

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

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

小知识:

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

以上。

GPIO八种模式


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