STM32F103ZET6 之 通用定时器单脉冲模式实验

本文通过STM32F103ZET6微控制器进行通用定时器3和4的单脉冲模式实验,旨在产生可调脉宽的单脉冲。实验中详细介绍了单脉冲模式的工作原理,要求在计数器的延时后生成可控脉宽的脉冲,并强调了模式配置和启动条件,适合对STM32感兴趣的读者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于前面买的核心板,供电老有问题,使得我现在的项目又改用了以前用的F103ZET6微控制器!


1、实验目的

1)产生脉宽任意可调的单脉冲(在允许的范围内)


2、硬件:通用定时器3、通用定时器4


3、单脉冲模式介绍

单脉冲模式允许计数器响应一个激励,并在一个程序可控的延时之后,产生一个脉宽可程序控制的脉冲。

可以通过从模式控制器启动计数器,在输出比较模式或者PWM模式下产生波形。设置TIMx_CR1 寄存器中的OPM 位将选择单脉冲模式,这样可以让计数器自动的产生下一个更新

事情UEV时停止。

仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发),必须配置如下:

向上计数方式:CNT (计数器寄存器) < CCRx (比较寄存器)< ARR(自动装载寄存器)

向下计数方式:CNT > CCRx。


需要在从TI2输入脚上检测到一个上升沿开始,延迟tDELAY 之后,在OC1上产生一个长度为tPULSE 的正脉冲。

具体的可以看参考手册。


4、软件设计

/**
  ******************************************************************************
  * @file    timonepulse.c 
  * @author  Cawen
  * @version V1.0
  * @date    2015-12-22
  ******************************************************************************
  */ 

/* Includes ------------------------------------------------------------------*/
#include"timonepulse.h"

/* Private variables ---------------------------------------------------------*/
uint16_t PrescalerValue = 0;

/*
 * Function Name  : GPIO_Configuration
 * Description    : Configure the GPIOD Pins.
 * Input          : None
 * Output         : None
 * Return         : None
 * Attention		  : None
 */
void GPIO_Configuration(void)
{
  GPIO_InitTyp
<think>嗯,用户想了解STM32F103ZET6通用定时器使用方法和配置教程。首先,我需要回忆一下STM32通用定时器相关知识。根据引用[2],通用定时器的时基单元包括计数器、预分频器和自动重载寄存器,这和基本定时器类似,但通用定时器有更多的计数模式,比如递增、递减和中心对齐。引用[1]提到主从模式,可能用于同步多个定时器,但用户的问题可能更关注基础使用,所以暂时先不深入这部分。 用户可能需要知道如何配置定时器进行基本的定时或PWM输出。引用[3]中提到了中断优先级设置和使能定时器的步骤,比如使用NVIC_Init函数和TIM_Cmd函数。但如果是使用HAL库或者CubeMX配置的话,步骤可能有所不同。引用[5]提到输入捕获的配置,涉及溢出处理和高电平时间计算,这部分可能属于高级应用,用户如果刚接触可能需要先从基础开始。 接下来,我应该分步骤讲解配置方法。首先,时钟使能,然后配置时基参数,比如预分频器PSC和自动重载值ARR,这些决定了定时器的周期。然后选择计数模式,比如向上计数。如果需要中断,就开启更新中断并配置NVIC。最后启动定时器。示例代码部分可以使用HAL库的函数,比如HAL_TIM_Base_Init和HAL_TIM_Base_Start_IT。 可能用户实际应用场景包括定时中断、PWM生成或者输入捕获。根据引用[4],通用定时器有四个输入捕获通道,但用户的问题可能更关注基本配置。需要确保提到不同的应用可能需要不同的配置,比如PWM需要配置输出比较模式。 另外,引用[5]中提到的CubeMX配置步骤,用户可能想知道如何使用图形化工具来生成初始化代码,这部分可以简要提及,但详细步骤可能需要更多篇幅。总的来说,应该结构清晰,从初始化步骤到代码示例,再到应用场景,帮助用户逐步理解配置过程。同时,生成的相关问题可以引导用户进一步学习高级功能,如输入捕获、PWM输出等。</think>### STM32F103ZET6通用定时器配置教程 #### 一、硬件结构与特性 STM32F103ZET6包含4个通用定时器(TIM2-TIM5),支持以下功能: - 16位递增/递减/中心对齐计数器 - 预分频器(1-65536分频) - 4个独立通道(输入捕获/输出比较/PWM生成) - 支持定时器同步与级联[^1] #### 二、基础配置步骤 1. **时钟使能** ```c __HAL_RCC_TIM3_CLK_ENABLE(); // 使能TIM3时钟 ``` 2. **时基配置** ```c TIM_HandleTypeDef htim3; htim3.Instance = TIM3; htim3.Init.Prescaler = 7200-1; // 预分频值(PSC) 72MHz/7200=10kHz htim3.Init.CounterMode = TIM_COUNTERMODE_UP; // 递增模式[^2] htim3.Init.Period = 10000-1; // 自动重载值(ARR) 10kHz/10000=1Hz htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim3); ``` 3. **中断配置** ```c HAL_NVIC_SetPriority(TIM3_IRQn, 1, 0); // 设置中断优先级[^3] HAL_NVIC_EnableIRQ(TIM3_IRQn); ``` 4. **启动定时器** ```c HAL_TIM_Base_Start_IT(&htim3); // 启动定时器并开启中断[^3] ``` #### 三、关键参数计算 - **定时周期**:$T = \frac{(PSC+1) \times (ARR+1)}{CK_{PSC}}$ - **示例**:当$CK_{PSC}=72MHz$时,配置PSC=7200-1,ARR=10000-1: $$ T = \frac{7200 \times 10000}{72 \times 10^6} = 1s $$ #### 四、中断服务函数 ```c void TIM3_IRQHandler(void) { HAL_TIM_IRQHandler(&htim3); // 用户代码区 if(__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE)) { __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 执行定时任务 } } ``` #### 五、应用场景 1. **PWM输出**:配置输出比较模式 2. **输入捕获**:测量脉冲宽度(需配置TIMx_CHx通道)[^4] 3. **外部事件计数**:通过ETR引脚输入信号 4. **定时中断**:周期性任务触发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值