GPIO理论:(A15,B3,B4口先别选)
1.简介
容忍5V是可以输入5V电压,输出最大是3.3V(手册中带FT的,可以容忍5V)
2.基本结构
外设名称如GPIOA,16个引脚,从0到15。
在每个GPIO模块内,包含了寄存器和驱动器,内核通过APB2总线对寄存器读写,完成输出输入电平,寄存器(32位,因为32是32位)每一位对应一个引脚,低16位有用,高16位没有用到。
驱动器负责增大驱动能力
保护二极管:端口电压在0-3.3V
上半部分输入:可以控制上拉(高)下拉(低)电阻控制输入还是输出,有开关控制,上面打开是上拉,两个都断开是浮空输入模式。如果输入引脚啥也不接,处于浮空状态,容易受外界干扰,为了避免这个情况,就需要加上拉或者下拉,上拉会保证引脚的高电平,下拉会低电平。输入时候会有限幅电路限制幅度;施密特触发器(上下限阈值,只有高于上限或低于下限,才会变化,避免信号波动造成抖动);模拟输入在施密特后面。
下半部分输出:控制某一位:①先读寄存器,用按位与、或设置②位设置寄存器写0或1;在位清除寄存器写1会清除;③“位带”区域,读写地址的数据(与51相似)。输出控制右边的不太懂。
3.GPIO模式
在输入模式下,输出无效;输出模式下,输入有效;除了模拟输入时会关闭数字输入,其他都不会。
LED与蜂鸣器
LED长脚正极,短脚负极;内部较小的正极,大的负极;
蜂鸣器按驱动方式的原理可分为有源蜂鸣器(内含驱动线路),正负极接上直流电压即可持续发生,频率固定。还有无源蜂鸣器(外部驱动),需要控制器提供震荡脉冲;
LED分别是高电平和低电平驱动,多使用上面的(低,PA0是低电平),高电平弱驱动,低电平强驱动。
蜂鸣器上面是PNP,基极低电平,三极管导通;基极高电平,三极管截止。下面是NPN,与PNP相反,一般电路图就按图中的。
外设
所谓外设,是指将特定功能做成一个模块,然后给出控制端口,让处理器来控制。只要处理器给了足够的信息,外设就能完成特定的一组任务。
通过程序配置外设来完成我们想要的功能,
时钟
LED闪烁实验
1.搭建硬件电路
采用低电平点亮,没有接限流电阻。
2.建立项目
可以看视频
3.配置外设
RCC和GPIO两个外设,在library中可以找到库函数
RCC外设中常用692、693、694的函数,右键可以跳转到定义,查看函数参数和介绍。692的第一个参数是选择哪个外设,第二个是使能或失能。
GPIO外设中常用349、353-360。
操作:
1.使用RCC开启GPIO的时钟,在RCC外设库函数中选择函数,使能时钟,看搭载的线选择RCC的外设,调用这个函数后,跳转定义查看参数,LED中是GPIOA口,复制参数(实质还是配置寄存器,更方便)
2.使用GPIO_Init函数初始化GPIO(配置端口模式)
参数:一是选择哪个GPIO,二是参数的结构体。先定义结构体,在用.引出参数,跳转参数,(出现多个定义时候点击member)Ctrl+F搜索定义的位置。
补充:
3.使用输出/输入的函数控制GPIO口
第一个:端口设置高电平
二:低电平
三:前两个指定端口
四:选择外设,对16个端口进行写入操作
用第三个写的
4.LED闪烁
需要延时函数,用现成的,在项目下建立system文件夹,把代码放进去,在keil中添加组,添加system,往里面添加两个delay,再点击魔术棒,选C/C++,添加新文件夹的头文件路径,有三个延时函数,用定时器实现的;还要在C文件上面写#include"Delay.h"
o3
5.LED流水灯
直接复制工程,修改keil文件就可以
需要修改代码,配置8个端口,进行按位或GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
或者是同时选择16个端口。低电平点亮要取反
蜂鸣器
I/O控制级随便选一个I/O口,但是A15\B3\B4先不要选,这三个口默认是JTAG的调试端口,如果要用做普通端口,还需要再进行配置,还是推挽输出,改成B12
GPIO函数
GPIO_SetBits(bit:位),高电平
GPIO_ResetBits 低电平
GPIO_WriteBit 第三个参数用于选择高电平还是低电平。
GPIO_Write 对整个GPIO16个端口控制,只能用16进制来写,0000 0000 0000 0001,最低位是GPIO0,依次往上