博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输出使能详解STM32的PWM输出——寄存器配置六步曲!
阅读量:5927 次
发布时间:2019-06-19

本文共 2053 字,大约阅读时间需要 6 分钟。

废话就不多说了,开始。。。

    一、stm32的pwm输出引脚是使用的IO口的复用功能。

    二、T2~T5这4个通用定时器都可输出4路PWM——CH1~CH4。

    三、我们以tim3的CH1路pwm输出为例来停止图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。

    步调如下:

    1、使能TIM3时钟

    输出和使能输出和使能

    RCC->APB1ENR |= 1 << 1;

    2、配置对应引脚(PA6)的复用输出功能

    输出和使能

    GPIOA->CRL &= 0XF0FFFFFF;//PA6清0

GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)
GPIOA->ODR |= 1 << 6;//PA6上拉

    3、设定计数器主动重装值及是不是分频

    TIM3->ARR = arr;//设定计数器主动重装值(决定PWM的频率)

 TIM3->PSC = psc;//预分频器,0为不分频

    4、设置PWM的模式(有1和2两种模式,区分在于输出电平极性相反),根据需求选一种便可

    输出和使能

    注:TIMX_CCMR1决定CH1~CH2路,TIMX_CCMR2决定CH3~CH4路。

    输出和使能

    //TIM3->CCMR1 |= 6 << 4;//CH1 PWM1模式 

    TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式 

 TIM3->CCMR1 |= 1 << 3;//CH1预装载使能

    5、输出使能设置

    输出和使能

    TIM3->CCER  |= 1 << 0;//输入/捕获1输出使能

    6、主动重装载预装载允许位(ARPE) 及 定时器 使能

    每日一道理
如果只看到太阳的黑点,那你的生活将缺少温暖;如果你只看到月亮的阴影,那么你的生命历程将难以找到光明;如果你总是发现朋友的缺点,你么你的人生旅程将难以找到知音;同样,如果你总希望自己完美无缺,假设你的这一愿望真的能如愿以偿,那么你最大的缺点就是没有缺点。

    输出和使能

    TIM3->CR1 = 0X0080;//ARPE使能(此句不配置也行)

TIM3->CR1 |= 0X01;//使能定时器3

     

    下面给出TIM3_CH1及TIM3_CH2的PWM输出代码:

    void PWM_Init_TIM3_CH1(u16 arr, u16 psc)

{

        //1、使能TIM3时钟   

    RCC->APB1ENR |= 1 << 1;//使能TIM3时钟

    //2、配置对应引脚(PA6)的复用输出功能

    GPIOA->CRL &= 0XF0FFFFFF;//PA6清0

    GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)
    GPIOA->ODR |= 1 << 6;//PA6上拉   

    //3、设定计数器主动重装值及是不是分频

    TIM3->ARR = arr;//设定计数器主动重装值(决定PWM的频率)

    TIM3->PSC = psc;//预分频器 0为不分频
    //4、设置PWM的模式
    TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式 
    TIM3->CCMR1 |= 1 << 3;//CH1预装载使能    
    //5、输出使能设置

    TIM3->CCER  |= 1 << 0;//输入/捕获1输出使能

    //6、主动重装载预装载允许位(ARPE) 及 定时器 使能

    TIM3->CR1 = 0X0080;//ARPE使能

    TIM3->CR1 |= 0X01;//使能定时器3
}

    void PWM_Init_TIM3_CH2(u16 arr, u16 psc)

{
    RCC->APB1ENR |= 1 << 1;//使能TIM3时钟
   
    GPIOA->CRL &= 0X0FFFFFFF;//PA7清0
    GPIOA->CRL |= 0XB0000000;//复用功能输出(推挽50MHz输出)
    GPIOA->ODR |= 1 << 7;//PA7上拉

    TIM3->ARR = arr;//设定计数器主动重装值(决定PWM的频率)

    TIM3->PSC = psc;//预分频器 不分频

    TIM3->CCMR1 |= 7 << 12;//CH2 PWM2模式

    TIM3->CCMR1 |= 1 << 11;//CH2预装载使能

    TIM3->CCER  |= 1 << 4;//输入/捕获2输出使能

    TIM3->CR1 = 0X0080;//ARPE使能
    TIM3->CR1 |= 0X01;//使能定时器3
}

 

     

     

     

     

文章结束给大家分享下程序员的一些笑话语录: 马云喜欢把自己包装成教主,张朝阳喜欢把自己包装成明星,李彦宏喜欢把自己包装成的很知性,丁磊喜欢把自己包装的有创意,李开复总摆出一副叫兽的样子。看来的。其实我想说,缺啥补啥,人之常情。

--------------------------------- 原创文章 By

配置和模式
---------------------------------

你可能感兴趣的文章
IE6 IE8下背景图片不显示问题
查看>>
Python 字符串操作基础
查看>>
Informatica bulk与normal模式的深入详解(转)
查看>>
matlab练习程序(二值图像连通区域标记法,一步法)
查看>>
【Python】插入sqlite数据库
查看>>
CSS 类选择器
查看>>
使用中断门
查看>>
PHP语言 -- Ajax 查询数据
查看>>
非彼拉且数列的实现
查看>>
js监听url变化
查看>>
jQuery.extend()方法
查看>>
分段函数 左右 f'正 不等于f'负 则f'导数不存在。所以不能推出f连续是否
查看>>
JAVA学习笔记--初识容器类库
查看>>
java加载dll UnsatisfiedLinkError: no mydll in java.library.path
查看>>
SQL Server 中使用 Try Catch 处理异常
查看>>
625某电商网站数据库宕机故障解决实录(上)
查看>>
图解Team Foundation Server 2013系列
查看>>
NGINX下多个域名泛解析
查看>>
Redisbook学习笔记(1)字典(1)
查看>>
Python smtplib使用实例:网易邮箱向QQ邮箱发送邮件
查看>>