续前,ADC1采用5路采样IN1-IN3,IN6,IN7,IN7 采样芯片温度。
今天抽空参考了一堆代码,最后按照比较符合逻辑的重组分别放到不同位置,结果比以前好多了,起码能看到采集的5路数据,但采样的数据无论在printf打印出来话是在lcd显示结果,都是不固定的乱蹦——我设置了一个数组adcx[6],分别存放采样得到的5 个数据,实际上每采样一轮,adcx[]里面的数据无规律的显示,有时出来的数据压根就不是ADC1的采样,而是不知什么东西。但能看到猜到的5个人数据。
ADC1,5路采样,DMA方式,用AWB设置的工程,ADC1的5路绑定的DMA是DMA2_4,设置了缓冲。
问题:
1. 当采用5 路12位右对齐方式的数据,DMA2_4的缓冲应该多大,学来的代码采用的是数组,adc_volatile[x][y],其中的x,y应该设置多大?已经采用过5,5、8,5、16,5、32,5、64,5;以及32,8、等等结果一致好像与缓冲大小无关。
2. 网上的代码是这样定义数组的:__IO__ ADC1_Buffer[x][y],应该如何将采样的数值放入adcx[]中呢?试过如下方法:
用fro,index作为循环因子,0->5,数值:adcx[0]=ADC1_Buffer[index][0];依次分别为adcx[1]=ADC1_Buffer[index][1];...;结果数据乱蹦。
用固定index,写代码行改变索引值:adcx[0]=ADC1_Buffer[index][0];adcx[1]=ADC1_Buffer[index][1];...adcx[4]=ADC1_Buffer[index][y];其中的只能用1或2,尽管3,4放里面也能出数据?!活见鬼了。最后比较稳定的出数据的y的值为0,1。
3. 最后整理了代码去掉无用的的结果,缓冲ADC1_Buffer[32][5];adcx[0]=ADC1_Buffer[index][0];adcx[1]=ADC1_Buffer[index+1][1];...adcx[4]=ADC1_Buffer[index+4][4];
以上的结果都一样,只是出数据乱蹦不同。
结果非常不太好:当配置出DMA2_4_5终端服务之后,TFTLCD只是刚开机可以显示,马上就黑了,这样就去掉了彩色LCD,只留黑白的。并且第二个大问题是AT_LINK下载程序后单片机不能自动运行了,必须拔掉AD_LINK再重新插上才运行。当然如果数据正常了,这些问题可以慢慢解决,毕竟不是硬件问题。
以上希望工程师,老师们部门看看提出意见,先谢谢了。
单独提出来是因为网上的文章多了后一般人就看开头。
|