STMCU小助手
发布时间:2022-7-7 16:00
|
前言 定时器输出比较模式(翻转模式)。 对于输出PWM波,在十一届考了个输出不同频率的可调占空比的PWM波。 对于此,用新板子的话可以采用TIM3、TIM17输出。(建议用新板子准备此题仍然用输出比较模式) 但是考点并不在这,考的是定时器的输出比较模式。 输出不同频率100Hz、200Hz可调占空比的PWM波 1.取计数周期为100的定时器(计数值从0到100- 1循环),频率设为100Hz = 80MHz/100/8000。 记输出PWM1,计数周期为T1 = 100,f = 100Hz=80MHz/100/8000。 记输出PWM2,计数周期为T2 = 50,f = 200Hz=80MHz/50/8000。 则令初始值TIMx_CCR1 = T1 * PA6_Duty/100 ,TIMx_CCR2 = T2 * PA7_Duty/100 。(Duty是0-100的数) 当发生中断时, 若是通道1, 则将比较值CCR1 += T1PA6_Duty/100 ;CCR1 %= TIMx_Period; 下一次CCR1 += T1(1 - PA6_Duty/100);CCR1 %= TIMx_Period;以此循环 若是通道2, 则将比较值CCR2 += T2PA7_Duty/100 ;CCR2 %= TIMx_Period; 下一次CCR2 += T2(1 - PA7_Duty/100);CCR2 %= TIMx_Period;以此循环 (如果读者还是不能理解,可以画个波形看看哦) 2.Cubemx实现TIM的配置 由于在做这个实验的时候身边没有示波器,所以采用上升沿和下降沿个数来判断是否成功。 所以我们采用了串口(9600)和LCD帮助测试 TIM3配置如下:
开启定时器中断
3.生成工程 1.开启定时器中断
以上都是初始化和测试显示函数,不需要多讲 2.更改HAL库TIM的中断总函数 由于输出比较的真的比较少,而且对于用HAL做的资料,本人就没找到。。。 所以查了原子提供的参考手册,然后也是被HAL库的集成度坑了。 首先对于中断标志位:
TIMx_SR寄存器,第1.2位保存的通道1、2的捕获和比较中断标志,上面说的很清楚,当在输出比较模式下,计数值和比较值匹配时,该位会置1。 3、中断服务函数
在测试输出波形时,发现会一直产生中断,导致主函数没办法运行,所以在中断开启时关闭PWM中断,中断结束后再重新开启(虽然会有时间延迟,有一点波形误差,但肉眼是分不清的。)。 代码测试:
|
经验分享 | STM32G4片内FLASH擦写实验笔记
经验分享 | STM32G4系列是否支持位带操作
STM32系列芯片之间相互移植注意事项
STM32如何成为现代科技的隐形引擎
大神都是怎么学习STM32的,我也跟着学
如果你解决了这些问题,就可以直接学STM32
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
新手学几天STM32,为啥一脸茫然
实战经验 | STM32G474勘误手册中SRAM Write Error详解
STM32电机控制用什么型号?高级定时器功能详解与芯片选型指南
微信公众号
手机版