找回密码
 立即注册
查看: 160|回复: 4

STC32G12K128的PWMA编码器模式支持PWM3P,PWM4P吗

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:398
  • 最近打卡:2026-04-02 08:30:39
已绑定手机

9

主题

79

回帖

1721

积分

金牌会员

积分
1721
发表于 2026-1-23 10:39:55 | 显示全部楼层 |阅读模式
线路板是之前绘制的,现在增加了编码器输入,只能如下配置引脚:

/*************  功能说明    **************
PWMA模块工作于编码器模式
编码器A相输入: P2.4 PWM3P
编码器B相输入: P1.0 PWM1P
编码器模式, 模式3: 每个脉冲两个边沿加减

void PWMA_config(void)
{
    u8  ps;

    // 高阻输入 P1.0,P1.1
    P1M0 = 0x00; P1M1 = 0x03;
    // 高阻输入 P2.2,P2.3,P2.4
    P2M0 = 0x00; P2M1 = 0x1c;

    P_SW2 |= 0x80;      //SFR enable   
    PWMA_ENO    = 0;    // IO输出禁止
    PWMA_IER    = 0;    // 禁止中断
    PWMA_SR1    = 0;    // 清除状态
    PWMA_SR2    = 0;    // 清除状态
    ps    = 0;
    PWMA_ISR_En = 0;

    PWMA_PSCRH = 0;     // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
    PWMA_PSCRL = 0;
    PWMA_ARRH  = 0x7f;  // 自动重装载寄存器,  控制PWM周期
    PWMA_ARRL  = 0xff;
    PWMA_CNTRH  = 0;    //清零编码器计数器值
    PWMA_CNTRL  = 0;

    PWMA_CCMR1  = 0x01+(10<<4); // 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
    PWMA_CCMR2  = 0x01+(10<<4); // 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
    PWMA_SMCR   = 3;            // 编码器模式, 模式1或模式2: 每个脉冲两个边沿加减2.   模式3: 每个脉冲四个边沿加减4.
    PWMA_CCER1  = 0x55;         // 配置通道输入使能和极性, 允许输入, 下降沿
    PWMA_CCER2  = 0x55;         // 捕获/比较使能寄存器2
    ps    |= 0;                 // PWM1P选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
    //ps    |= (1<<2);          // PWM2P选择IO, 0:选择P5.4 P1.3, 1:选择P2.2 P2.3, 2:选择P6.2 P6.3,
    ps    |= (1<<4);            // PWM3P选择IO, 0:选择P1.4 P1.5, 1:选择P2.4 P2.5, 2:选择P6.4 P6.5,
    //ps    |= (0<<6);          // PWM4P选择IO, 0:选择P1.6 P1.7, 1:选择P2.6 P2.7, 2:选择P6.6 P6.7, 3:选择P3.4 P3.3
    PWMA_PS     = ps;           // 选择IO

    PWMA_ISR_En |= 0x02;        // 使能中断
    PWMA_IER    = PWMA_ISR_En;  // 设置允许通道1~4中断处理
    PWMA_CR1    = 0x01;         // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
}
//  PWMA_PS   = (0<<6)+(0<<4)+(0<<2)+0; //选择IO, 4项从高到低(从左到右)对应PWM1 PWM2 PWM3 PWM4, 0:选择P1.x, 1:选择P2.x, 2:选择P6.x,
//  PWMA_PS    PWM4N PWM4P    PWM3N PWM3P    PWM2N PWM2P    PWM1N PWM1P
//    00       P1.7  P1.6     P1.5  P1.4     P1.3  P5.4     P1.1  P1.0
//    01       P2.7  P2.6     P2.5  P2.4     P2.3  P2.2     P2.1  P2.0
//    02       P6.7  P6.6     P6.5  P6.4     P6.3  P6.2     P6.1  P6.0
//    03       P3.3  P3.4      --    --       --    --       --    --


void PWMA_ISR(void) interrupt PWMA_VECTOR
{
    u8  sr1, sr2;
    sr1 = PWMA_SR1; //为了快速, 中断标志用一个局部变量处理
    PWMA_SR1 = 0;   //清除中断标志
    sr2 = PWMA_SR2; //为了快速, 中断标志用一个局部变量处理
    PWMA_SR2 = 0;   //清除中断重复标志
    sr1 &= PWMA_ISR_En; //每个通道可以单独允许中断处理

    if(sr1 & 0x02)  //通道1 编码器1B边沿中断

    {
        Pulse = ((u16)PWMA_CNTRH << 8) + (u16)PWMA_CNTRL;   //读取当前编码器计数值
        B_Change = 1;       //标志已有捕捉值
    }   

}

结果是,Pulse一直为0,不知道是哪里的问题?
我用示波器测量,P1.0,P2.4端口脉冲输入正常
请教大家帮忙看看,是不是PWMA编码器模式不支持PWM3P,PWM4P呀?


回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:725
  • 最近打卡:2026-03-30 12:09:34
已绑定手机

97

主题

7246

回帖

1万

积分

超级版主

积分
13798
发表于 2026-1-23 12:13:45 | 显示全部楼层
编码器:
PWM1P、PWM2P
PWM5、PWM6
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:398
  • 最近打卡:2026-04-02 08:30:39
已绑定手机

9

主题

79

回帖

1721

积分

金牌会员

积分
1721
发表于 2026-1-23 12:40:44 | 显示全部楼层
Debu*** 发表于 2026-1-23 12:13
编码器:
PWM1P、PWM2P
PWM5、PWM6

明白了,谢谢
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:696
  • 最近打卡:2026-03-30 09:54:25
已绑定手机
已实名认证

130

主题

3387

回帖

8829

积分

版主

积分
8829
发表于 2026-1-23 13:40:59 | 显示全部楼层
编码器模式只能固定几个引脚,具体可以查看从模式控制寄存器(PWMx_SMCR)的定义
截图202601231340264421.jpg
截图202601231340335372.jpg
所以PWMA只能在PWM1P,PWM2P上
PWMB只能在PWM5,PWM6上
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:398
  • 最近打卡:2026-04-02 08:30:39
已绑定手机

9

主题

79

回帖

1721

积分

金牌会员

积分
1721
发表于 2026-1-23 14:09:45 | 显示全部楼层
王*** 发表于 2026-1-23 13:40
编码器模式只能固定几个引脚,具体可以查看从模式控制寄存器(PWMx_SMCR)的定义

谢谢,目前只能改为端口中断方式计数了
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-2 23:01 , Processed in 0.110619 second(s), 63 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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