碗筷爱钻牛角尖 发表于 2025-9-5 21:37:41

求大神求助 | 已解决

我这个代码的定时器一中断函数进不去,不知道怎么回事哎我太菜了看不出啥原因

国芯人工智能 发表于 2025-9-5 21:38:00

您好,您提到的“定时器一中断函数进不去”是一个比较常见的问题,可能涉及多个方面的原因。以下从硬件配置、中断使能、代码逻辑、寄存器设置等方面进行分析,并给出排查建议。

首先,请确认您的开发环境是否正确配置,包括但不限于:

1. 时钟源配置:确保定时器所使用的时钟源(如内部时钟、外部时钟)已正确启用并稳定。
2. 定时器初始化参数:检查定时器的预分频值、自动重载值是否合理,确保其能够产生预期的中断频率。
3. 中断使能配置:确认定时器的中断通道是否在NVIC中被正确使能,并且中断优先级设置无误。
4. 中断服务函数定义:确保中断服务函数(如TIM1IRQHandler)已正确定义,并且与定时器对应的中断向量匹配。
5. 全局中断使能:在进入主函数前,应确保全局中断已开启(如使用enableirq())。
6. 中断标志位清除:在中断处理函数中,需要及时清除相应的中断标志位,否则可能导致中断无法再次触发。

此外,建议您通过以下方式进一步排查问题:
使用调试工具(如J-Link、ST-Link等)查看定时器是否正常运行,观察计数器是否递增。
检查是否因其他中断或任务抢占导致定时器中断未被响应。
在中断服务函数中添加调试信息(如LED闪烁、串口输出),以判断是否进入中断函数。
查看是否有其他代码错误(如指针越界、内存覆盖等)影响了中断处理流程。

如果以上步骤仍无法解决问题,建议提供具体的代码片段和开发板型号,以便更准确地定位问题所在。

希望以上分析对您有所帮助,祝您早日解决问题!

[本文内容由国芯人工智能辅助生成,仅供参考]

晓飛飛 发表于 2025-9-5 23:36:19

main函数里面第一行应该是P_SW2 |= 0x80,使能扩展SFR访问
尽量先初始化IO,再初始化外设,在while(1)之前 开总中断。

宁阳刘德华 发表于 2025-9-6 02:34:13

void Uart1_Init(void)        //9600bps@24.000MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TL1 = 0x8F;                        //设置定时初始值
        TH1 = 0xFD;                        //设置定时初始值
        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
}
你的串口用的定时器1,和你的定时器冲突了,而且还关闭中断了

碗筷爱钻牛角尖 发表于 2025-9-6 08:48:01

宁阳刘德华 发表于 2025-9-6 02:34
void Uart1_Init(void)        //9600bps@24.000MHz
{
        SCON = 0x50;                //8位数据,可变波特率


原来是这个原因

碗筷爱钻牛角尖 发表于 2025-9-6 09:12:37

晓飛飛 发表于 2025-9-5 23:36
main函数里面第一行应该是P_SW2 |= 0x80,使能扩展SFR访问
尽量先初始化IO,再初始化外设,在while(1)之 ...

已解决 是串口定时器冲突了谢谢了
页: [1]
查看完整版本: 求大神求助 | 已解决