1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、必备知识
输出pwm波首先要设置的就是频率 普及:T=1/f(f越大T越小) 1M Hz = 1000K Hz = 1000000Hz 1 Hz = 1s 1K Hz = 1ms 10K Hz=0.1ms 1M Hz = 1um 只需要了解:自动重装载arr 预分频psc 1、时钟源 定时器时钟TIMxCLK,即内部时钟CK_INT,经APB1预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M 。 2、预分频 预分频两种方式(每个人习惯不一样常见的两种): (1)给psc赋值为72(7200)等一些比较好计算的值 TIM_TimeBaseStructure.TIM_Period = arr-1;//把时钟平分为多少等份(每一段就是一个小周期) TIM_TimeBaseStructure.TIM_Prescaler = psc-1;//定时器时钟的频率72Mhz/84Mhz (2)跟(1)的分频方式不一样,分频值得原理一样 //TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate); 这张图可以帮你更好的理解arr和ccr占空比设置的原理 3、管脚重映射语句 TIM3为例(两个参数参数:1.TIMx是完全重映射还是部分重映射 2.使能) GPIO_PinRemapConfig(GPIO_PartialRemap_TIMx, ENABLE); //GPIO_PartialRemap_TIM3 TIM3 复用功能部分映射 //GPIO_FullRemap_TIM3 TIM3 复用功能完全映射 一、频率设置 我的误区(借鉴):知道频率和时间为反比,但是思考的时候认为1M Hz是1us 那么10K Hz肯定比是0.01us怎么就想不明白,就在那死熬,知道自己肯定哪里错了,但是就是看不出来,难了我一上午,恍然大迷瞪。希望各位不要在这入坑。 频率:(两个例子可以理解一下) eg1:假设arr=1000-1 预分频psc=72-1。设分频之后值(Fp)。周期(T) Fp=72M Hz / 72 = 1M Hz =1um=0.001ms T:Fp x arr(1000)=1ms=0.001s 频率f=1/T = 1 / 0.001 = 1000Hz = 1K Hz eg2:假设arr=10-1 预分频psc=7200-1。设分频之后值(Fp)。周期(T) Fp=72M Hz /7200-1 = 10K Hz =0.1ms T:Fp x arr (10) = 1ms = 0.001s 频率f=1/T = 1 / 0.001 = 1000Hz = 1K Hz 二、占空比设置 设置占空比的方法两种 方法一:给crr(600)赋值,参考arr(1000)的值,此时占空比为60% void Init_Pwm(uint16_t ccr) { ,,,; ,,,; ,,,; ,,,; TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;//pwm模式二 TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;//输出极性低 TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能 TIM_OCInitStruct.TIM_Pulse=ccr; TIM_OC2Init(TIM3,&TIM_OCInitStruct);//打开通道2 } 方法二:在配置通道的时候不配置ccr的值,在主函数里面调用库函数里面的修改ccr值的函数。 调用函数:void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); 给crr(6) arr(10) 占空比为60% TIM_SetCompare2(TIM3,crr); 总结 第一次写博客,由于一直想写,看到身边的人也都在写博客。加上由于这个问题我花费了好多时间才弄明白,决定抽出时间,写一篇让自己加入到这个大家庭当中,希望大家多多支持。有错误的话,欢迎大神指正,写这个也是督促自己学习。 |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9055 浏览 16 评论
4086 浏览 18 评论
1174浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 20:31 , Processed in 1.058951 second(s), Total 48, Slave 39 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号