01-标准库开发-STM32定时器

一、GPIO介绍

前言

该笔记硬件为STM32F103RCT6,使用标准库函数进行开发。

1.1 GPIO口的介绍

在STM32等微控制器的GPIO(通用输入输出)配置中,这些模式用于定义GPIO引脚的电气特性和功能。每种模式都对应着不同的应用场景和电路要求。下面是对您列出的各种模式的解释:

  1. GPIO_Mode_AIN (0x0):
    • 模拟输入模式(Analog Input)。在此模式下,GPIO引脚被配置为模拟信号输入,用于读取外部模拟信号(如温度传感器的输出)。该模式关闭了引脚的数字输出功能,使其仅作为模拟信号路径使用。
  2. GPIO_Mode_IN_FLOATING (0x04):
    • 浮空输入模式(Floating Input)。此模式下,GPIO引脚既不上拉也不下拉,其电平状态完全由外部电路决定。这种模式适用于需要检测外部高阻态信号的情况,但也可能因为外部噪声而导致引脚电平不稳定。
  3. GPIO_Mode_IPD (0x28):
    • 下拉输入模式(Input Pull-Down)。此模式下,GPIO引脚通过一个内部电阻下拉到地,即使外部没有连接,引脚也保持低电平。这有助于在外部信号不确定时,保持引脚状态的稳定性。
  4. GPIO_Mode_IPU (0x48):
    • 上拉输入模式(Input Pull-Up)。与下拉输入相反,此模式下GPIO引脚通过一个内部电阻上拉到电源(通常是3.3V或5V),即使外部没有连接,引脚也保持高电平。这同样有助于在外部信号不确定时,保持引脚状态的稳定性。
  5. GPIO_Mode_Out_OD (0x14):
    • 开漏输出模式(Open-Drain Output)。此模式下,GPIO引脚可以作为开漏输出使用,允许外部电路通过该引脚控制一个共阳极的LED或其他设备。由于引脚只能拉低电平(通过接地),因此需要外部上拉电阻才能输出高电平。
  6. GPIO_Mode_Out_PP (0x10):
    • 推挽输出模式(Push-Pull Output)。这是最常用的输出模式,引脚可以直接输出高电平或低电平,驱动能力强,适用于直接驱动LED、继电器等负载。
  7. GPIO_Mode_AF_OD (0x1C):
    • 复用开漏输出模式(Alternate Function Open-Drain Output)。此模式下,GPIO引脚被配置为特定的复用功能(如SPI、I2C等),并以开漏方式输出。这允许GPIO引脚在执行这些特殊功能时,与外部电路灵活连接。
  8. 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 主要功能位

  1. ENABLE(位0):
    • 功能:使能SysTick计数器。当此位被设置为1时,SysTick计数器开始递减计数;当此位被设置为0时,计数器停止工作。
    • 使用方法:在需要启动SysTick定时器时,将此位设置为1;在不需要时,将其设置为0以节省资源。
  2. TICKINT(位1):
    • 功能:使能SysTick中断。当此位被设置为1时,如果SysTick计数器递减到0,将产生一个SysTick中断;如果此位被设置为0,则即使计数器递减到0也不会产生中断。
    • 使用方法:在需要SysTick定时器在计数到0时产生中断时,将此位设置为1;如果不需要中断,则将其设置为0。
  3. CLKSOURCE(位2):
    • 功能:选择SysTick定时器的时钟源。当此位被设置为0时,SysTick使用外部参考时钟;当此位被设置为1时,SysTick使用内核时钟(通常是AHB时钟的某个分频值)。
    • 使用方法:根据具体的应用需求选择合适的时钟源。在大多数情况下,使用内核时钟并配置合适的分频值以获得所需的计时精度。
  4. 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);
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏柠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值