本帖最后由 tohturusul 于 2023-9-5 12:40 编辑
PWM实现的步骤如下四种
1. 时钟源选择
时钟源选择,这里默认为22.1184mHZ
2. 时基单元
- PWMA_PSCRH = 0; //1分频
- PWMA_PSCRL = 0;
-
- PWMA_ARRH = (u8)(PWM_ARR>>8);
- PWMA_ARRL = (u8)(PWM_ARR);
-
- PWMA_CCR1H = (u8)(PWM_CCR>>8);
- PWMA_CCR1L = (u8)(PWM_CCR);
复制代码
3. 输入输出的引脚配置
- PWMA_ENO = 0X00; //使能PWM1p通道输出
- PWMA_ENO |= 0X01;
-
- PWMA_PS =0x00; //选择PWM1从P60引脚输出
- PWMA_PS |= (2<<0);
复制代码
4.输入输出模式设置
- PWMA_CCER1 = 0X00;
- PWMA_CCMR1 = 0X68; //pwm模式1 配置置位输出
- PWMA_CCER1 = 0x01; //开启输出比较通道
-
- PWMA_BKR = 0X80; //使能主输出
- PWMA_CR1 |= 0X01; //启动计数器
复制代码
上面演示的是示波器显示的代码,下面灯的点亮来判断的代码是否正确的案例
注意:步骤的前两个一样。
3.输入输出的引脚配置
- PWMA_ENO = 0X00; //使能PWM1n通道输出
- PWMA_ENO |= 0X02;
-
- PWMA_PS =0x00; //选择PWM1从P60引脚输出
- PWMA_PS |= (2<<0);
复制代码
注意:如果是用的时候屠龙刀三.2 的话使用下面的代码。能点亮P2.1灯的话,表示你的代码正确。
- PWMA_ENO = 0X00; //使用PWM1通道输出
- PWMA_ENO |= 0X02; // 如果是点亮灯设置0X02
-
- PWMA_PS = 0X00; //选择PWM1从P20引脚输出
- PWMA_PS |= (1<<0); // 点亮P2.1灯
复制代码
4.输入输出模式设置
- PWMA_CCER1 = 0X00;
- PWMA_CCMR1 = 0X68; //pwm模式1 配置置位输出
- PWMA_CCER1 = 0x04; //开启输出比较通道
-
- PWMA_BKR = 0X80; //使能主输出
- PWMA_CR1 |= 0X01; //启动计数器
复制代码
注意:如果是用的时候屠龙刀三.2 的话使用下面的代码。能点亮P2.1灯的话,表示你的代码正确。
PWMA_CCER1 = 0X00;
PWMA_CCMR1 = 0X68; //pwm模式1 配置置位输出
PWMA_CCER1 = 0x04; //开启输出比较通道
PWMA_BKR = 0X80; //使能主输出
PWMA_CR1 |= 0X01; //启动计数器
总代码
- void Pwm_Init(void) //PWMA的初始化
- {
- //1.时钟源选择 这里不改,默认22.1184mhz
-
- //2.时基单元选择
- PWMA_PSCRH = 0; //1分频
- PWMA_PSCRL = 0;
-
- PWMA_ARRH = (u8)(PWM_ARR>>8);
- PWMA_ARRL = (u8)(PWM_ARR);
-
- PWMA_CCR1H = (u8)(PWM_CCR>>8);
- PWMA_CCR1L = (u8)(PWM_CCR);
-
-
- //3.输入输出的引脚配置
- PWMA_ENO = 0X00; //使能PWM1p通道输出
- PWMA_ENO |= 0X02;
-
- PWMA_PS =0x00; //选择PWM1从P60引脚输出
- PWMA_PS |= (1<<0);
-
- //4.输入输出模式设置
- PWMA_CCER1 = 0X00;
- PWMA_CCMR2 = 0X68; //pwm模式1 配置置位输出
- PWMA_CCER1 = 0x04; //开启输出比较通道
-
- PWMA_BKR = 0X80; //使能主输出
-
- PWMA_CR1 |= 0X01; //启动计数器
- }
-
复制代码
把这个函数调用到主函数里面使用就可以啦。
|