- 打卡等级:偶尔看看I
- 打卡总天数:11
- 最近打卡:2025-03-10 12:50:25
已绑定手机
中级会员
- 积分
- 254
|
本帖最后由 capcomsnk 于 2024-6-29 02:53 编辑
u16 PWM_LOW;
u8 pwm_low = 0;
// 预分频 24Mhz /(23+1)=1Mhz 为 1us。
PWMA_PSCRH = 0x00; // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1),
PWMA_PSCRL = 0x17; // 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
//(CC3捕获TI4上升沿,CC2捕获TI4下降沿),在CC4中断里用CC4捕获值减去CC3的捕获值,得到高电平宽度。
PWMA_CCER2 = 0x00;
PWMA_CCMR3 |= 0x30; // 采样8次
PWMA_CCMR3 |= 0x02; // CC3为输入模式,且映射到TI4FP3上
PWMA_CCMR4 |= 0x30; // 采样8次
PWMA_CCMR4 |= 0x01; // CC4为输入模式,且映射到TI4FP4上
PWMA_CCER2 = 0x11; // 使能CC3/CC4上的捕获功能
PWMA_CCER2 |= 0x00; // 设置捕获极性为CC3的上升沿
PWMA_CCER2 |= 0x20; // 设置捕获极性为CC4的下降沿
PWMA_CR1 = 0x01; // 使能计数器
PWMA_PS |= 0x40; // 选择捕获脚位 P2.6
PWMA_IER = 0x08; // 使能CC3获中断 测低电平
void PWMA_ISR_Handler(void) interrupt PWMA_VECTOR
{
if (PWMA_SR1 & 0x08) // CC3IF 捕获/比较中断
{
PWMA_SR1 &= ~0x08;
cnt1 = (PWMA_CCR3H << 8) + PWMA_CCR3L;
cnt2 = (PWMA_CCR4H << 8) + PWMA_CCR4L;
cnt = cnt1 - cnt2; //测低电平
PWM_LOW[pwm_low] = cnt;//低电平脉宽赋值给数据
pwm_low++;
if (pwm_low > 16)
pwm_low = 0;
}
}
上面的代码是连接获取16个低电平脉宽的值,根据样例修改而来,已经可以捕获且可进入中断。
实际的波形(下图)低电平的脉宽都是一样的。
波形图
而捕获的值却是
数据
不知是哪里没有操作对。 是不是计时器溢出导致的?如果是的话,该怎么弄?谢谢了。
|
|