一、GPIO介绍
前言
该笔记硬件为STM32F103RCT6,使用标准库函数进行开发。
1.1 GPIO口的介绍
在STM32等微控制器的GPIO(通用输入输出)配置中,这些模式用于定义GPIO引脚的电气特性和功能。每种模式都对应着不同的应用场景和电路要求。下面是对您列出的各种模式的解释:
- GPIO_Mode_AIN (0x0):
- 模拟输入模式(Analog Input)。在此模式下,GPIO引脚被配置为模拟信号输入,用于读取外部模拟信号(如温度传感器的输出)。该模式关闭了引脚的数字输出功能,使其仅作为模拟信号路径使用。
- GPIO_Mode_IN_FLOATING (0x04):
- 浮空输入模式(Floating Input)。此模式下,GPIO引脚既不上拉也不下拉,其电平状态完全由外部电路决定。这种模式适用于需要检测外部高阻态信号的情况,但也可能因为外部噪声而导致引脚电平不稳定。
- GPIO_Mode_IPD (0x28):
- 下拉输入模式(Input Pull-Down)。此模式下,GPIO引脚通过一个内部电阻下拉到地,即使外部没有连接,引脚也保持低电平。这有助于在外部信号不确定时,保持引脚状态的稳定性。
- GPIO_Mode_IPU (0x48):
- 上拉输入模式(Input Pull-Up)。与下拉输入相反,此模式下GPIO引脚通过一个内部电阻上拉到电源(通常是3.3V或5V),即使外部没有连接,引脚也保持高电平。这同样有助于在外部信号不确定时,保持引脚状态的稳定性。
- GPIO_Mode_Out_OD (0x14):
- 开漏输出模式(Open-Drain Output)。此模式下,GPIO引脚可以作为开漏输出使用,允许外部电路通过该引脚控制一个共阳极的LED或其他设备。由于引脚只能拉低电平(通过接地),因此需要外部上拉电阻才能输出高电平。
- GPIO_Mode_Out_PP (0x10):
- 推挽输出模式(Push-Pull Output)。这是最常用的输出模式,引脚可以直接输出高电平或低电平,驱动能力强,适用于直接驱动LED、继电器等负载。
- GPIO_Mode_AF_OD (0x1C):
- 复用开漏输出模式(Alternate Function Open-Drain Output)。此模式下,GPIO引脚被配置为特定的复用功能(如SPI、I2C等),并以开漏方式输出。这允许GPIO引脚在执行这些特殊功能时,与外部电路灵活连接。
- GPIO_Mode_AF_PP (0x18):
- 复用推挽输出模式(Alternate Function Push-Pull Output)。与复用开漏输出类似,但在此模式下,GPIO引脚以推挽方式输出其复用功能的信号,驱动能力强,适用于需要较强驱动能力的复用功能场景。
这些模式的选择取决于您的具体应用场景和电路设计需求。
1.2 点亮LED灯
硬件图如图:

1.3 实现步骤
1、使能时钟
2、配置GPIO
二、时钟树STM32时钟系统
2.1 晶振
2.2 SysTick
是一个24位的系统定时器,并且向下计数,计数到0之后会更新计数。
SysTick是一个24位的递减计数器,它可以自动重载并在计数到0时产生中断。这使得SysTick非常适合用于需要精确时间控制的应用场景,如操作系统的时间片轮转、精确延时等。SysTick定时器使用内部时钟源或外部时钟源,通过配置控制与状态寄存器(STK_CTRL)来实现不同的工作模式。
2.3 主要功能位
- ENABLE(位0):
- 功能:使能SysTick计数器。当此位被设置为1时,SysTick计数器开始递减计数;当此位被设置为0时,计数器停止工作。
- 使用方法:在需要启动SysTick定时器时,将此位设置为1;在不需要时,将其设置为0以节省资源。
- TICKINT(位1):
- 功能:使能SysTick中断。当此位被设置为1时,如果SysTick计数器递减到0,将产生一个SysTick中断;如果此位被设置为0,则即使计数器递减到0也不会产生中断。
- 使用方法:在需要SysTick定时器在计数到0时产生中断时,将此位设置为1;如果不需要中断,则将其设置为0。
- CLKSOURCE(位2):
- 功能:选择SysTick定时器的时钟源。当此位被设置为0时,SysTick使用外部参考时钟;当此位被设置为1时,SysTick使用内核时钟(通常是AHB时钟的某个分频值)。
- 使用方法:根据具体的应用需求选择合适的时钟源。在大多数情况下,使用内核时钟并配置合适的分频值以获得所需的计时精度。
- COUNTFLAG(位16):
- 功能:这是一个只读的状态位,用于指示SysTick计数器是否已经递减到0。当SysTick计数器从非零值递减到0时,此位被自动设置为1;当此位被读取后,它会被自动清零。
- 使用方法:在中断服务例程或延时函数中,可以通过检查此位来判断SysTick计数器是否已经递减到0,从而进行相应的处理。
三、TIM定时器
计算公式 =
计数器的计数频率=72*10^6 /分频系数(PSC)
频率 = 计数频率/ ARR(重装载值)
所以:定时器频率 = 时钟频率/分频系数(PSC - 1) / 自动重装载值(ARR - 1)
3.1 定时器中断
定时器中断,我们的步骤一般为,使能TIMx.
设置内部时钟
配置定时器中断(TIM_ITConfig)
启动定时器(TIM_Cmd)
由图我们可以知道:
APB1总线负责连接低速外设,如DA(数字模拟转换器)、USB、SPI、I2C、CAN、串口(USART 2、3、4、5)以及普通定时器(TIM2至TIM5等)。而APB2总线则通常负责连接高速外设,如AD(模拟数字转换器)、I/O端口、高级定时器(TIM1和TIM8等)以及串口1(USART1)

3.1.1 示例代码:
void Timer_Init(u16 arr,u16 psc)
{
// 时基结构体
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
// NVIC初始化结构体
NVIC_InitTypeDef NVIC_InitStruct;
// 使能APB1外设
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

893

被折叠的 条评论
为什么被折叠?



