vb2002 发表于 2025-5-16 21:18:46

这个是什么问题哦? 打开串口就出现这个 (已解决)

把自己的代码里面加入了 "05-16路ADC轮询-每路16次ADC转换取中间8次求平均值,USB-CDC虚拟串口返回结果"
这个里面的代码
如果不加这个 for循环就没问题.加入这个for循环就跳这个错误31




vb2002 发表于 2025-5-16 21:19:19

我测试了原代码没有问题.
把部分adc的代码移植到我的代码里面就出现这个了.

vb2002 发表于 2025-5-16 21:49:46

找到原因了..
把这个delayms去掉就没问题了
我的天.
原代码上面也有delayms啊
搞得晕晕的了

vb2002 发表于 2025-5-16 22:16:14

很奇怪 这个delayms (20) 可以用没有问题.正常打印... 超过20就不行了.就出现上面那个图


adc_tongdao2 = Get_ADC12bitResult(2);       
adc_tongdao15 = Get_ADC12bitResult(15);       

vcc = (int)(4096L * 1194 / adc_tongdao15);
               
                for(i=0; i<16; i++)
                {
                        delayms(20);
//                        ADC_convert(3);                //发送固定通道AD值

                        ADC_convert(i);                //发送轮询通道AD值
                        if((i & 7) == 7)        //分两行打印
                        {
                                printf(" dao2= %u vcc= %u \r\n",adc_tongdao2,vcc);
                        }
                       
                }

DebugLab 发表于 2025-5-16 22:17:30

软件延时函数导致程序阻塞

vb2002 发表于 2025-5-16 22:26:50

固定值,轮询值都可以正常打印温度和 外部电压
可就是不能delayms超过20 .一直打不停

vb2002 发表于 2025-5-16 22:28:20

DebugLab 发表于 2025-5-16 22:17
软件延时函数导致程序阻塞

意思是我的原程序,有个地方和这个阻塞了是吗?
我用官方那个代码,我看也是延迟没有问题.
如果是阻塞,那我用个中断200ms的标志位应该就能解决了

jwd 发表于 2025-5-16 22:30:29

这个应该就是程序堵塞了

vb2002 发表于 2025-5-16 22:35:42

jwd 发表于 2025-5-16 22:30
这个应该就是程序堵塞了

是了.
弄了半天终于弄好了.
有可能主频开的太低了.
我开11.0592

vb2002 发表于 2025-5-16 22:43:30

终于全部搞清楚了.现在开delayms200ms也没问题了
我开了看门狗, 用的1秒左右.. 清看门狗也在1秒附近.
导致我delayms超过20ms,没来得及喂狗,系统复位了

页: [1] 2
查看完整版本: 这个是什么问题哦? 打开串口就出现这个 (已解决)