STM32F407中有基本定时器,通用寄存器,高级寄存器。其中TIM6与TIM7是基本定时器。
基本定时器框图
在基本定时器中,内部时钟(CK_INT)经过控制器到达预分频器(PSC),经过分频后进入计数器(CNT COUNTER)。当计数值与自动重装寄存器的值一样,触发自重重装重新计数,同时可以触发中断 、DMA输出与事件。
设置定时时间
基本定时器是16位的定时器。预分频的值是16位,自动重装寄存器也是16位,也就是说这两个寄存器的最大值位65535。在STM32F407中,TIM6与TIM7都挂在APB1的Timer Clocks上面,它们的频率最高可以达到84MHz。当我们设置预分频值时,要注意预分频值不能超过65535。
预分频寄存器
分频后的频率 = CK_PSC/ (PSC+1) ,该值为计数的步进值。分频后的频率的倒数,也就是每计一次数需要的时间。time = 1/ 分频后的频率
自动重载寄存器
定时间 = (1/ 分频后的频率 )* (自动重载寄存器-1)
也就是说
定时时间 = (预分频寄存器+1)* (自动重载寄存器+1)/ 时钟频率
如果需要定时 1s
84MHz = 84000000Hz
1s = 1/ 1Hz = (41999+1)* (1999+1)/ 84000000 Hz
STM32CubeMx配置基本定时器
基本设置
开启中断服务函数
配置中断服务函数优先级
HAL库中基本定时器初始化
配置完程STM32CudeMX,自动生成tim.c,里面有对基本定时器初始化的函数。
HAL库中实现基本定时器中断服务过程
基本定时器完成后,会触发中断服务函数(在STM32CudeMX中中有配置中断函数),并且调用HAL_TIM_IRQHandler(&htim6)函数
为了使用定时器的功能,HAL_TIM_IRQHandler函数里除了有基本定时器功能,还有通用定时器与高级定时器其他功能的回调。而基本定时器功能使用HAL_TIM_PeriodElapsedCallback,该函数也是一个弱函数,我们需要对该函数进行重写。
下面对该函数进行重写,当基本定时器达到计数值时,对LED1进行翻转,也就是每1s,LED1翻转一次。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM6)
{
LED1_Toggle();
}
}
当我们编译下载程序进STM32F407时,发现LED1没有翻转,原因是MX_TIM6_Init函数只是对基本定时器初始化,但是没有开启定时器。
注:我们需要在需要调用HAL_TIM_Base_Start_IT(&htim6),开启基本定时器TIM6 。
关键字:STM32 基本定时器 内部时钟
引用地址:
STM32基础6--基本定时器
推荐阅读最新更新时间:2024-11-10 10:39
006_STM32程序移植之_SYN6288语音模块
1. 测试环境:STM32C8T6 2. 测试模块:SYN6288语音模块 3. 测试接口: SYN6288语音模块: VCC------------------3.3V GND------------------GND TXD-----------------PB11 RXD-----------------PB10 BY------------------PB1 2. 串口使用串口一,波特率9600 单片机引脚------------CH340引脚 VCC--------------------VCC GND-------------------GND PA9--------------------RXD PA10------
[单片机]
STM32 TImer几种模式
输入捕获模式 库函数例程位置: STM32F10x_StdPeriph_Lib_V3.3.0ProjectSTM32F10x_StdPeriph_ExamplesTIMInputCapture 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。 在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。 PWM输入模式 库函数例程位置 :STM32F10x_StdPeriph_Lib_V3.3.0ProjectSTM32
[单片机]
【STM32 Cotex-M3处理器系列编程】外部按键中断
#include stm32f10x.h unsigned int TimingDelay; void Delay(unsigned int x) { TimingDelay=x; while(TimingDelay--); } void EXTI9_5_IRQHandler(void) //中断处理函数 { unsigned int tt; tt=6553500; if(EXTI_GetITStatus(EXTI_Line5)!=RESET) { GPIO_SetBits(GPIOC, GPIO_Pin_7); while(tt--); GPIO_ResetBits(GPIO
[单片机]
基于STM32神舟系列开发板的串口通信源码
#include stm32f10x.h #include stm32f10x_usart.h void RCC_Config(void); void GPIO_Config(void); void USART_Config(void); void Put_String(u8 *p); int main() { RCC_Config();//配置时钟 GPIO_Config();//配置输入输出 USART_Config();//配置发送接收 //GPIO.Pin选择待设置的 GPIO 管脚,使用操作符 | 可以一次选中多个管脚。 Put_String( 请发送数据_ ); while(1
[单片机]
STM32的IO口的8种配置(GPIO)
1 /` STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出) ① 浮空输入_IN_FLOATING ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ 模拟输入_AIN ⑤ 开漏输出_OUT_OD ⑥ 推挽输出_OUT_PP ⑦ 复用功能的推挽输出_AF_PP ⑧ 复用功能的开漏输出_AF_OD 1.1I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出
[单片机]
STM32在IAR指定文件(函数)首地址
有时候,我们会遇到一些情况,要把某些数组定义在某个固定的区域,或者指定某个函数的首地址。 例如,有两个文件,main.c和sendpc.c,要把sendpc.c放在0x08001200位置,把main.c放在0x08000800位置。 以IAR540为例,在stm32f10x_flash.icf文件里,加入以下两句: place at address mem:0x08000800 { section .text object sendpc.o }; place at address mem:0x08001200 { section .text object main.o }; 编译后可在map文件中查看
[单片机]
STM32F429 >> 14. TIM_(一)_基本定时器
将定时器和GPIO 结合起来使用可以实现非常丰富的功能,例如测量输入信号的脉冲宽度、产生输出波形、产生PWM 控制电机状态等。 STM32F42xxx 系列控制器有 2 个高级控制定时器、10 个通用定时器和 2 个基本定时器,还有 2 个看门狗定时器。 控制器上所有定时器都是彼此独立的,不共享任何资源。 其中最大定时器时钟可通过 RCC_DCKCFGR 寄存器配置为 90MHz 或者 180MHz。 就功能上来说通用定时器包含所有基本定时器功能,而高级控制定时器包含通用定时器所有功能。 基本定时器 基本定时器主要两个功能: 第一就是基本定时功能,生成时基; 第二就是专门用于驱动数模转换器(DAC)。 基本定时器
[单片机]
基于STM32芯片和TFT-LCD的便携式心电图仪设计
便携式心电图设备的出现使心电信号能够在更多场合进行采集,它既可以实现可移动化,又可以实时的对心电信号进行分析。通过内置大容量存储器件能够对患者进行长时间的实时监护,并记录患者的心电数据,通过USB接口与PC机进行数据传输,以提交到专业医疗机构做进一步分析和诊断。 1、系统整体设计概述 系统原理框图可以用图1表示。心电信号由电极获取,送入心电采集电路,经前置放大、主放大、高低通滤波、电平抬升后,得到符合要求的心电信号,并送入到STM32的ADC进行AD转换。为了更好地抑制干扰信号,在电路中还引入了右腿驱动电路。系统控制芯片采用STM32,TFT-LCD的触摸功能加上少量按键可以建立良好的人机交互环境,可以通过LCD实时显示和回放
[单片机]