1、ADC配置采样12个规则通道,采用单次、扫描模式,允许DMA,配置每次转换结束都有DMA requests; 2、DMA配置的外设和内存长度都是16位,circular mode,direct mode; 3、软件SWSTART启动AD转换后,每启动一次内存中只有一次转换结果更新,要完成12次采样需要SWSTART启动12次,为什么?单次扫描不是应该启动一次就自动扫描完成12次采样,把12次结果依次存入内存吗?是我理解不对吗?求指导 |
ADC需要配置连续扫描模式
.............
mark,签到+1
要选择连续采集模式,DMA可以控制采集长度,比如采集12次,就写入12个数据长度即可。当采集够12次后,他会自动产生完成中断状态。
楼主检查一下memory的部分有没有设置 地址增加模式,否则有可能就一个地址不停的写数据,只有一次结果。
楼主检查一下memory的部分有没有设置 地址增加模式,否则有可能就一个地址不停的写数据,只有一次结果。
谢谢大家的回复;1、memory的地址设置了递增模式; 2、ADC配置改为连续、扫描模式后,启动ADC后memory里能够得到转换的12通道结果;然后需要重置ADC1->CR2里的DMA位->0->1,就能得到更新的12次新的转换结果(发现只有不停重置DMA位才能不停更新memory); 3、但是有一个新的疑问:ADC连续模式的话,也就是说,在第一次转换完12通道,还没有重置ADC1->CR2里的DMA位之前,实际上ADC也在不停的转换,ADC的data寄存器是在不停刷新结果的,只是没有更新到memory里,那么后面会不会导致memory里存放的结果的顺序错乱,比如第一次启动ADC,memory[0]里存放的是ADC第一通道的结果,然后ADC在连续转换,再然后重置DMA位,得到第二次采样转换结果,这个时候ADC可能在转换第二通道的结果,那么memory[0]里存放的就可能是第二通道的结果,毕竟因为ADC一直在工作,不确定重置DMA位与ADC转换的时序一定正确?
补充一下之前的疑惑(前面可能没描述清楚):在第一轮转换12通道的过程中,12次转换依次更新memory,假设memory[0]里存放的是第一通道的采样转换结果 ;12通道结束后进入中断处理(但是同时ADC连续模式会继续转换进入第二轮采样转换),重置ADC1->CR2里的DMA位,然后ADC的转换结果再依次存入memory,但是此时并不确定ADC正在转换第几通道,那么memory[0]里存放的新结果就可能不是第一通道的结果,而是其他通道结果,毕竟因为ADC一直在工作,不确定重置DMA位一定在第一通道转换结束前?(不知道我这个疑惑对不对)
楼主检查一下memory的部分有没有设置 地址增加模式,否则有可能就一个地址不停的写数据,只有一次结果。 ...
memory的地址设置了递增模式;
要选择连续采集模式,DMA可以控制采集长度,比如采集12次,就写入12个数据长度即可。当采集够12次后,他会 ...
2、ADC配置改为连续、扫描模式后,启动ADC后memory里能够得到转换的12通道结果;然后需要重置ADC1->CR2里的DMA位->0->1,就能得到更新的12次新的转换结果(发现只有不停重置DMA位才能不停更新memory); 3、但是有一个新的疑问:ADC连续模式的话,也就是说,在第一次转换完12通道,还没有重置ADC1->CR2里的DMA位之前,实际上ADC也在不停的转换,ADC的data寄存器是在不停刷新结果的,只是没有更新到memory里,那么后面会不会导致memory里存放的结果的顺序错乱,比如第一次启动ADC,memory[0]里存放的是ADC第一通道的结果,然后ADC在连续转换,再然后重置DMA位,得到第二次采样转换结果,这个时候ADC可能在转换第二通道的结果,那么memory[0]里存放的就可能是第二通道的结果,毕竟因为ADC一直在工作,不确定重置DMA位与ADC转换的时序一定正确?
ADC需要配置连续扫描模式
但是我看文档上说单次扫描就是启动一次就能扫描ADC1->SQR1里配置的通道数量啊?我理解不对吗?
已解决