找回密码
 立即注册
查看: 1274|回复: 10

STC8H3K32S2单片机P口中断触发问题

[复制链接]

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2024-8-6 13:54:42 | 显示全部楼层 |阅读模式
void Exti_config()
{
        P_SW2 |=0x80;        // 配置P4.6为外部中断下降沿触发
        P4M1 = 0x00;          // 设置P4M1寄存器,准双向口
        P4M0 = 0x00;          // 设置P4M0寄存器
       
        P4IM1 = 0x00;         //上升沿触发
        P4IM0 = 0x40;         //上升沿触发
       
       
        PINIPH = 0x40;
        PINIPL = 0x00;         //中断优先级配置HL:10优先级为2
       
        P4INTE = 0x40;         // 置位P4INTE寄存器的第6位,P4端口中断使能
        P4INTF = 0x40;         // 置位P4INTF寄存器的第6位,P4端口中断标志位

}

void        Timer2_config(void)
{
        TIM_InitTypeDef                TIM_InitStructure;                  //结构定义
        TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;  //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
        TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;         //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
        TIM_InitStructure.TIM_ClkOut    = DISABLE;              //是否输出高速脉冲, ENABLE或DISABLE
        TIM_InitStructure.TIM_Value     = 65536UL- (MAIN_Fosc / 2500UL);        //65536UL - (MAIN_Fosc / 1005UL);   //初值,
        TIM_InitStructure.TIM_Run       = DISABLE;               //是否初始化后启动定时器, ENABLE或DISABLE
        Timer_Inilize(Timer2,&TIM_InitStructure);               //初始化Timer0          Timer0,Timer1,Timer2,Timer3,Timer4
        NVIC_Timer2_Init(ENABLE,Priority_3);    //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}


void Timer2_ISR_Handler (void) interrupt TMR2_VECTOR                //进中断时已经清除标志
{
        de = P46;        //读取P46电平状态
        bit_data <<= 1;
        bit_data |= de;        //存到bit_data里
        bit_index++;                                        //移位
        P32 = 1;
        if(bit_index == 3)
        {        //接收正常
                if(bit_data == 0x0e)           //是否符合1110,对应1
                {       
                        byte_data <<= 1;
                        byte_data |= 0x01;
                        byte_index++;
                       
                        bit_data = 0x01;
                        bit_index = 0;        //重置
                }
                else if(bit_data == 0x08)  //是否符合1000,对应0
                {
                        byte_data <<= 1;
                        byte_data |= 0x00;
                        byte_index++;
                       
                        bit_data = 0x01;
                        bit_index = 0;        //重置
                }
                else
                {        //接收不正常,舍弃这一组data
                        err_flag = 1;
                        bit_data = 0x01;
                        bit_index = 0;
                       
                        byte_data = 0x00;
                        byte_index = 0;
                       
                        OOK_Rev_Buffer[0] = OOK_Rev_Buffer[1] = OOK_Rev_Buffer[2] = 0x00;
                        buf_index = 0;
                       
                        Timer2_Stop();
                }
       
                if(byte_index == 8 )                        //一字节码接收完毕********************
                {       
                        OOK_Rev_Buffer[buf_index] = byte_data;
                        buf_index++;
                       
                        byte_data = 0x00;
                        byte_index = 0;       
                        test_flag = 0xff;
//                                test_flag1 = 0xee;
                }
                Timer2_Stop();
        }
        else
        {
                P32 =0;
        }
}



void P4_ISR (void) interrupt 13                //进中断时已经清除标志
{       
        Timer2_Run(1);        //开启定时器
        test_flag = 0xff;
        P4INTF = 0x00;        //软件清除中断标志位       
}

求助,上电后一段时间就触发不了P4口外部中断的原因
       

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:473
  • 最近打卡:2025-07-01 09:00:47

33

主题

2439

回帖

5198

积分

论坛元老

积分
5198
发表于 2024-8-6 15:05:40 | 显示全部楼层
先关注一下你芯片的版本,,B版似乎没有IO中断功能
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2024-8-6 17:07:29 | 显示全部楼层
_奶*** 发表于 2024-8-6 15:05
先关注一下你芯片的版本,,B版似乎没有IO中断功能

1
微信图片_20240806170646.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:473
  • 最近打卡:2025-07-01 09:00:47

33

主题

2439

回帖

5198

积分

论坛元老

积分
5198
发表于 2024-8-6 17:17:37 | 显示全部楼层

得看你芯片上最后一行的最后一个字母,,,,
不过看你之前的帖子,,似乎用起来是存在的,,,反正最好看看吧,,别让大家分析一通,最后是硬件没有这个东西就尴尬了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2024-8-6 17:33:16 | 显示全部楼层
上电之后有一段时间可以触发,但是过一段时间之后就触发不了了,不知道死在哪里了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:483
  • 最近打卡:2025-07-02 00:02:29
已绑定手机

19

主题

3233

回帖

5357

积分

论坛元老

积分
5357
发表于 2024-8-6 17:41:52 来自手机 | 显示全部楼层
从0开始的STC 发表于 2024-8-6 17:33
上电之后有一段时间可以触发,但是过一段时间之后就触发不了了,不知道死在哪里了 ...

可以使用uart定时发送触发数据。
回复 支持 反对

使用道具 举报 送花

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2024-8-7 08:50:45 | 显示全部楼层
最后一行最后一个字母是B,但确实是触发外部中断了
上面波形是P46的,上升沿触发外部中断,开定时器,
下面波形是P32的,定时器里给P32强制拉高拉低
回复 支持 反对

使用道具 举报 送花

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2024-8-7 08:50:46 | 显示全部楼层
最后一行最后一个字母是B,但确实是触发外部中断了
上面波形是P46的,上升沿触发外部中断,开定时器,
下面波形是P32的,定时器里给P32强制拉高拉低
微信图片_20240807085009.jpg
回复 支持 反对

使用道具 举报 送花

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2024-8-7 10:43:42 | 显示全部楼层
有时候引脚电平没变化,但是外部中断触发了,P32也走了一个时序
引脚电平连续变化,需要连续触发外部中断的时候,P32反而拉不低了
找不到原因
微信图片_20240807104010.jpg

点评

1.引脚电平没变化,但是外部中断触发了,P32也走了一个时序 ---P46端口尝试改成高阻输入+上拉,程序里检测到中断直接取反一个IO试一下,看看是不是有错误进入中断的问题。 2.引脚电平连续变化,需要连续触发外部中  详情 回复 发表于 2024-8-7 13:24
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:136
  • 最近打卡:2025-06-19 15:40:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-8-7 13:24:45 | 显示全部楼层
从0开*** 发表于 2024-8-7 10:43
有时候引脚电平没变化,但是外部中断触发了,P32也走了一个时序
引脚电平连续变化,需要连续触发外部中断的 ...

1.引脚电平没变化,但是外部中断触发了,P32也走了一个时序
---P46端口尝试改成高阻输入+上拉,程序里检测到中断直接取反一个IO试一下,看看是不是有错误进入中断的问题。

2.引脚电平连续变化,需要连续触发外部中断的时候,P32反而拉不低了
---感觉像是定时器处理那部分没写好,连续触发拉不低的话先用IO反馈看下中段是否能正常进入,
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-2 02:00 , Processed in 1.251628 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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