找回密码
 立即注册
楼主: 我的用户名

求助:8H1K08 SOP16接编码器读不到脉冲数字 [已解决]

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-04-23 20:59:03
已绑定手机

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2025-2-22 00:38:30 | 显示全部楼层
没用过你这个芯片,但是专门帮你看了手册,功能是有的:
截图202502220042184618.jpg
那使用P5.4口的时候,你得在下载选择里确认 “复位脚用作IO口”


下面的是验证过的:


void PWMA_config(void)
{
        P_SW2 |= 0x80;                //SFR enable   

        PWMA_PSCR = 0;        // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0]+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMA_DTR  = 0;        // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,  
                                        //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMA_ARR    = 0xffff;        // 自动重装载寄存器,  控制PWM周期
        PWMA_CNTR         = 0;                //清零编码器计数器值
        PWMA_SR1    = 0;
        PWMA_SR2    = 0;
        PWMA_PS     = 0;
        PWMA_ENO    = 0;                //IO禁止输出PWM,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P

        PWMA_CCMR1  = 0x01+(10<<4);                // 通道1模式配置, 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
        PWMA_CCMR2  = 0x01+(10<<4);                // 通道2模式配置, 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
        PWMA_SMCR   = 2;                // 编码器模式, 模式1或模式2: 每个脉冲两个边沿加减2.   模式3: 每个脉冲四个边沿加减4.
        PWMA_CCER1  = 0x55;                // 配置通道输入使能和极性, 允许输入, 下降沿
        PWMA_PS    |= 0;                // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
        PWMA_PS    |= (0<<2);        // 选择IO, 0:选择P1.2 P1.3, 1:选择P2.2 P2.3, 2:选择P6.2 P6.3,
        PWMA_IER    = 0x02;                // 使能中断
        PWMA_CR1    = 0x01;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
}




//========================================================================
// 函数: void PWMA_ISR(void) interrupt PWMA_VECTOR
// 描述: PWMA中断处理程序.
// 参数: None
// 返回: none.
// 版本: V1.0, 2021-6-1
//========================================================================
void PWMA_ISR(void) interrupt PWMA_VECTOR
{
        if(PWMA_SR1 & 0x02)        //编码器中断
        {
                PWMA_SR1 &= ~0x02;
                pulse = PWMA_CNTR;        //读取当前编码器计数值
                B_Change = 1;                //标志已有捕捉值
        }
}

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-04-23 20:59:03
已绑定手机

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2025-2-22 00:46:53 | 显示全部楼层
我的*** 发表于 2025-2-21 15:42
有清中断的,估计是配置不对,读不到脉冲数值,我没有STC32的MCU,我用的是STC8H1K08 SOP16,估计是PWM配置 ...

我这个也是8h系列,不是stc32.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2025-2-22 11:50:22 | 显示全部楼层
8H1K08是有P1.2的,但是16脚的8H1K08没有引出P1.2,而P5.4也没有PWM2P的功能,所以16脚的PWMA用不了编码器了。
使用PWMB的P1.7、P5.4可以接编码器,你试试。

点评

梁工,我是一点点抠手册看的回答这个问题,没在手册里看到这句备注。。。  详情 回复 发表于 2025-2-22 15:30
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2025-2-22 15:00:16 | 显示全部楼层
Yim_*** 发表于 2025-2-22 00:46
我这个也是8h系列,不是stc32.

非常感谢前辈不厌其烦的帮助,谢谢!

点评

正好写过这个。。。这不,还没帮上忙。。。  详情 回复 发表于 2025-2-22 15:31
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2025-2-22 15:02:20 | 显示全部楼层
梁*** 发表于 2025-2-22 11:50
8H1K08是有P1.2的,但是16脚的8H1K08没有引出P1.2,而P5.4也没有PWM2P的功能,所以16脚的PWMA用不了编码器 ...

感谢梁老师的指导,我去试试,谢谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-04-23 20:59:03
已绑定手机

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2025-2-22 15:30:39 | 显示全部楼层
梁*** 发表于 2025-2-22 11:50
8H1K08是有P1.2的,但是16脚的8H1K08没有引出P1.2,而P5.4也没有PWM2P的功能,所以16脚的PWMA用不了编码器 ...

梁工,我是一点点抠手册看的回答这个问题,没在手册里看到这句备注。。。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-04-23 20:59:03
已绑定手机

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2025-2-22 15:31:06 | 显示全部楼层
我的*** 发表于 2025-2-22 15:00
非常感谢前辈不厌其烦的帮助,谢谢!

正好写过这个。。。这不,还没帮上忙。。。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2025-2-22 15:37:47 | 显示全部楼层
Yim_*** 发表于 2025-2-22 15:30
梁工,我是一点点抠手册看的回答这个问题,没在手册里看到这句备注。。。 ...

我看了手册加上实验不行之后有点怀疑这个,但是不敢确认,所以才发帖求助的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2025-2-22 15:41:09 | 显示全部楼层
Yim_*** 发表于 2025-2-22 15:31
正好写过这个。。。这不,还没帮上忙。。。

您客气了,您这份热心肠就值得感谢!我们新人学习“最绕人的PWM”确实需要像您这样热心肠的前辈的帮助,可以少走一些弯路

点评

一起努力  详情 回复 发表于 2025-2-22 16:06
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2025-2-22 16:01:07 | 显示全部楼层
梁*** 发表于 2025-2-22 11:50
8H1K08是有P1.2的,但是16脚的8H1K08没有引出P1.2,而P5.4也没有PWM2P的功能,所以16脚的PWMA用不了编码器 ...

试过了,OK了,多谢梁老师的指导,谢谢!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:49 , Processed in 0.172567 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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