一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法

        学习单片机,从学习GPIO口开始。

        我们在日常的编写程序时离不开IO口的配置,而IO口的学习是在stm32中比较基础,对初学者比较友好,又比较全面的一个基础功能,所以我们都是从GPIO口的学习开始接触stm32。

        首先我们要确定我们的学习方法,在stm32的学习中,我们是基于不同的芯片进行配置和使用,所以我们需要从三个方向来学习。

        什么是GPIO口?

        怎么去配置GPIO口?

        GPIO口的具体应用在哪里?

1.什么是GPIO?

IO口:I:input 输入          O:output 输出

作用:是芯片与外界做信息交换的唯一通道。

数量:以STM32F407VGT6为例,该芯片有100引脚,其中包括5组IO口

5组:GPIOA,GPIOB到E  每一组有0~15号(16个) 

GPIOA:0 1 2 3......15             16个    

GPIOB:0 1 2 3......15             16个

GPIOC:0 1 2 3......15             16个    

GPIOD:0 1 2 3......15             16个

GPIOE:0 1 2 3......15             16个    

  PA5表示:GPIOA组的5号IO口        

2.如何去配置IO 口

我们在学习嵌入式的过程中,需要通过数据手册来查看芯片框图,通过查看具体中文参考手册来查看具体IO口的功能和配置。

一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法_第1张图片                                                              GPIO控制器(STM32F101xx为例)

 初学者在尝试看图时,发现没有头绪。此时我们应该将图分割成不同的部分来看。

一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法_第2张图片

                                                                     GPIO口输入部分框图

1.保护二极管:防止击穿;

2.肖特基触发器:将输入的连续信号转换为离散信号。

我们通过该图不难看出:我们的信息or电平从IO口输入经过三条不同的道路到芯片内核进行处理。

其中我根据写程序的经验将这“三条路”分为三个输入方式:

通用输入:直接检测IO口的电平状态(如果需要读取外界给IO口的电平状态,就要用通用输入)

复用输入:从IO进来的数据信号要经过片上外设(串口控制器),再到核心。IO就要用复用输入模式

模拟输入:外界的模拟量(电压)通过IO口进入到ADC控制器,ADC控制器转换成数字量(模数转换)

一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法_第3张图片

                                                         GPIO口输出部分

我们通过输入部分总结出来的概念不难区分:

从内核直接读取或者写入的为通用输出部分,而从片上外设间接从内核读取或者写入的输出为复用输出。

一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法_第4张图片

                                                      GPIO通用输出(两条路径都可)

从而我们总结出:

通用输出:核心直接控制IO输出高低电平,就用通用输出模式

复用输出:核心将数据信号发送到片上外设,片上外设再通过IO口传送出去.IO口复用输出模式

在其他的芯片中我们还可能看到模拟输出,通过DAC片上外设进行数模转换,再将模拟数据通过IO口传输出去。

我们还看到输出相对于输入有输出类型的选择,包括推挽输出和开漏输出。

推挽输出:IO口可以输出高电平,也可以输出低电平。

开漏输出:IO口只能输出低电平。

至此,我们总结了GPIO口信息交换的几种方式,还可以通过更形象的图像来显示:

一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法_第5张图片

我们把IO口信息交换的具体工作方式理清楚了,我们也懂了有多少种输入输出方式。

通过这些,我们应该懂得如何使用IO口,而且要根据需求来确定选择哪一种模式。

那我们来看看IO口对应的寄存器有哪些

一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法_第6张图片

学会查看寄存器要从以下几点做起:

1.寄存器的名字

2.寄存器的功能

3.寄存器有多少位,几位控制一个IO

4.具体如何配置

 1.寄存器的名字

在具体编写程序时应写成对应IO口指向该寄存器,譬如:

PA5:GPIOA->CRL

PE0:GPIOE->CRL

 2.寄存器的功能

一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法_第7张图片

如图所示,在寄存器的下方有该寄存器的具体功能在哪一位;

在该寄存器下方主要配置IO口的具体的输入/输出模式和输出的速度,

譬如我要配置PA0的通用输入:GPIOA->MODE &= ~(3<<0);(直接清零即可)

譬如我要配置PC6的复用输出:GPIOC->MODE &=~(3<<24);

                                                   GPIOC->MODE |=(2<<24);

(上述代码使用了c语言的位运算的知识)

3.寄存器有多少位,几位控制一个IO

我们要清楚寄存器有几位,而且哪位配置哪些功能,其次,我们也要看清楚几位控制一个IO,如果是一位,我们可以直接对该位进行清零或者置一或者写值,如果是两位以上,我们需要先将其清零,再进行写值。

总结:回到我们最初的三个问题:

        什么是GPIO口?

       是芯片与外界做信息交换的唯一通道。

        怎么去配置GPIO口?

        根据自己的需求来确定信息交换的模式,再通过框图确定需要使用的寄存器进行配置

        GPIO口的具体应用在哪里?

        通用输入:直接检测IO口的电平状态(如果需要读取外界给IO口的电平状态,就要用通用输入模式。

        复用输入:从IO进来的数据信号要经过片上外设(串口控制器),再到核心。IO就要用复用输入模式。

        模拟输入:外界的模拟量(电压)通过IO口进入到ADC控制器,ADC控制器转换成数字量(模数转换)

        通用输出:核心直接控制IO输出高低电平,就用通用输出模式

        复用输出:核心将数据信号发送到片上外设,片上外设再通过IO口传送出去.IO口复用输出模式

        模拟输出:通过DAC片上外设进行数模转换,再将模拟数据通过IO口传输出去。

最后进行知识补充:位运算

如果需要某个变量的某一位变为0,其他位不改变

a = a & ~(1 << x);             // a &= ~(1<

公式:

如果需要某个变量的某一位变为1,其他位不改变

a = a | (1 << x);              //a |= (1<

公式:

如果对某两位写入某个值,其他位不变,

一定要先清零两位

再或上具体值

a = a & ~(3<

a = a | (n << x)           // a |= (n<

01     n:1

10     n:2

11     n:3

你可能感兴趣的:(嵌入式,stm32,单片机,学习,arm,c语言)