RT-Thread论坛
直播中

王超

8年用户 1399经验值
私信 关注
[问答]

psoc62开发板 adc一直执行就爆怎么解决?


代码用的rtt手册中的例程 但是仍然会报错



回帖(1)

jfsky

2025-9-19 17:42:19

针对PSOC62开发板在运行RT-Thread ADC例程时频繁崩溃的问题,以下是系统化的解决方案:


1. 堆栈溢出排查(关键步骤)


   // 在RT-Thread的rtconfig.h中增大主线程栈大小
   #define RT_MAIN_THREAD_STACK_SIZE 2048  // 默认512字节,建议提升至2048+


  • 检查线程栈使用:在msh中使用free命令查看栈剩余空间,若接近0则需增加大小。


2. ADC硬件配置优化


   static void adc_init(void)
   {
       struct rt_adc_device *adc_dev = RT_NULL;
       adc_dev = (struct rt_adc_device *)rt_device_find("adc");
       // 增加配置检查
       RT_ASSERT(adc_dev != RT_NULL);

       // 明确设置采样周期(关键)
       rt_adc_control(adc_dev, RT_ADC_CMD_SET_CYCLE, (void *)10); // 10个时钟周期
       rt_adc_control(adc_dev, RT_ADC_CMD_SET_SAMPLE_TIME, (void *)100); // 100us采样时间
   }

3. 降低采样频率


   while (1)
   {
       vol = rt_adc_read(adc_dev, channel) * 3300 / 4096;
       rt_thread_mdelay(50);  // ← 增加延时,降低采样率至20Hz
   }

4. 电源与参考电压稳定



  • 测量开发板供电电压(确保3.3V稳定)

  • 在ADC输入引脚并联0.1μF电容滤除高频噪声

  • 避免使用内部参考电压(Vref),改用外部精密基准源


5. 驱动与BSP更新



  1. 确认使用最新BSP包(从RT-Thread GitHub更新)

  2. 检查驱动兼容性:
      // 在rtconfig.h中启用ADC调试
      #define ADC_DEBUG

    观察串口输出的ADC初始化状态



6. 硬件故障排查



  • 短接ADC输入引脚到GND/3.3V测试

  • 用示波器检查信号是否超限

  • 更换ADC通道测试(如channel 0→5)


7. 错误处理增强


   rt_uint32_t value;
   if (rt_adc_read(adc_dev, channel, &value) != RT_EOK) {
       rt_kprintf("ADC read error!n");
       rt_adc_disable(adc_dev, channel);  // 出错时立即禁用
       return;
   }

8. 替代解决方案:启用DMA传输


   // 在board.h中启用DMA支持
   #define BSP_USING_ADC_DMA

   // 代码中配置DMA模式
   rt_adc_control(adc_dev, RT_ADC_CMD_SET_DMA_MODE, RT_NULL);

9. 深度调试手段



  • 触发HardFault时使用addr2line工具定位崩溃点

  • cy_syslib.h中启用断言:
     #define CY_ASSERT(x) do { if (!(x)) { __asm("bkpt 1"); } } while(0)


最终推荐方案


优先执行以下组合:



  1. 将主线程栈扩大至2048字节

  2. 在采样循环中添加rt_thread_mdelay(50)

  3. 更新到最新版BSP(重点关注ADC驱动更新日志)

  4. 使用示波器确认输入信号无毛刺



若仍崩溃,请提供以下信息进一步分析:  



  • RT-Thread版本号(rt-thread --version)  

  • ADC配置的具体参数(采样周期/通道号)  

  • 崩溃时的串口日志完整截图(包含HardFault信息)  

  • 硬件连接示意图(特别是ADC输入部分)


举报

更多回帖

发帖
×
20
完善资料,
赚取积分