三、GPIO通用输入输出口

一、原理

本节课第一部分总共有三个程序,第一个是LED闪烁,第二个是LED流水灯,第三个是蜂鸣器。

带FT(FiveTolerate)的,就是可以容忍5V的端口。

在STM32中,所有的GPIO都是挂载在APB2外设总线上的。

其中GPIO外设的名称是按照GPIOA、GPIOB、GPIOC等等这样来命名的。每个GPIO外设,总共有16的引脚,编号是从0到15。

GPIOA的第0号引脚,我们一般把它称作PA0,接着第1号就是PA1,然后PA2,以此类推,一直到PA15。GPIOB也是一样,从PB0,一直到PB15,这样来命名的。

在每个GPIO模块内,主要包含了寄存器和驱动器这些东西。

寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了。

这个寄存器的每一位对应一个引脚。其中输出寄存器写1,对应的引脚就会输出高电平,写0,就输出低电平;输入寄存器读取为1,就证明对应的端口目前是高电平,读取为0,就是低电平。

因为STM32是32位的单片机,所以STM32内部的寄存器都是32位的。但这个端口只有16位,所以这个寄存器只有低16位对应的有端口,高16位是没有用到的。

这个驱动器是用来增加信号的驱动能力的,寄存器只负责存储数据,如果要进行点灯这样的操作的话,还是需要驱动器来负责增大驱动能力的。

这些就是GPIO的整体基本结构了。

GPIO中每一位的具体电路结构:

基本只有使用ADC时才用的到。

PMOS无效就是开漏输出,都有效就是推挽输出

GPIO的输出速度可以限制输出引脚的最大翻转速度,这个设计出来是为了低功耗和稳定性的,我们一般要求不高的时候一般配置成50MHZ就可以了,输入模式下是没用的。

二、GPIO初始化

3-2

开头有快速新建工程的可行流程,需要看看。

操作STM32的GPIO总共需要3个步骤:

1.使用RCC开启GPIO的时钟;

2.使用GPIO_Init函数初始化GPIO;

3.使用输入或者输出的函数控制GPIO口。

总共涉及到了RCC和GPIO两个外设。

GPIO八种工作模式:

AIN(Analog IN)是模拟输入;IN FLOATING是浮空输入;IPD(In Pull Down)是下拉输入;IPU(In Pull Up)是上拉输入;Out_OD(Out Open Drain)是开漏输出;Out PP(Out Push Pull)是推挽输出;AF_OD是复用开漏输出;AF_PP是复用推挽输出。

GPIO初始化

21:00在工程中添加现有的包含两个文件的文件夹。

按位或

使用库函数的方法:

1.先打开.h文件的最后,看一下都有哪些函数,然后再右键转到定义,查看一下函数和参数的用法

2.看库函数用户手册

3.百度搜索看别人的代码

三、GPIO输入输出模式

3-3

左边两种接法必须要求引脚是上拉或下拉输入的模式;

右边两种接法可以允许引脚是浮空输入的模式,因为已经外置了上拉电阻和下拉电阻。

四、C语言部分知识

右边是C语言stdint.h文件和ST对这些变量的重命名。右边加个t表示这是用typedef重新命名的变量类型。

因为左边这个名字比较长,而且这个int的位数根据系统的不同还有可能不一样。

u8那一列是库函数老的类型,是为了传统的目的而保留的。就是为了兼容老版本

宏定义和typedef的区别:

1.宏定义的新名字在左边,typedef的新名字在右边;

2.宏定义不需要分号,typedef后面必须加分号;

3.宏定义任何名字都可以换,而typedef只能专门给变量类型换名字。

所以宏定义的改名范围要更宽一些,只不过对于变量类型重命名而言,使用typedef更加安全。因为宏定义只是无脑改名,不管你对不对,而typedef会对命名进行检查,如果不是变量类型的名字,那是不行的。

数组只能组合相同类型的数据。

结构体也是一种组合数据类型,它的作用就是组合不同的数据类型。

为什么要加一种结构体指针的引用方式呢?这是因为,结构体是一种组合数据类型,在函数之间的数据传递中,通常用的是地址传递而不是值传递。

结构体变量的引用:

这里的struct包括花括号在内的,是一个结构体的数据类型。然后是typedef,将结构体换了个名字,叫StructName_t。

五、按键控制LED和光敏控制蜂鸣器

3-4

3-4 02:20可先建好文件夹、添加组和头文件路径然后再建.c和.h文件。

LED.c用来存放驱动程序的主体代码;

LED.h用来存放这个驱动程序可以对外提供的函数或变量的声明。

就近原则:在函数里,若变量名冲突,优先使用本函数定义的局部变量。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值