weilan 发表于 2024-4-5 23:58:42

STC8H规格书PWMB的描述错误

本帖最后由 weilan 于 2024-4-8 10:29 编辑

      菜鸟一枚,最近需要使用STC8H1K17T的PWMB测量输入PWM波形的高电平时间。
在20240202版本的STC8H数据手册中,第1064页有对从模式控制器的描述。如图所示:
                     


图中显示TI6FP6可被设置为触发源(TRGI)。但是在手册第1103页,从模式的触发源只能
设置为TI5FP5和TI5FP6,如下图。
                     
两者是冲突的。实际实验后发现是后者出错。相关的初始化和中断代码如下:
u8 dshot_packet; // 存储dshot协议中传输的16位占空比数据
u16 dshot_packet_idx = 0;
bit dshot_ready = 0;

void pwmb_init()
{
    PWMB_PS       = 0x04; // 使能输入脚为PWM6 -> P5.4
    SET_BIT(P5M1, 4);
    RESET_BIT(P5M0, 4);
    PWMB_CCER1 = 0x00; // 关闭所有输出通道
    PWMB_CCMR1 = 0x02; // 配置PWM5为输入模式,IC5映射到TI6FP5上,进入CC5
    PWMB_CCMR2 = 0x01; // 配置PWM5为输入模式,IC6映射到TI5FP6上,进入CC6
    PWMB_CCER1 = 0x13; // 使能CC5/CC6输入捕获,CC6捕获上升沿,CC5捕获下降沿
    PWMB_PSCRH = 0x00;
    PWMB_PSCRL = 0x00;
    PWMB_IER   = 0x02; // 使能CC5中断
    PWMB_CCR6 = 0;
    PWMB_SMCR= 0x64; // 从模式触发源为TI6FP6,触发模式为复位模式
    PWMB_CR1   = 0x01;
}

void pwmb_isr() PWMB_VECTOR
{
    if( PWMB_SR1 & 0x02 ) // CC5中断,接收DSHOT数据包
    {
      PWMB_SR1 &= ~0x02;
      dshot_packet = PWMB_CCR5;
      if( dshot_packet_idx >= 16 )
      {
            dshot_packet_idx = 0;
            dshot_ready = 1;
      }
    }
}
此外,第1111页最后一行红字的PWM5_CCER1应当为PWMB_CCER1。

国学芯用 发表于 2024-4-7 08:47:46

收到,马上反馈给我同事

乘风飞扬 发表于 2024-4-7 09:33:21

编码器模式设置参考后面的SMSA/SMSB介绍

PWM5_CCER1应该是笔误,后续版本进行修改。

weilan 发表于 2024-4-8 10:28:41

乘风飞扬 发表于 2024-4-7 09:33
编码器模式设置参考后面的SMSA/SMSB介绍

PWM5_CCER1应该是笔误,后续版本进行修改。 ...

您好,不是编码器模式,而是触发源选择TSB中,说明触发源TRGI可以选择为TI5FP5和TI5FP6,而框图中却是TI5FP5和TI6FP6。可以看我1楼红箭头标出来的路线。至于编码器模式,我没有实际进行测试。
页: [1]
查看完整版本: STC8H规格书PWMB的描述错误