STM32定时器的TRGO信号

179 篇文章 185 订阅

定时器的框图中有一个TRGO信号输出,此信号可以用来触发ADC、DAC、其他定时器等。

此信号怎么产生呢?

        要使用 TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); 函数来选择TRGO信号的事件源,这个函数给TIMx_CR2寄存器的位6到位4赋值,位6到位4是MMS[2:0],描述如下:

 

        如果MMS[2:0]值为000:当TIMx_EGR寄存器的UG位有效,就会触发TRGO输出。

        如果MMS[2:0]值为010:当产生更新事件时,就会触发TRGO输出。

 

另外:

当配置MMS[2:0]值为010:当产生更新事件时,就会触发TRGO输出。还可以配合重复计数寄存器来使用:

即重复多少次后才会产生一个更新事件。比如以前是1S产生一个更新事件,当把RCR的值配置为3时,就会变成3秒产生一个更新事件。配置方法如下:

    TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD;                 //计数周期
    TIM_TimeBaseStructure.TIM_Prescaler = PWM_PRSC;                //分频系数
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;        //设置外部时钟TIM1ETR的滤波时间
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;  //中央对齐模式1,从0计数到 TIM_Period 然后开始减到0,循环
	TIM_TimeBaseStructure.TIM_RepetitionCounter = REP_RATE;        //重复计数,就是重复溢出多少次才产生一个溢出中断(产生更新事件,用来触发ADC采样)
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

 

STM32定时器是非常强大的硬件模块。它们可以用来生成精确的时间延迟、PWM信号和周期性的事件触发。STM32定时器有多个计数器,每个计数器都可以配置为不同的模式,以适应不同的应用场景。 在使用STM32定时器之前,需要首先了解一些基本概念: 1. 定时器时钟源:定时器的时钟可以来自内部时钟源或外部时钟源。通常情况下,内部时钟源为系统时钟,外部时钟源为外部晶振。 2. 定时器分频器:定时器分频器可以将时钟源分频后再输入到定时器中。分频器的设置决定了定时器的计数速度。 3. 定时器计数器:定时器计数器用来计数定时器的时钟脉冲数,从而实现定时功能。 4. 定时器模式:定时器有多种工作模式,如计数器模式、定时器模式、PWM模式等。每种模式都有不同的计数方式和输出方式。 在STM32的HAL库中,定时器的初始化可以通过以下步骤完成: 1. 配置定时器时钟源和分频器。 2. 配置定时器模式。 3. 配置定时器周期和重载值。 4. 启动定时器。 以下是一个使用STM32的TIM3定时器产生1秒定时的示例代码: ```c void TIM3_Init(void) { TIM_HandleTypeDef htim3; TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; // 定时器时钟源和分频器配置 htim3.Instance = TIM3; htim3.Init.Prescaler = 7999; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 999; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim3); // 定时器模式配置 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig); // 定时器周期和重载值配置 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig); // 启动定时器 HAL_TIM_Base_Start_IT(&htim3); } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM3) { // 定时器中断回调函数,这里可以实现每秒执行一次的功能 } } ``` 在上述代码中,我们使用了STM32的HAL库来初始化TIM3定时器,并在每秒定时到达时调用了中断回调函数。这个例子可以帮助你快速上手STM32定时器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

【ql君】qlexcel

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

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

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

打赏作者

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

抵扣说明:

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

余额充值