stm32 定时器串联

 	NVIC_InitTypeDef NVIC_InitStructure;  
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
//    TIM_OCInitTypeDef TIM_OCInitStructure;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 						//使能 TIMx 外设
	//设置住定时器TIM3
	TIM_DeInit(TIM3);
	TIM_TimeBaseStructure.TIM_Period = pwm_period;								//设置自动重装载周期值
	TIM_TimeBaseStructure.TIM_Prescaler =TMRNCLK/frequency/pwm_period-1; 		//设置预分频值 不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 								//设置时钟分割:TDTS = Tck_tim			这里是 32M
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 				//向上计数
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);								//初始化 TIMx
	TIM_ClearFlag(TIM3, TIM_FLAG_Update);                 
	TIM_ARRPreloadConfig(TIM3, ENABLE); 										//使能 TIMx 在 ARR 上的预装载寄存器
	//TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);				//既做主模式也作为slave 模式 一般用于两个计时器的同步
	TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update);						//以TIM3的溢出 作为信号

	//设置从定时器TIM2
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 						//使能 TIMx 外设
	TIM_DeInit(TIM2);
	TIM_TimeBaseStructure.TIM_Period = 1000;									//设置自动重装载周期值
	TIM_TimeBaseStructure.TIM_Prescaler =0;								 		//设置预分频值 不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 								//设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 				//向上计数
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);								//初始化 TIMx
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);                 
	TIM_ARRPreloadConfig(TIM2, ENABLE); 										//使能 TIMx 在 ARR 上的预装载寄存器
	TIM_SelectInputTrigger(TIM2, TIM_TS_ITR2);									//选择tim3的trgo输入
	TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_External1);							//选择trgi作为时钟输入
	
	if(enIrq)			
	{
		NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;       			/*溢出中断*/  
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
		NVIC_Init(&NVIC_InitStructure);  
		TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);                   				/* 使能中断 */	
	}
	TIM_Cmd(TIM2, ENABLE); 														//使能 TIM3
	TIM_Cmd(TIM3, ENABLE); 														//使能 TIM3

### STM32 定时器外部时钟原理图设计 STM32定时器可以配置为使用外部时钟源作为其输入信号,这种功能通常用于实现更复杂的同步机制或基于外部事件的触发逻辑。以下是关于 STM32 定时器外部时钟的工作原理及其对应的硬件连接设计。 #### 1. 外部时钟源的选择 STM32 提供了多种方式来引入外部时钟信号到定时器模块中。这些外部时钟可以通过 TIMx_ETR (External Trigger Input) 或者其他 GPIO 输入引脚接入。具体来说: - **TIMx_ETR**: 这是一个专门用于接收外部时钟信号的引脚,支持滤波和极性设置[^2]。 - **GPIO 引入**: 如果未启用 ETR 功能,则可以选择任意可用作输入的 GPIO 引脚,并将其映射至特定定时器通道(如 CH1, CH2 等),从而间接提供外部时钟信号[^3]。 #### 2. 配置步骤概述 为了使能外部时钟模式,在软件层面需完成如下几个重要参数设定: - 设置 `SMCR` 寄存器中的 Slave Mode Control 字段以指定从模式类型; - 调整 `CCMRx`, `CCER` 和相关捕获/比较寄存器以便于处理来自选定 I/O 口的数据流; - 对应地调整预分频系数以及计数值范围等基础属性。 #### 3. 原理图设计要点 当考虑实际电路板布局时,请注意以下几点建议来优化性能并减少干扰影响: - **去耦电容放置靠近电源管脚处**, 确保稳定供电电压; - 使用低阻抗路径将外设产生的脉冲传递给 MCU , 并可能增加适当大小的串联电阻限制电流强度 ; - 若有必要的话还可以加入施密特触发缓冲芯片提高信噪比. 下面给出一段简单的初始化代码片段展示如何开启某个通用定时器接受外部时钟输入的功能. ```c // 初始化TIM2为外部时钟模式 void TIM2_ExtClock_Init(void){ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_InternalClockConfig(TIM2); /* Time base configuration */ TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure ); // 配置从模式控制器为外部时钟模式1 TIM_SelectInputTrigger(TIM2,TIM_TS_TI1FP1 ); TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_External1 ); TIM_Cmd(TIM2,ENABLE); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值