1,GPIO : STM32 可控制的引脚,STM32 芯片 的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 STM32芯片的 GPIO 被分成很多组,每组有 16个引脚,所有的 GPIO引脚都有基本的输入输出功能。
最基本的输出功能是由 STM32 控制引脚输出高、低电平,实现开关控制,如把 GPIO 引脚接入到LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以 通过继电器或三极管控制外部大功率电路的通断。
最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低 区分按键是否被按下。
2,GPIO分析:
1区保护二极管及上、下拉电阻:引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入
2区P-MOS管和 N-MOS管:GPIO 引脚线路经过两个保护二极管后,向上流向“输入模式”结构,向下流向“输出 模式”结构
3区输出数据寄存器
4区复用功能输出
5区输入数据寄存器
6区复用功能输入
7区模拟输入输出
时钟分析:四个时钟源:HSE(high speed exit)高速外,高速内,低速外,低速内。内部由RC震荡产生,不稳定,外部由晶振产生,比较稳定。晶振时钟经过分频倍频后送到各外设和核内
3,GPIO的工作模式:
大致三类:1输入模式(模拟/浮空/上拉/下拉)
2输出模式(推挽/开漏)
3复用功能(推挽/开漏)
4,使用寄存器点亮LED灯:
原理图:
红色灯对应的端口为PB5,绿色对应的端口为PB0,蓝色对应的端口为PB1。
当端口为低电平的时候,灯被点亮。查阅手册可知,GPIOB的存储器映像为0X40010C00-0X40010FFF;而端口对应的输出数据寄存器的偏移量为0Ch。
配置寄存器(使用了c语言位移操作):
代码:*(unsigned int *)0x40010C0C &=~(1<<0);
配置低端口寄存器:我们还先配置端口模式和功能。查阅手册可知,由CNF0和MODE0分别控制功能和模式,我们需要相应地配置,以用于GPIO口的使用。
代码:
(unsigned int )0x40010C00 |=(1<<(4*0));
配置时钟:先启动时钟才能正常运行,由于GPIOB是APB2总线上的外设,所以我们需要打开APB2中GPIOB对应的时钟
打开对应端口的第三个寄存器
查阅手册,APB2的RCC的起始地址为0x40021000-0x400213FF。
代码:*(unsigned int *)0x40021018 |=(1<<3);
寄存器点亮LED总程序:
int main(void)
{
//配置时钟
(unsigned int )0x40021018 |=(1<<3);
//配置I/O口模式
(unsigned int )0x40010C00 |=(1<<(40));
//控制ODR寄存器
(unsigned int *)0x40010C0C &=~(1<<0);
}
5,外设都有对应的C文件和H文件。H文件是C文件的实现声明,调用外设必须将C H文件都添加到工程中。其中conf.h是一个包含所有H文件的文件。比如点灯要用到:启动文件,cm3核文件,gpio端口文件,rcc时钟配置文件,32f10x.c文件
