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”字样,比较好辨认,初始化大多也使用结构体变量。

posted @ 2023-07-23 13:19  Lin_zzZ  阅读(45)  评论(0编辑  收藏  举报