| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32定时器可重触发单脉冲模式 -> 正文阅读 |
|
[嵌入式]STM32定时器可重触发单脉冲模式 |
ST公司后期推出的STM32系列【比方L4、G0、G4、F7、H7等】的定时器功能都做了诸多拓展,其中可重触发单脉冲模式就是新拓展的功能之一。它跟常规单脉冲模式类似,但在实现方式及输出结果方面不太一样。下面以STM32G4系列为蓝本来介绍该内容。 对于可重触发单脉冲模式,每次触发事件会引起相应定时器通道立即输出事先设计好的脉宽【这里就是一个ARR+1宽度】,如果这个输出过程中又受到触发,输出则会在原来基础上继续延展一个新的脉宽,如下图所示:[截图来自STM32G4系列的参考手册] 若使用定时器的可重触发单脉冲输出模式,该定时器须配置为复位+触发组合从模式。注意,可重触发单脉冲输出模式不支持计数器中心对齐计数模式。 如果计数器配置为向上计数模式,CCR值必须设置为0; 如果计数器配置为向下计数模式,CCR值必须设置为大于或等于ARR的值。 可重触发单脉冲模式又分两种模式: 可重触发单脉冲模式1:向上计数模式时,在触发信号来临前,输出有效电平,触发后输出指定宽度的无效电平;向下计数模式时的结果与向上计数模式时刚好相反。 可重触发单脉冲模式2:向上计数模式时,在触发信号来临前,输出无效电平,触发后输出指定宽度的有效电平;向下计数模式时的结果与向上计数模式时刚好相反。 【注:有效电平/无效电平是针对比较输出模块的那个中间参考信号【OCxref】而言,有效电平就是高电平,无效电平即低电平,但这个信号到最终管脚输出端【OCx】往往还得经过极性选择电路,如果极性选择为高有效,最终管脚输出电平就跟OCxref信号一致,否则相反。】 下面简单介绍下实现过程。 这里使用STM32G4开发板做验证。使用TIM1的CH1做可重触发的单脉冲输出,通过CH2引入触发信号。我将按键信号引到TIM1-CH2作为触发输入,即每按键一次产生一个触发信号,让CH1输出单脉冲,当然它可接收连续触发使得单脉冲输出得以延展。 假设要求每次收到触发信号前输出无效电平,触发后输出一段时间的有效电平脉冲。这里极性选择为高有效,即有效电平为高电平、无效电平为低电平。我这里选择计数器向上计数模式、可重触发单脉冲模式2。 我们一起来看看使用CubeMx进行的配置操作。配置PC13的按键输入,硬件线路上将该信号连到PC1[TIM1-CH2],下面重点关注TIM1的配置。 目前CubeMx针对可重触发单脉冲模式的选项还不够完善,可以先按下面方式配置。 注意此时不要勾选单脉冲模式,我们后面到代码里去自行修改相应代码。 关于时基参数配置无须过多解释,根据具体情况来定即可。 关于TIM1-CH1的PWM模式的配置,见下图橙色方框内容,除了关注极性选择外,其它我们随便配置下或者不予理睬。当生成初始化代码后我们再去具体修改,改动的地方不多,后面还会提及。至于触发输入信号这里选择上沿触发。 各种配置完成后,生成初始化代码。添加必要的用户代码。【这里是基于HAL库】 要添加的用户功能代码很简单,就下面一行【顺便提醒下,CubeMx库不要太老旧】。 HAL_TIM_PWM_Start(&htim1,?TIM_CHANNEL_1); 前面提过,那个关于TIM1-CH1的比较输出模式的初始化代码要做些修改。按照当前设计要求,将下面红框里的代码手动调整为下面内容。 之后对代码做编译调试,验证我们想要的结果。下面截图中蓝色波形源于按键信号,黄色为TIM1-CH1的单脉冲输出信号。 不难看出,一般情况下,每按键一次则输出一个高电平脉冲,但当在输出脉冲的有效期间再次发生按键触发时,其输出会被延展。 整体上,实现上述功能需在熟悉定时器比较输出功能的基础上,并把开篇的可重触发特性及配置要求搞清楚,再对当前配置代码稍作调整即可。相信未来CubeMx在这个地方会增加相应选项,实现起来将更简洁明了。当我们知晓这个特性后,在以后的应用开发中可以结合具体场景加以灵活运用。因刚好最近有人问起这个话题,就顺便在此做个分享但愿帮到更多的人。 ?============================== 往期话题阅读链接【点击即可阅读】: |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 1:28:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |