STM32定时器同步功能1:将一个定时器用作另一个定时器的预分频器

测试程序说明:

测试芯片为STM32L151C8T6, 程序库使用的是LL库

用TIM3为主定时器,产生更新事件,并产生触发输出(TGRO)给TIM2,TIM2的时钟来自TIM3的TGRO信号,TIM2作为从定时器,配置为PWM输出模式。

内部触发连接如下图:

/*** 说明 : 从定时器初始化,用来生成PWM* 参数 : 无* 返回 : 无*/
void Pwm_Timer_Init(void)
{LL_GPIO_InitTypeDef GPIO_InitStruct = {0};LL_TIM_InitTypeDef TIM_InitStruct = {0};LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0};LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);/** PWM_OUT->PA0 */GPIO_InitStruct.Pin=LL_GPIO_PIN_0;GPIO_InitStruct.Mode=LL_GPIO_MODE_ALTERNATE;GPIO_InitStruct.Speed=LL_GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Pull=LL_GPIO_PULL_UP;GPIO_InitStruct.Alternate=LL_GPIO_AF_1;LL_GPIO_Init(GPIOA, &GPIO_InitStruct);    /** 定时器时基配置:注意此时TIM2的时钟源来自TIM3即100K */TIM_InitStruct.Prescaler = 9;  /** 10分频即10K */TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;TIM_InitStruct.Autoreload = 9; /** 装载值10即周期为1KHz */TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;LL_TIM_Init(TIM2, &TIM_InitStruct);LL_TIM_EnableARRPreload(TIM2);/** 输出模式配置 */TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;TIM_OC_InitStruct.CompareValue = 5; /** 50%占空比 */TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_LOW;LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH1);  LL_TIM_OC_DisableFast(TIM2, LL_TIM_CHANNEL_CH1);/** 触发模式 */LL_TIM_SetSlaveMode(TIM2, LL_TIM_SLAVEMODE_TRIGGER); /** 不要也行 *//** 选择输入触发源(即TIM3生成的时钟) */LL_TIM_SetTriggerInput(TIM2, LL_TIM_TS_ITR2); /** 选哪个看内部触发连接图,手册提供的 */LL_TIM_EnableMasterSlaveMode(TIM2); /** 时钟源设置为模式1  */LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_EXT_MODE1);LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH1);    LL_TIM_EnableCounter(TIM2);LL_TIM_GenerateEvent_UPDATE(TIM2);
}/*** 说明 : 主定时器初始化,用来控制从定时器* 参数 : 无* 返回 : 无*/
void Master_Timer_Init(void)
{LL_TIM_InitTypeDef TIM_InitStruct = {0};LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);   /** 定时器时基配置:输出频率100K */TIM_InitStruct.Prescaler = 31;TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;TIM_InitStruct.Autoreload = 9;TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;LL_TIM_Init(TIM3, &TIM_InitStruct);LL_TIM_EnableARRPreload(TIM3);LL_TIM_EnableMasterSlaveMode(TIM3);   /** 输出源选择:更新事件 */LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_UPDATE);
}/*** 说明 : 使能定时器产生PWM* 参数 : 无* 返回 : 无*/
void Start_Timer(void)
{LL_TIM_EnableCounter(TIM3);LL_TIM_GenerateEvent_UPDATE(TIM3);
}/*** 说明 : 关闭定时器产生PWM* 参数 : 无* 返回 : 无*/
void Stop_Timer(void)
{LL_TIM_DisableCounter(TIM3);LL_TIM_ClearFlag_CC1(TIM3);
}

输出波形图:

从波形可以看出输出的信号是一个频率为1KHz占空比50%的PWM波,和预期一致。

STM32定时器同步功能1相关推荐

  1. STM32定时器同步功能2

    STM32定时器同步功能2:用一个定时使能另外一个定时器 测试芯片:STM32L151C8T6 代码库:LL库 本例中,TIM3为主定时器,TIM2为从定时器,通过TIM3 的更新事件使能TIM2,T ...

  2. STM32定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量

    STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 文章目录 STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 编 ...

  3. 利用STM32的定时器中断功能编写线阵CCD(ILX554B)的驱动时序

    利用STM32的定时器中断功能编写线阵CCD(ILX554B)的驱动时序 1.利用定时器完成线阵CCDILX554B的驱动时序,采用两个管脚1个用于产生ROG信号,一个用于产生CLK信号 2.使用一个 ...

  4. STM32定时器功能概括

    定时器分类 不同的芯片定时器的个数也是不同的,以STM32F103ZE有8个定时器(定时器的具体个数查相关手册). 定时器的分类:高级定时器.通用定时器.基本定时器,这3类定时器的功能各不相同. 定时 ...

  5. STM32 - 定时器高级应用说明 - 多触波的实现 (N-pulse waveform generation using timer synchronization)- 01

    前言: 如何实现复杂的不同频率.相位.波形脉宽的波形就在这个章节: This application example is split into two parts describing two si ...

  6. 硬件课程设计:基于STM32的多功能播放器之小说阅读

    1 小说阅读功能 1.1 功能介绍 1.1.1 设计思路 在TFTLCD屏上显示中英文文本文件是本次硬件课程设计的基本要求,也是我设计的多功能播放器最重要的功能,要求能够读取事先存储在SD卡中的文本文 ...

  7. STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结

    STM32定时器配置(TIM1.TIM2.TIM3.TIM4.TIM5.TIM8)高级定时器+普通定时器,定时计数模式下总结 文章结构: --> 一.定时器基本介绍 --> 二.普通定时器 ...

  8. STM32定时器实现5秒周期串口通信,2秒LED灯闪烁

    文章目录 前言 一.定时器Timer 1.定时器定义 2.定时器分类 3.计数器模式 4.时钟产生器和时基单元 5.工作原理 二.实验步骤 1.用STM32CubeMx创建项目 1.1 创建项目 1. ...

  9. STM32定时器-基本定时器

    STM32定时器-基本定时器 实验芯片:STM32F103 更新日期:2021年8月17日 声明:部分图文来自互联网公开资料,转载注明出处 一.基本定时器简介 TIM6和TIM7是一个16位向上递增的 ...

最新文章

  1. 《Kotlin极简教程》第三章 Kotlin基本数据类型
  2. C# 真正能发邮件的源码
  3. Exchange2007中创建收件人对象、通讯组和地址列表和客户端访问
  4. Servlet基本概念及执行流程
  5. 用postman在CSDN上创建博客
  6. 自定义View(未完待续)
  7. 嵌套字典|python_Python | 如果不是,则使用嵌套,根据销售额计算折扣
  8. c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子
  9. [linux]linux IO 5种方式
  10. HTTP请求的完整过程
  11. 深度卷积神经网络及各种改进
  12. IBM SPSS Modeler 【3】 神经网络的生成
  13. 数据结构入门(2)——线性表、堆栈和队列
  14. 计算机光纤接口网卡,光纤网卡是什么?
  15. 你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si
  16. python123判断火车票座位号分布图_面向回家编程!GitHub标星两万的Python抢票教程”,我们先帮你跑了一遍...
  17. JAVA五子棋人人对战的实现
  18. GTID 模式 - 通过跳过事务解决主从故障
  19. 网络流专题班例题和练习
  20. Python 抓取新浪财经股票数据

热门文章

  1. 需求管理有什么工具?
  2. uniapp图片自适应显示,不裁剪
  3. 如何系统的学习linux 系统学习Linux的十一点建议
  4. linu内核-进程小结
  5. Linux服务器测试性能脚本
  6. 网络基础 - 如何区分百兆网线和千兆网线?
  7. linux安装java一步一步超详细教程
  8. simulink实现他励直流电动机电枢电压反接制动仿真
  9. 依巴谷星表中的毕星团认证杯B题
  10. 税控服务器管理系统打印,工行南昌北西支行“营改增”税控服务器管理系统成功上线...