Electricity/中断调试测试.md

2.8 KiB
Raw Blame History

中断调试测试指南

问题分析

GPIO19一直保持低电平说明定时器中断没有正常运行。可能的原因包括

1. 时钟配置问题

  • APB_Clock_Freq计算错误
  • TIMER0时钟未使能
  • 时钟频率配置不正确

2. 中断配置问题

  • NVIC中断未正确使能
  • 中断向量表配置错误
  • 中断优先级设置问题

3. 定时器配置问题

  • 定时器重装载值计算错误
  • 定时器控制寄存器配置错误
  • 定时器时钟源配置错误

修复措施

1. 时钟配置修复

  • 修复了ClockInit()中清零APB时钟使能的问题
  • 修复了wavegen_Init()中覆盖时钟使能的问题
  • 使用|=操作符避免覆盖TIMER0时钟使能

2. 添加调试信息

  • TIMER0_Init()中添加重装载值输出
  • main()中添加APB时钟频率输出
  • 在中断处理函数中添加调试输出

3. 中断处理优化

  • 每100次中断输出一次调试信息
  • 每1000次中断翻转一次GPIO19
  • 添加GPIO状态监控

测试步骤

1. 编译和烧录

  1. 重新编译项目
  2. 烧录到目标芯片
  3. 连接UART串口

2. 观察输出

通过UART观察以下信息

APB_Clock_Freq: 32000000 Hz
TIMER0重装载值: 32000
TIMER0_Init完成中断周期: 1 ms
========================================
定时器电刺激综合测试启动
========================================
Timer IRQ: 100, GPIO19 State: 0
Timer IRQ: 200, GPIO19 State: 0
...
Timer IRQ: 1000, GPIO19 State: 1
1 s - 定时器运行正常,电刺激同步输出中

3. 硬件测试

  • 用示波器或万用表监测GPIO19
  • 观察GPIO19是否每1秒翻转一次
  • 检查GPIO19的电平变化

预期结果

正常情况

  • UART输出显示定时器中断正常运行
  • GPIO19每1秒翻转一次高电平↔低电平
  • 中断计数器正常递增

异常情况

  • 如果APB_Clock_Freq为0说明时钟配置有问题
  • 如果TIMER0重装载值为0说明定时器配置有问题
  • 如果没有中断输出,说明中断未正确使能

进一步调试

如果问题仍然存在,请检查:

1. 芯片型号

  • 确认芯片支持TIMER0外设
  • 检查芯片的时钟配置

2. 硬件连接

  • 确认GPIO19引脚连接正确
  • 检查电源和地连接

3. 编译器设置

  • 确认中断向量表正确配置
  • 检查编译器优化设置

常见问题解决

1. APB_Clock_Freq为0

  • 检查时钟配置结构体
  • 确认HSI频率设置正确

2. 中断不触发

  • 检查NVIC中断使能
  • 确认中断向量表配置
  • 检查定时器控制寄存器

3. GPIO不翻转

  • 检查GPIO初始化
  • 确认GPIO方向设置
  • 验证GPIO翻转函数

联系支持

如果问题仍然存在,请提供:

  1. 芯片型号和版本
  2. 完整的UART输出日志
  3. 硬件连接图
  4. 编译器版本和设置