- 打卡等级:偶尔看看III
- 打卡总天数:38
- 最近打卡:2024-02-22 09:29:24
中级会员
- 积分
- 285
|
根据官方例程修改了输出引脚——P10 P11 但是烧录后无法正常输出,因此疑惑是什么地方配置错误
#define FOSC 12000000UL
#define PWM_PSC (120-1) //定义PWM时钟预分频系数
#define PWM_PERIOD 2000 //定义PWM周期值
//(频率=FOSC/(PWM_PSC+1)/PWM_PERIOD=50Hz)
#define PWM_DUTY 50 //定义PWM的占空比值
//(占空比=PWM_DUTY/PWM_PERIOD*100%=25%)
void PWM_Init()
{
PWMA_PSCR = PWM_PSC; //配置预分频系数
PWMA_CCER1 = 0x00; //写CCMRx前必须先清零CCxE关闭通道
PWMA_CCER2 = 0x00;
PWMA_CCMR1 = 0x60; //通道模式配置PWM模式1
PWMA_CCMR2 = 0x30; //通道模式配置输出比较模式
PWMA_CCMR3 = 0x30; //通道模式配置输出比较模式
PWMA_CCER1 = 0x55; //配置通道1,2,3输出使能和极性
PWMA_CCER2 = 0x05;
PWMA_ARR = PWM_PERIOD; //设置周期时间
PWMA_ENO = 0x3f; //使能PWM输出
PWMA_PS = 0x00; //高级PWM通道输出脚选择P2.0-P2.5
PWMA_CCR1 = PWM_DUTY; //设置占空比时间
PWMA_CCR2 = PWM_PERIOD/3; //设置OC2起始翻转位
PWMA_CCR3 = PWM_PERIOD/3*2; //设置OC3起始翻转位
PWMA_IER = 0x0d; //使能OC2/OC3比较中断,更新中断
PWMA_BRK = 0x80; //使能主输出
PWMA_CR1 |= 0x01; //开始计时
}
void main()
{
Io_Init();
PWM_Init();
EA = 1; //打开总中断
while (1);
}
void PWMA_ISR() interrupt 26
{
if (PWMA_SR1 & 0x01)
{
PWMA_CCR2 = PWM_PERIOD/3; //设置占空比时间
PWMA_CCR3 = PWM_PERIOD/3*2; //设置占空比时间
PWMA_SR1 &= ~0x01;
}
else if (PWMA_SR1 & 0x04)
{
PWMA_CCR2 = (PWM_PERIOD/3+PWM_DUTY); //设置0C2结束翻转位
PWMA_SR1 &= ~0x04;
}
else if (PWMA_SR1 & 0x08)
{
PWMA_CCR3 = (PWM_PERIOD/3*2+PWM_DUTY); //设置0C3结束翻转位
PWMA_SR1 &= ~0x08;
}
else
{
PWMA_SR1 = 0;
}
}
|
|