找回密码
 立即注册
查看: 708|回复: 1

PWM的应用

[复制链接]

11

主题

-1

回帖

59

积分

注册会员

积分
59
发表于 2023-9-5 12:32:33 | 显示全部楼层 |阅读模式
本帖最后由 tohturusul 于 2023-9-5 12:40 编辑

PWM实现的步骤如下四种
1. 时钟源选择
    时钟源选择,这里默认为22.1184mHZ
2. 时基单元
  1. PWMA_PSCRH = 0;                //1分频
  2. PWMA_PSCRL = 0;
  3. PWMA_ARRH = (u8)(PWM_ARR>>8);
  4. PWMA_ARRL = (u8)(PWM_ARR);
  5. PWMA_CCR1H = (u8)(PWM_CCR>>8);
  6. PWMA_CCR1L = (u8)(PWM_CCR);
复制代码
3. 输入输出的引脚配置
  1. PWMA_ENO = 0X00;                        //使能PWM1p通道输出
  2. PWMA_ENO |= 0X01;
  3.         
  4. PWMA_PS =0x00;                                //选择PWM1从P60引脚输出
  5. PWMA_PS |= (2<<0);
复制代码
4.输入输出模式设置
  1. PWMA_CCER1 = 0X00;
  2. PWMA_CCMR1 = 0X68;                        //pwm模式1 配置置位输出
  3. PWMA_CCER1 = 0x01;                        //开启输出比较通道
  4. PWMA_BKR = 0X80;                        //使能主输出
  5. PWMA_CR1 |= 0X01;                        //启动计数器
复制代码
上面演示的是示波器显示的代码,下面灯的点亮来判断的代码是否正确的案例
注意:步骤的前两个一样。
3.输入输出的引脚配置

  1. PWMA_ENO = 0X00;                        //使能PWM1n通道输出
  2. PWMA_ENO |= 0X02;
  3.         
  4. PWMA_PS =0x00;                                //选择PWM1从P60引脚输出
  5. PWMA_PS |= (2<<0);        
复制代码
注意如果是用的时候屠龙刀三.2 的话使用下面的代码。能点亮P2.1灯的话,表示你的代码正确。

  1. PWMA_ENO = 0X00;                        //使用PWM1通道输出
  2. PWMA_ENO |= 0X02;                        // 如果是点亮灯设置0X02
  3. PWMA_PS = 0X00;                                //选择PWM1从P20引脚输出
  4. PWMA_PS |= (1<<0);                        // 点亮P2.1灯
复制代码
4.输入输出模式设置

  1. PWMA_CCER1 = 0X00;
  2. PWMA_CCMR1 = 0X68;                        //pwm模式1 配置置位输出
  3. PWMA_CCER1 = 0x04;                        //开启输出比较通道
  4.         
  5. PWMA_BKR = 0X80;                        //使能主输出
  6. PWMA_CR1 |= 0X01;                        //启动计数器
复制代码
注意如果是用的时候屠龙刀三.2 的话使用下面的代码。能点亮P2.1灯的话,表示你的代码正确。

PWMA_CCER1 = 0X00;
PWMA_CCMR1 = 0X68;                        //pwm模式1 配置置位输出
PWMA_CCER1 = 0x04;                        //开启输出比较通道
        
PWMA_BKR = 0X80;                        //使能主输出
PWMA_CR1 |= 0X01;                        //启动计数器

总代码
  1. void Pwm_Init(void)                        //PWMA的初始化
  2. {
  3.         //1.时钟源选择  这里不改,默认22.1184mhz
  4.         
  5.         //2.时基单元选择
  6.         PWMA_PSCRH = 0;                                //1分频
  7.         PWMA_PSCRL = 0;
  8.         
  9.         PWMA_ARRH  = (u8)(PWM_ARR>>8);
  10.         PWMA_ARRL  = (u8)(PWM_ARR);
  11.         
  12.         PWMA_CCR1H  = (u8)(PWM_CCR>>8);
  13.         PWMA_CCR1L  = (u8)(PWM_CCR);        
  14.         
  15.         
  16.         //3.输入输出的引脚配置
  17.         PWMA_ENO = 0X00;                        //使能PWM1p通道输出
  18.         PWMA_ENO |= 0X02;
  19.         
  20.         PWMA_PS =0x00;                                //选择PWM1从P60引脚输出
  21.         PWMA_PS |= (1<<0);        
  22.         
  23.         //4.输入输出模式设置
  24.         PWMA_CCER1 = 0X00;
  25.         PWMA_CCMR2 = 0X68;                        //pwm模式1 配置置位输出
  26.         PWMA_CCER1 = 0x04;                        //开启输出比较通道
  27.         
  28.         PWMA_BKR = 0X80;                        //使能主输出
  29.         
  30.         PWMA_CR1 |= 0X01;                        //启动计数器
  31. }
复制代码
把这个函数调用到主函数里面使用就可以啦。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:374
  • 最近打卡:2025-06-17 07:50:49

20

主题

221

回帖

953

积分

高级会员

积分
953
发表于 2024-11-5 08:25:42 | 显示全部楼层
好文章,已收藏学习。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-19 04:15 , Processed in 0.133622 second(s), 56 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表