STM32代码逻辑正常但输出异常结果错误导致出现无法解释的问题,问题包括ADC无法输出为0,造成问题的原因是数组溢出
情景一
问题描述:ADC1_Value是正常的ADC值,但R37_product只输出0.5和2,数据变得很异常
R37_product=((float)ADC1_Value)*1.0f/4096*3.3f;
R38_product=((float)ADC2_Value)*1.0f/4096*3.3f;
当我把LD1_flag=0去掉后,数据变得正常了,但奇怪的是LD1_flag并没有在其他地方使用
最终解决方法:原来是下面这个出了问题,因为定义时数组的元素个数是3个,应该是下面写了7导致数组溢出产生的问题,改回来就可以了
extern char product[7];
定义
char product[3]; //串口接收的数字
情景二
问题描述:ADC采集的数据一直为0,如果把输入捕获在代码中去掉ADC就可以采集了(下面freq12是输入捕获的一个频率输出),其实问题和输入捕获没本质的关系,最后的解决方法是把下面代码的str中的一个空格去掉就可以了。原因是str定义为char str[20],因为freq12的字符数可达到7个,所以该字符串的字符个数就变成21个,造成了数组溢出。
sprintf(str," duty:%.2f%% ",freq12);
LCD_DisplayStringLine(Line1, (unsigned char *)str);