首先将管脚装备为推挽输出。下面以向上计数模式为例来叙述PWM发生的原理:TIMx开端向上计数,TIMx_CNT为计数值,计数一次加1,TIMx_ARR确认了计数的上限,到达上限后计数器从0开端从头计数,所以一次PWM频率就由TIMx_ARR来确认了,即计数器时钟*(TIMx_ARR-1),频率确认了,接下来便是占空比。占空比是由TIMx_CCRx来确认的,PWM形式1下当TIMx_CNT=TIMx_CCRx时,输出OCiREF无效电平,至于有用电平是0仍是1,要设置TIMx_CCERx,这样发生了一个PWM波形,可以说装备十分灵敏,当TIMx_CCRx为0时,占空比就为0,当TIMx_CCRx大于TIMx_ARR时,就一向输出高电平(占空比100%)。下图是个比如:
以下是我写的一个参阅程序,测试通过
void TIM1_Init(void)
{//定时器1初始化
CLK_PCKENR1|=0x80;//敞开定时器1外设时钟
TIM1_EGR=0x01;//从头初始化TIM1
TIM1_EGR|=0x20;//从头初始化TIM1
TIM1_ARRH=0x00;//设定重装载值
TIM1_ARRL=254;
TIM1_PSCRH=0;//预分频
TIM1_PSCRL=9;
TIM1_CR1=0;//边缘对齐,向上计数
}
void TIM1_PWM_Init()
{
//TIM1_CCER1=0x03;//低电平有用
//TIM1_CCMR1=0x70;//PWM形式2
TIM1_CCER1=0x01;//高电平有用
TIM1_CCMR1=0x60;//PWM形式1
TIM1_CCR1H=0;//占空比
TIM1_CCR1L=50;
TIM1_CR1|=0x01;//向上计数,无缓存,使能
TIM1_BKR=0x80;//敞开刹车
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/260426.html