找回密码
 立即注册
查看: 111|回复: 6

关于STC8H1K28-36I-SOP28选择任意中断 | PWM3P(P1.4)这一个管脚可以

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-07-01 09:20:45
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2026-5-29 15:27:43 | 显示全部楼层 |阅读模式
最近在使用STC8H1K28-36I-SOP28写项目,
想要使用P13作为上升沿触发P14作为下降沿触发,
但是我怎么调都调不好,
直接用手接入3.3V电源在拿走,中断里面的灯没有任何反应,
敢问各位大佬这种问题要怎么解决;代码如下:

void EXTI_Init(void)
{
    // 配置 P1.3、P1.4 为输入模
    P1M1 &= ~((1 << 3) | (1 << 4));
    P1M0 &= ~((1 << 3) | (1 << 4));
    P1IM1 &= ~(1 << 3);
    P1IM0 |=  (1 << 3);
    P1IM1 &= ~(1 << 4);
    P1IM0 &= ~(1 << 4);
    P1INTE |= (1 << 3) | (1 << 4);

    P1INTF = (1 << 3) | (1 << 4);
    IE2 |= 0x10


    EA = 1;
}

中断函数如下:
void P1INT_Isr(void) interrupt 13
{
    if(P1INTF & (1 << 3)) // P1.3上升沿
    {
        P1INTF |= (1 << 3);
        LED = !LED1;
    }
    if(P1INTF & (1 << 4)) // P1.4下降沿
    {
        P1INTF |= (1 << 4);
       LED2 = !LED2;
    }
}



回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 2026-5-29 20:23:36 | 显示全部楼层
截图202605292023326853.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-07-01 09:20:45
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 4 天前 | 显示全部楼层

OK感谢,官方都不支持啊
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 4 天前 | 显示全部楼层
截图202607011020253925.jpg


帮利用 STC8H1K28的P1.4的PWM3P功能实现:
上升沿/下降沿 都可以产生中断



截图202607011024373108.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 4 天前 | 显示全部楼层

好的!根据 STC8H 数据手册25.10.8 节 的说明,单个 PWM 口不能同时检测上升沿和下降沿信号,但可以通过芯片内部的两路捕获模块(CC3 + CC4)同时捕获 PWM3P(P1.4)这一个管脚,其中 CC3 捕获上升沿,CC4 捕获下降沿,从而实现在一个引脚上同时响应上升沿和下降沿中断。

来源:STC8H-20260625.md 手册第 25 章「16位高级PWM定时器」- 25.10.8 节 及 25.9.1 节


原理说明

  • P1.4 是 PWM3P 的默认引脚(PWMA_PS 的 C3PS[1:0]=00 时)
  • CC3(捕获通道3)配置为输入模式,映射到 TI3FP3(即 PWM3P 管脚),捕获上升沿
  • CC4(捕获通道4)配置为输入模式,映射到 TI3FP4(也是 PWM3P 管脚,内部同源),捕获下降沿
  • 两个通道各自产生独立的中断标志(CC3IF / CC4IF),在中断服务函数中分别判断即可区分

参考手册 25.10.8 节表格说明:
"CC3+CC4组合可以同时仅捕获PWM3P管脚,也可以同时仅捕获PWM4P管脚"


完整 C 代码(适用于 STC8H1K28,测试频率 11.0592MHz)

// 测试工作频率为 11.0592MHz
#include "stc8h.h"
#include "intrins.h"

void main()
{
    P_SW2 |= 0x80;          // 使能访问 XFR 特殊寄存器

    // 设置 I/O 口模式(根据实际硬件调整)
    P1M0 = 0x00;
    P1M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;

    // ====== CC3 捕获 PWM3P(P1.4) 上升沿 + CC4 捕获 PWM3P(P1.4) 下降沿 ======
    PWMA_CCER2 = 0x00;      // 关闭 CC3/CC4,之后才能修改 CCMR3/CCMR4 的 CCxS 位

    PWMA_CCMR3 = 0x01;      // CC3 为输入模式,映射到 TI3FP3(PWM3P 管脚)
    PWMA_CCMR4 = 0x02;      // CC4 为输入模式,映射到 TI3FP4(也是 PWM3P 管脚)

    PWMA_CCER2 = 0x11;      // 使能 CC3E(bit0)=1, CC4E(bit4)=1
    PWMA_CCER2 |= 0x00;     // CC3P(bit1)=0,CC3 捕获上升沿
    PWMA_CCER2 |= 0x20;     // CC4P(bit5)=1,CC4 捕获下降沿

    PWMA_CR1 = 0x01;        // 使能 PWMA 计数器

    PWMA_IER = 0x18;        // 使能 CC3IE(bit3)=1 和 CC4IE(bit4)=1

    EA = 1;                 // 开启总中断

    while (1);
}

// PWMA 中断服务函数,中断号 26
void PWMA_ISR() interrupt 26
{
    if (PWMA_SR1 & 0x08)    // CC3IF 标志,表示 P1.4 上升沿
    {
        PWMA_SR1 &= ~0x08;  // 清除标志

        // ===== 在这里添加上升沿的处理代码 =====
        // 例如:P37 = ~P37;  (翻转测试引脚)
    }

    if (PWMA_SR1 & 0x10)    // CC4IF 标志,表示 P1.4 下降沿
    {
        PWMA_SR1 &= ~0x10;  // 清除标志

        // ===== 在这里添加下降沿的处理代码 =====
        // 例如:P37 = ~P37;  (翻转测试引脚)
    }
}

关键寄存器速查

寄存器 设置值 说明
PWMA_CCMR3 0x01 CC3 为输入,映射到 TI3FP3(PWM3P)
PWMA_CCMR4 0x02 CC4 为输入,映射到 TI3FP4(也是 PWM3P)
PWMA_CCER2 0x11 使能 CC3E+CC4E
PWMA_CCER2 0x20 CC4P=1(下降沿)
PWMA_IER 0x18 使能 CC3IE(bit3) + CC4IE(bit4)
PWMA_SR1 0x08 / 0x10 CC3IF=上升沿标志 / CC4IF=下降沿标志

注意事项

  1. 只有固定配对才能实现"一个端口双沿中断":CC1+CC2、CC3+CC4、CC5+CC6、CC7+CC8 这四种组合。CC3+CC4 专门适配 PWM3P/PWM4P。
  2. 如果希望 PWM3P 切换到其他引脚(非 P1.4),可通过 PWMA_PS 寄存器的 C3PS[1:0] 位修改(参考手册 25.9.1 节)。
  3. 中断标志必须软件清零,否则会反复进入中断。
  4. 在中断服务函数中,可以通过读取 PWMA_CCR3PWMA_CCR4 获取捕获时的计数器值,用于测量脉冲宽度等高级应用。

如果您需要调整输入滤波以提高抗干扰能力,可以在 PWMA_CCMR3PWMA_CCMR4 的高 4 位设置 IC3F[3:0] / IC4F[3:0] 滤波参数。如需进一步帮助请告诉我!


📖 数据来源:STC8H-20260625.md


🔍 搜索 "帮利用 STC8H1K28的P1.4的 PWM3P功能实现:
上升沿/下降沿 都可以产生中断"

📌 相关论坛讨论

  1. 8H1K28中断3只有下降沿中断/无上升沿中断 | 启动比较器的上升沿中断 P3.7/INT3/CMP+
  2. 求助!STC8H1K16(Pin32) P2口上升沿和下降沿中断
  3. 【AI助手】@AiCube-ISP-V6.96Y中,【自动生成程序】+【查错高手】
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 4 天前 | 显示全部楼层
根据 STC8H 数据手册25.10.8 节 的说明,单个 PWM 口不能同时检测上升沿和下降沿信号
但可以通过芯片内部的两路捕获模块(CC3 + CC4)同时捕获 PWM3P(P1.4)这一个管脚
其中 CC3 捕获上升沿,CC4 捕获下降沿
从而实现在一个引脚上同时响应上升沿和下降沿中断。



===可以
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 4 天前 | 显示全部楼层
还是问 STC 【AI助手】方便
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 14:06 , Processed in 0.075096 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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