STM32F4 频率 占空比可调方波发生器 ---学华为造轮子

接触单片机以来,总想做一些趁手仪器仪表工具耍耍,但由于自己较为懒散,空有想法一直没有付诸实践。前几日翻到一个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时达到最大,波形接近三角波。其他和设计一致。

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

健忘的松鼠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值