济南金融行业网站开发,万网 网站建设方案书范文,企业网络的构建与实施,广州建设工程网目录 概述
1 STM32定时器介绍
1.1 认识通用定时器
1.2 通用定时器的特征
1.3 递增计数模式
1.4 时钟选择
2 STM32Cube配置定时器时钟
2.1 配置定时器参数
2.2 配置定时器时钟
3 STM32H7定时器使用
3.1 认识定时器的数据结构
3.2 计数功能实现
4 测试案例
4.1 代码…目录 概述
1 STM32定时器介绍
1.1 认识通用定时器
1.2 通用定时器的特征
1.3 递增计数模式
1.4 时钟选择
2 STM32Cube配置定时器时钟
2.1 配置定时器参数
2.2 配置定时器时钟
3 STM32H7定时器使用
3.1 认识定时器的数据结构
3.2 计数功能实现
4 测试案例
4.1 代码实现
4.2 验证 概述
本文主要介绍STM32H7通用性定时器计数功能的用法笔者以TIM2定时器为例介绍如何通过配置参数实现定制化时钟的需求。
1 STM32定时器介绍
1.1 认识通用定时器
STM32H7的通用定时器包括TIM2/TIM3/TIM4/TIM5通用定时器包含一个 16 位或 32 位自动重载计数器该计数器由可编程预分频器驱动。它们可用于多种用途包括测量输入信号的脉冲宽度 输入捕获或生成输出波形 输出比较和 PWM。使用定时器预分频器和 RCC 时钟控制器预分频器可将脉冲宽度和波形周期从几微秒调制到几毫秒。
1.2 通用定时器的特征
通用 TIMx 定时器具有以下特性 1 16 位 TIM3 和 TIM4或 32 位 TIM2 和 TIM5递增、递减和递增/递减自动重载计数器
216 位可编程预分频器用于对计数器时钟频率进行分频可在运行时修改分频系数介于 1 到 65535 之间。
3多达 4 个独立通道可用于 – 输入捕获 – 输出比较 – PWM 生成边沿和中心对齐模式 – 单脉冲模式输出
4使用外部信号控制定时器且可实现多个定时器互连的同步电路。
5发生如下事件时生成中断/DMA 请求 – 更新计数器上溢/下溢、计数器初始化通过软件或内部/外部触发 – 触发事件计数器启动、停止、初始化或通过内部/外部触发计数 – 输入捕获 – 输出比较
6支持定位用增量正交编码器和霍尔传感器电路
7触发输入用作外部时钟或逐周期电流管理 1.3 递增计数模式
在递增计数模式下计数器从 0 计数到自动重载值 TIMx_ARR 寄存器的内容然后重新从 0 开始计数并生成计数器上溢事件。每次发生计数器上溢时会生成更新事件或将 TIMx_EGR 寄存器中的 UG 位置 1通过软件或使用从模式控制器也可以生成更新事件。
通过软件将 TIMx_CR1 寄存器中的 UDIS 位置 1 可禁止 UEV 事件。这可避免向预装载寄存器写入新值时更新影子寄存器。在 UDIS 位写入 0 之前不会产生任何更新事件。不过计数器和预分频器计数器都会重新从 0 开始计数而预分频比保持不变。此外如果 TIMx_CR1寄存器中的 URS 位更新请求选择已置 1则将 UG 位置 1 会生成更新事件 UEV但不会将 UIF 标志置 1因此不会发送任何中断或 DMA 请求。这样一来如果在发生捕获事件时将计数器清零将不会同时产生更新中断和捕获中断。发生更新事件时将更新所有寄存器且将更新标志 TIMx_SR 寄存器中的 UIF 位置 1取决于 URS 位 1预分频器的缓冲区中将重新装载预装载值 TIMx_PSC 寄存器的内容 2使用预装载值 (TIMx_ARR) 更新自动重载影子寄存器
以下各图以一些示例说明当 TIMx_ARR0x36 时不同时钟频率下计数器的行为。 1.4 时钟选择
计数器时钟可由下列时钟源提供 1内部时钟 (CK_INT)
2外部时钟模式 1外部输入引脚 (TIx)
3外部时钟模式 2外部触发输入 (ETR)
4外部触发输入 (ITRx)使用一个定时器作为另一定时器的预分频器例如可将定时器13 配置为定时器 2 的预分频器。
2 STM32Cube配置定时器时钟
2.1 配置定时器参数
笔者使用STM32H7 的通用定时器TIM2作为案例介绍通用定时器的用法 2.2 配置定时器时钟
定时器的base时钟配置能为200M Hz 配置完成后就可以生成工程代码。
3 STM32H7定时器使用
3.1 认识定时器的数据结构
参数介绍
参数名说明Prescaler预分频系数CounterMode计数方式Period自动装载值ClockDivision时钟分频因子RepetitionCounter重复计数器的值AutoReloadPreload自动重载使能 3.2 计数功能实现
代码第44行Prescaler 199 由于定时器的base时钟为200M Hz, 此时定时器的计数时钟为
f 1M Hz
代码第45行配置up计数模式
代码第46行Period 49按照1M Hz计数当计数个数达到50个时产生一次中断
代码第47行不分频base时钟
代码第48行自动重载计数使能 4 测试案例
通过配置定时器的参数实现1ms周期计数
4.1 代码实现
代码参数配置如下
/* TIM2 init function */
void MX_TIM2_Init(void)
{/* USER CODE BEGIN TIM2_Init 0 *//* USER CODE END TIM2_Init 0 */TIM_ClockConfigTypeDef sClockSourceConfig {0};TIM_MasterConfigTypeDef sMasterConfig {0};/* USER CODE BEGIN TIM2_Init 1 *//* USER CODE END TIM2_Init 1 */htim2.Instance TIM2;htim2.Init.Prescaler 199;htim2.Init.CounterMode TIM_COUNTERMODE_UP;htim2.Init.Period 499;htim2.Init.ClockDivision TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload TIM_AUTORELOAD_PRELOAD_ENABLE;if (HAL_TIM_Base_Init(htim2) ! HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(htim2, sClockSourceConfig) ! HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(htim2, sMasterConfig) ! HAL_OK){Error_Handler();}/* USER CODE BEGIN TIM2_Init 2 */HAL_TIM_Base_Start_IT(htim2);/* USER CODE END TIM2_Init 2 */}
4.2 验证
通过示波器测试波形可得Freq 1K Hz, 周期为T 1ms