本帖最后由 weilan 于 2024-4-8 10:29 编辑
菜鸟一枚,最近需要使用STC8H1K17T的PWMB测量输入PWM波形的高电平时间。
在20240202版本的STC8H数据手册中,第1064页有对从模式控制器的描述。如图所示:
图中显示TI6FP6可被设置为触发源(TRGI)。但是在手册第1103页,从模式的触发源只能
设置为TI5FP5和TI5FP6,如下图。
两者是冲突的。实际实验后发现是后者出错。相关的初始化和中断代码如下:
- u8 dshot_packet[16]; // 存储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[dshot_packet_idx++] = PWMB_CCR5;
- if( dshot_packet_idx >= 16 )
- {
- dshot_packet_idx = 0;
- dshot_ready = 1;
- }
- }
- }
复制代码
此外,第1111页最后一行红字的PWM5_CCER1应当为PWMB_CCER1。
|