STM32学习笔记03-GPIO外设,点亮LED和按键输入
又是熟悉的配方,学单片机从点灯开始!
从图中可以看到,GPIOx是挂在APB2总线上的,APB2和APB1总线上还有其他的一些外设,而APB2受到RCC的控制。
GPIO引脚可以配置成8种模式,上面的框图解释了IO口8种模式的实现原理。
输入部分:
1、在输入驱动器虚线框中,有两个开关,都关闭时为浮空输入,上开关打开为上拉输入,下开关打开为下拉输入。
2、TTL肖特基触发器部分,可以将输入的模拟信号转为数字信号,一路进入输入数据寄存器,这时候代码中读取引脚状态就是读取数据寄存器中的值,还有一路通向复用功能输入用于其他功能,例如中断。
3、同时TTL肖特基触发右边还有一条线直接通向模拟输入,用于直接读取模拟信号,例如AD转换。
输出部分:
1、首先在位设置\清楚寄存器中写入引脚高低电平数据,随后数据写到输出数据寄存器中,当然也可以直接读写输出数据寄存器,输出数据寄存器通过一个选择器,进入到输出控制中,输出控制根据配置决定两个mos管的状态,上管和下管都使用为推挽输出,只使用下管为开漏输出。
2、另外还有一个复用功能输出,当控制选择器选择这一路的时候,由片上外设(例如PWM)直接接管输出控制,同时根据MOS管的状态,又可以分为推挽式复用功能和开漏复用功能。
编程思路:
点灯:开启RCC时钟--->配置GPIO模式--->写 位设置\清楚寄存器--->实现对GPIO的高低电平控制。
#include "stm32f10x.h" int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能时钟 GPIO_InitTypeDef GPIO_InitStruct;//声明GPIO初始化结构体变量 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出模式 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;//引脚 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;//响应速度 GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化端口 GPIO_SetBits(GPIOA,GPIO_Pin_0);//设置PA0引脚为高电平 while(1) { } }
按键:开启RCC时钟--->配置GPIO模式--->读取输入寄存器--->实现对按键操作的读取。
#include "stm32f10x.h" int main(void) { uint8_t key; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能时钟 GPIO_InitTypeDef GPIO_InitStruct;//声明GPIO初始化结构体变量 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//上拉输入模式 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;//引脚 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;//响应速度 GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化端口 while(1) { key=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);//读取PA0引脚电平 } }
知识点:
1、在stm3210x_rcc_.h中包含了RCC时钟相关的操作函数。
2、在stm3210x_gpio.h中包含的GPIO操作相关的函数。
3、在函数名、参数类型名上F12跳转到定义可以查看函数的使用说明、参数的取值说明。
4、STM32标准库大部分的外设使用流程都是:开启RCC时钟、初始化相应配置、使用外设,根据此流程举一反三可以快速学会其他外设如何使用。
5、STM32标准库大部分外设的初始化函数都带有“Init”字样,比较好辨认,初始化大多也使用结构体变量。