找回密码
 立即注册
查看: 96|回复: 3

关于STC32G12K128的PWMB输入捕获问题的求教

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:120
  • 最近打卡:2025-12-05 09:16:53

11

主题

157

回帖

631

积分

高级会员

积分
631
发表于 2025-11-15 15:15:00 | 显示全部楼层 |阅读模式
请教一个问题,以下是我用P0.0端口作为输入捕获端口来测量外界PWM的周期占空比,请问有哪里设置错了吗?


void PWM_Config(void)                                                        
{
//--------------------------------------------------------------------------------------------------
//说明:1.         PMWB设置:CC1捕获上升沿,CC2捕获下降沿
//                        2.         关于脚位映射。由规格书中26.2可知:PWM5P的输入源为TI5,IC5的输入源为TI5FP5和TI6FP5。
//                                                                                                                                                                                PWM6P的输入源为TI6,IC6的输入源为TI5FP6和TI6FP6。
//                                                                                                                                                                                PWM7P的输入源为TI7,IC7的输入源为TI7FP7和TI8FP7。
//                                                                                                                                                                                PWM8P的输入源为TI8,IC8的输入源为TI7FP8和TI8FP8。
//--------------------------------------------------------------------------------------------------
        PWMB_CCER1 = 0x00;                                        // 关闭通道
                                                                                                                        // 高级PWM一个端口做外部中断,同时捕获上升沿和下降沿。这里使用PWM5的CC5+CC6,可以实现这一功能。即 TI5FP5 和 TI5FP6
        PWMB_CCMR1 = 0x01;                                         // IC5映射在 TI5FP5 上
        PWMB_CCER1 |= 0x01;                // 配置捕获极性为CC1的上升沿, 使能捕获, 0x01:上升沿, 0x03:下降沿
        PWMB_CCMR2 = 0x02;                                         // IC6映射在 TI5FP6 上
        PWMB_CCER1 |= 0x30;                // 配置捕获极性为CC2的下降沿, 使能捕获, 0x10:上升沿, 0x30:下降沿
        PWMB_PS = 0x02;                                                 // 高级PWM通道5输出/输入脚位选择:P0.0
        PWMB_IER = 0x06;                                                 // 使能CC5、CC6捕获中断



        PWMB_PSCRH = (u16)(PWMB_PSC >> 8);                                //预分频24,也就是说计数一格需要1us(24M/24)
        PWMB_PSCRL = (u16)(PWMB_PSC);        

}


void PWMB_ISR() interrupt 27                                                                                                                                                                        
{
        if (PWMB_SR1 & 0x02)                                                                                                                                                        // 当CC5捕获中断标志置1
        {        
                PWMB_SR1 &= ~0x02;                                                                                                                                                        // 清零CC5捕获中断标志
                ccr5 = cap1;                                                                                                                                                                                // 保存当前捕获值        
                cap1 =(PWMB_CCR5H << 8) + PWMB_CCR5L;                                                                                // 读取捕获5计数值CCR5,
                cycle = cap1 - ccr5;                                                                                                                                                // 计算周期计数
        }
        if(PWMB_SR1 & 0x04)                                                                                                                                                                // 当CC6捕获中断标志置1
        {
                PWMB_SR1 &= ~0x04;                                                                                                                                                        // 清零CC6捕获中断标志
                cap2 =(PWMB_CCR6H << 8) + PWMB_CCR6L;                                                                                // 读取捕获6计数值CCR6
                duty = cap2 - cap1;                                                                                                                                                        // 计算高电平计数        
        }
        
        F_Inpwm_Done = 1;                                                                                                                                                                        // IN_PWM端口捕获PWM成功,即IN_PWM控制电机接管成功
        Inpwm_Down_Count = 0;
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-12-18 08:51:37

814

主题

1万

回帖

2万

积分

管理员

积分
21329
发表于 2025-11-15 15:32:50 | 显示全部楼层
截图202511151531562822.jpg


截图202511151532298741.jpg

截图202511151534295149.jpg

截图202511151534564355.jpg

要拷贝 PDF 中的程序,可用 QQ / 微信 截图工具,
截图后,选择【A】, 直接提取文字



截图202511151541447735.jpg
截图202511151543189879.jpg

截图202511151543446990.jpg




回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-12-18 08:51:37

814

主题

1万

回帖

2万

积分

管理员

积分
21329
发表于 2025-11-15 15:38:55 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-12-18 08:51:37

814

主题

1万

回帖

2万

积分

管理员

积分
21329
发表于 2025-11-15 17:35:43 | 显示全部楼层
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-12-19 05:26 , Processed in 0.109638 second(s), 58 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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