STM32
登录
直播中
张秀兰
7年用户
1285经验值
私信
关注
[问答]
如何才能找到STM32F4 tim2修改占空比和频率的函数?
开启该帖子的消息推送
STM32F4
如何才能找到
STM32
F4
ti
m2修改占空比和频率的函数?
回帖
(1)
李华
2021-11-15 11:03:24
接触单片机以来,总想做一些趁手仪器仪表工具耍耍,但由于自己较为懒散,空有想法一直没有付诸实践。前几日翻到一个stm32f4的最小系统板,造轮子的热情竟然空前高涨起来。搜索资料又编程调试了半天,终于得偿所愿。系统最终参数为频率 10hz - 42Mhz,占空比任意可调(实际占空比受频率所限,如42M时,只能是50%)
一、工作目标和问题确定
手头的单片机为32位单片机,显然定时器应优选32位的;如果该定时器有PWM方式,能够在非中断的情况下自动输出占空比可调的方波,显然是上上之选。单片机为最小系统板,显然使用串口完成人机界面最为简洁。
经查阅资料,tim2和tim5是32位定时器,且均有pwm方式,总线频率为84M,符合需要。故问题圈定如下:
(1)找到tim2修改占空比和频率的函数。
(2)确定一个较为简洁的频率、占空比、时间的修改方式。
二、问题解决
(1)修改占空比和频率
(为扩展方波频率输出范围,首先应将分频数设置为0,即不分频)
占空比修改的函数较为简单,主要通过系统函数TIM_SetCompare1确定,该函数原型如下:
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1)
其中参数TIMx为要操作的定时器,Compare1为比较数值。从PWM工作方式可以看出
在当前计数数值小于Compare1时,系统输出低电平,这和我们常见的高电平和总周期之比不符,故此处应采用周期(即下文的分频值)减去输入高电平的时长。
修改频率时稍显繁琐,由于必须保证比较数值应在0和周期之间,故必须同时修改。其中修改频率的库函数为TIM_SetAutoreload,其原型如下:
TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload)
其中Autoreload为相对于84Mhz的脉冲个数,或者分频数。为减低自己的使用难度,此处首先从输入中得到频率值f,然后令分频值div=84000000/f+0.5得到分频值,最后回馈用户频率为
f=84000000/div,以保证用户反馈数值和示波器测量数值一致。
(2)人机界面
考虑到输入控制的简洁性原则,主要控制使用引导字符+数据的方式。其中时间修改指令设置如下:
Thhmmss
频率修改指令如下:
Fnum1
具体频率根据输入字符长度并通过字符和数字之间的转换获得。
占空比修改(此处实际输入的为高电平脉冲数)指令如下:
Dnum2
高电平脉冲数根据输入字符长度并通过字符和数字之间的转换获得。
考虑易用性原则,在程序中加入了定时提醒当前波形输出参数(频率、占空比、周期脉冲数)等功能,测试发现,1M赫兹以上低电平开始明显上升;42Mhz时达到最大,波形接近三角波。其他和设计一致。
接触单片机以来,总想做一些趁手仪器仪表工具耍耍,但由于自己较为懒散,空有想法一直没有付诸实践。前几日翻到一个stm32f4的最小系统板,造轮子的热情竟然空前高涨起来。搜索资料又编程调试了半天,终于得偿所愿。系统最终参数为频率 10hz - 42Mhz,占空比任意可调(实际占空比受频率所限,如42M时,只能是50%)
一、工作目标和问题确定
手头的单片机为32位单片机,显然定时器应优选32位的;如果该定时器有PWM方式,能够在非中断的情况下自动输出占空比可调的方波,显然是上上之选。单片机为最小系统板,显然使用串口完成人机界面最为简洁。
经查阅资料,tim2和tim5是32位定时器,且均有pwm方式,总线频率为84M,符合需要。故问题圈定如下:
(1)找到tim2修改占空比和频率的函数。
(2)确定一个较为简洁的频率、占空比、时间的修改方式。
二、问题解决
(1)修改占空比和频率
(为扩展方波频率输出范围,首先应将分频数设置为0,即不分频)
占空比修改的函数较为简单,主要通过系统函数TIM_SetCompare1确定,该函数原型如下:
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1)
其中参数TIMx为要操作的定时器,Compare1为比较数值。从PWM工作方式可以看出
在当前计数数值小于Compare1时,系统输出低电平,这和我们常见的高电平和总周期之比不符,故此处应采用周期(即下文的分频值)减去输入高电平的时长。
修改频率时稍显繁琐,由于必须保证比较数值应在0和周期之间,故必须同时修改。其中修改频率的库函数为TIM_SetAutoreload,其原型如下:
TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload)
其中Autoreload为相对于84Mhz的脉冲个数,或者分频数。为减低自己的使用难度,此处首先从输入中得到频率值f,然后令分频值div=84000000/f+0.5得到分频值,最后回馈用户频率为
f=84000000/div,以保证用户反馈数值和示波器测量数值一致。
(2)人机界面
考虑到输入控制的简洁性原则,主要控制使用引导字符+数据的方式。其中时间修改指令设置如下:
Thhmmss
频率修改指令如下:
Fnum1
具体频率根据输入字符长度并通过字符和数字之间的转换获得。
占空比修改(此处实际输入的为高电平脉冲数)指令如下:
Dnum2
高电平脉冲数根据输入字符长度并通过字符和数字之间的转换获得。
考虑易用性原则,在程序中加入了定时提醒当前波形输出参数(频率、占空比、周期脉冲数)等功能,测试发现,1M赫兹以上低电平开始明显上升;42Mhz时达到最大,波形接近三角波。其他和设计一致。
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32F4
STM32F4
直接使用32位定时器
tim2
计数
2018-11-01
8583
在
STM32F4
中
TIM
6和
TIM
7为基本定时器具有哪些特性?
2021-11-24
1597
请问为什么
TIM2
中断
函数
每次都会执行两次?
2018-10-10
4347
stm32f
407zgt6在studio下
tim4
的
4
个PWM通道无输出的原因?
2023-09-03
2068
STM32F4
的
4
个引脚无法输出PWM波请问问题出在哪里
2022-08-16
1622
STM32F
407
频率
捕获遇到问题
2018-10-04
2903
STM32F
1HAL
TIM2
定时printf打印出现丢数值的原因?
2024-06-04
264
为什么
STM32F
103的USART
2
和
TIM2
无法同时使用呢
2021-11-17
1418
这样做为什么会导致
占空比
改变?
2018-04-05
6545
STM32F
103定时器
TIM2
输出比较无中断产生
2013-10-09
13759
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分