- 打卡等级:以坛为家I
- 打卡总天数:275
- 最近打卡:2025-06-16 10:45:51
已绑定手机
金牌会员
STC-镇江-老蔡
- 积分
- 1287
|
各位大师我有个问题关于PWM方面的:
首先我用PWMBCC7/CC8捕获一个波形的上升沿和下降沿程序设定如下:
//设定PWMB捕获P3^4脚波形,并初始化程序
void PWMB_INIT()
{
PWMB_PS = 0x40; //设定P3^4脚为捕获引脚
PWMB_CCER2 = 0x00; //先清零后写入
PWMB_CCMR3 = 0x42; // 配置了一个0.4us的滤波器,抗干扰
PWMB_CCMR4 = 0x41; //(滤波器16;CC1连续捕获映射到TI1FP上)
PWMB_CCER2 = 0x31; //CC7捕获上升沿,CC8捕获下降沿
PWMB_IER = 0x18; //启动CC7/CC8捕获中断
PWMB_CR1 = 0x01; //启动定时器
IP2 |= 0x08; //中断优先级3最高级
IP2H |= 0x08; //中断优先级3最高级
}
其次我用PWMB的ENO5P比较输出一个4KHZ方波程序如下:
void PWMB_Init_4kHz(void)
{
//PWMB_PS = 0xfc; //高级PWM功能脚切换寄存器;切换至P2.0脚;
PWMB_CCER1 = 0x00; //操作前必须要先清零;
PWMB_CCMR1 = 0x60; //捕获/比较模式寄存器;
PWMB_CCER1 = 0x01; //捕获/比较使能寄存器;
PWMB_PSCR = 0x0e; //预分频寄存器,可以和PWMB_ARR共同决定分频值,从而决定输出波形的频率或周期
PWMB_CCR5 = 250; //捕获比较寄存器,可以用来设置波形的占空比;
PWMB_ARR = 0x01f3; //自动从装载寄存器,用来设置预分频值,从而设定输出波形的周期值;
PWMB_ENO = 0x01; //输出使能寄存器,使能PWM1P输出;
PWMB_CR1 = 0x01; //控制寄存器,使能计数;
PWMB_BKR = 0x80; //刹车寄存器,主输出使能开启;
}
另外我用PWMA做一个精度为1us,的定时器,用来记录CC7/CC8捕获的时间;
// PWM变换定时器初始化函数
void PWM_Transform_Timer_Init(void)
{
PWMA_PSCRH = 0x00; // 1Mhz输出,分频因子1/30,1us定时精度;预分频器的预分频值29,30000000/(29+1)=1000000hz,1us定时精度
PWMA_PSCRL = 0x1d;
PWMA_ARRH = 0xff; //计数值并不会超出上限,所以设置成0xff;
PWMA_ARRL = 0xff;
}
结果发现4KHZ方波不能正常输出了,单独实验是可以正常输出的,我觉得是不是和设定中有冲突,但不知道怎么解决
请大师们帮我分析一下
|
-
|