大家好,现在来录制 s 天三二 cube id。 第四讲 a d c 在 d m a 模式下扫描多个通道。 在我的 csdn 这也有一个文字版的教程,需要样片的可以找我进行一个申请。这里使用的开发版是 sdn 三二官方的一个 newcose 的一个开发版, 我们先生成一下工程,选择我们对应的一个芯片, 这里还是使用创口 or 进行一个打印, 波特率就是常见的幺幺五二零零, 让我们看一下我们使用的一个 a d 口,都是在呃 duno 的这一个 c m 八的这个六聘的这个座子里。我们使用 p a 零, p a 一和 p a 四来进行一个模拟的一个测试, p a 零, p a 一和 p a 零, p a 一和 p s 对应的就是这三个通道零一和四的一个通道。 让我们来开始配置一下 a d c 的一个一些基础配置, 我们看一下这个数据的话,选择右对齐,这我们使用了三个通道,我们先把通道, 我们可以看到现在的话他这个多通道的一个扫描模式是没有办法使能的。我们先把通道改成我们对应的三个通道, 这里输入了三个通道之后,这个它会自动开启,然后 dma 的话需要开启一个连续转换的一个模式, 开启完毕,可以看到现在一二三的一个通道都是对应的一个 通道零,然后我们将它进行一下分配,分配完了之后呢,我们在 dma 这个设置这里我们就先要进行一个添加,我们的一个 dma, 这用的是一个 dma 一的一个通道一, 所以的话我们用一个 word, word 的话就是一个字一个字,对应的就是三十二位,就是四个字节。 好,我们来进行一下工程的一个设置,这个始终的话修改到自己对应的一个 速率就好,然后在工程这 选择需要保存的一个目录,这里的话就选 s, t, n 三 cube id 就可以,代码,这里的话就选这些默认的就行,然后点击生成我们的一个工程, 此时已经成功的添加完毕了。 然首先的话为了让我的 片的可以打印的话,我们在 c c 加加这个工程设置,这里面有一个 m, c, u 设置,我们勾选上这两个,这样的话我们才能够将数据给打印出去。 添加对应的一个重定向的一个代码和它的一个头文件。 可以看到这里是已经对 dma 和 adc 进行了一个使能,那我们要 我们先定一下变量,等一下我们讲一下这个 d, m, m 的一个模式, 最使用的就是一个 h l 库的 a, d, c, c 大跌眉就是开启一个开始,不是开启开始 a, d, c, s, dma 的一个模式,它对应的是一个 a, d, c 的一个通道。然后由于是使用 dma, 它是需要将一个将它获取到的一个数据保存到一个地址里面, 这里用一个数组来保存他的一些数据,那既然要保存数据的话,那肯定是需要一个他的对 的一个长度的,我们先编一下,可以看得到这三个参数分别是一个 a, d, c 以及它的一个 buff 的一个地址,以及它的一个一个,它的 一个长度不是长要获取的一个数据的一个长度,这里的话就获取三十个, 我们先将这行代码给复制下来,等一下我们会详细的进行一个讲解, 这有一个回调 函数,这个回调函数的一个意思呢,就是说当数据获取完毕的时候,他会进入到这个回调函数里面,然后我们判断是否是 a d, c 是获取完毕,如果获取完毕的话,让 a d c fred 这个标志位置为一, 然后至为一之后它会执行主函数里面的一个这行贷嘛先将 我们要打印的是 p a 零, p a 一和 p a 四的一些数据,由于我们是获取了三十个的一个数据,但是它的通道是只有十个的, 我现在就举十个七八, 由于是一个连续扫描的一个模式, 由于是一个连续扫描模式,然后通道的话它就是按下面的一二三来进行一个扫描,它获取到的一个数据,那分别是一个 c h 零 c h e 这样一直下去,然后他的这个 这个长度的话一共是三十,然后这就三个通道,那相当于其实就是每个通道获取十遍, 那么的话这一循环就是先将它的一个数据全部都保存下来,分别保存,因为我们有三个通道,我们就分别保存到 a d, c 一, a d c 一杠二, a d c 一杠三这三个变量里面, 然后保存完毕之后, j 再进行一个除湿以及 以及计算它的一个电压,计算完毕之后我们再重新开始我们的一个 dma 的一个扫描,我们编一下看一下它的一个实际的一个情况。 哦,还有一个就是如果没有办法将程序塞入进去,要记得勾选这个调试模式, 现在的话因为没有 开启这个下载 solo 口,他现在是没有办法进行一个 solo 的。我们重新生成一下代码, 我们重新编译一下,然后下载进去。 接法的话就是这样, p a 零接一个 v c c 就是三点三伏, p a 四接个 d, 还有个 p a 一接个二点零伏, 可以看到他现在打印的这个指示基本上是相等的,我们调调节一下他的一个电压, 好,我们把它调到二点四三, 这显示的和这里输出的一个电压基本上是一个相同的。那我们可以看到在我们这一个毁掉函数里面,它会有一个停止 dma 的 一个一个函数,在这里的话我们使用的是一个 正常的一个模式,正常的模式下他为什么要加这个停止呢?我们先注视掉看一下他的一个情况, 然后我们重新下载进去, 可以看得到它现在它的一个数据会有一个错乱,就是 dma 传输的时候,如果是读取内传片段的话,会有一个仲裁器的问题, 如果你不加这个停止的话,它保存的数据可能会出错。虽然你在这里重新进行了开启,但是尽量的话 在你不使用的时候还是将它关闭比较好,然后需要开启的时候再重新进行一个开启,这样的话就会避免这一个数据错乱的一个问题。 然后还有一个就是一个这个回还环形模式的一个 情况,这个环形的话我先讲一下环形的话,就是说他只要开启一次,他的数据永远都可以读出来, 但是,但是呢如果是一个普通的模式话,他开启一次之后呢?下次你再需要读的话,他要重新开启,他的区别就在这。这个回还模式的话,他的一个数据他会一直保存,当他保存到三十之后,他又从零 开始,一直到三十,然后保存完之后又从零开始,这样以此类推。这是一个环形的一个模式,我们先把这个 star 也给关掉, 我们先把这些都给注视掉, 现在的话它只在这 well 循循环里面最上面这里开启了一次,然后我们看一下执行的一个代码情况, 嗯,现在已经是下载进去, 可以看到它的一个电压是完全不会变的,如果我们把这个给 调低了,调成二点零伏,他他也是不会变化的,除非我们复位一下,你看复位一下他只会读一次之后,他就再也不会读了。 然后这个普通模式的话就是你开启一次,那就要就是要不断的开启,他才能不断的获取一个数据。然后我们现在切换成一个这个环形模式来看一下, 然后我们再重新下载进去, 然后可以看到这里有两次读的数据是错误的,就是开启之后他获取数据也是需要时间的,如果你 为了他更亲切的话,你可以加一个一个岩石,这样的话他会更加的一个精确。 那我们看一下复位,可以看到加了这个延时之后,他读的数据基本上是对的。 然后我们看一下 g 只开启了一次,但是它的一个电压值是会一直改变的,比如说我们再降低一下, 降到一个 e f 九,零点九九,可以看到它的这些电压也会跟着改变, 可以看到现在的一个 d r 是可以跟着改变,就 是这一个环形模式的话,对代码的一个要求就没有那么高,但是对应的它的因为你的 d m a 它是一直在一个开启的一个状态,那它的功耗可能会更高一点。 当然你也可以像我们刚刚学用的那一个模式, 就是你读取完之后将它关闭也是可以的。我们来看一下这一个情况, 可以看到此时 它读出的一个数据也是一个正确的, 要调到二点三二,这读出的是二点二一基本上是相同的。 那么 a d c 多通道 d m a 模式下的一个正常模式和一个环形模式都已经讲解完毕,谢谢大家。
粉丝343获赞659


大家好,现在来录制第九讲双 a d c 轮巡模式,扫描多个通道。 在我的 c、 s、 d、 n 这里有一个文字版的教程,需要 s、 t 或 g d 样片呢,可以找我进行一个申请。我们先创建一个工程, 选的是幺零三 r b 的这款芯片,使用的是 s t, 官方的 newcose。 这一个开发版就是这个样子的。我们先 配置一下创口,这里的话是已经引出来了。在这引出来了两个创口,可以进行一个,方便我们进行一个连接,然后可以打印我们的一个数据。 这个配置过很多次,我就不详细的讲解。 播特率,这里选择幺幺五二零零。在开发版的这个 c 八 在一个母座上,这里的话都是一个 a、 d 口,这个是一个丢挪的一个标准的一个接口。这里的话是有六个 a d 口偏零, p a 一、 p a 四、 p b 零。下面的 a 四和 a 五的话,要看你板子上的一个店主是接了哪两个。我的是 s、 b 五,六和五一是连接上了,所以就用 p c 一和 p c。 要注意一下 p c 零是对应的是最下面的 a 五, p c 一对应的是 a 四,这个不要弄错了。 我们就用这六个通道来进行一个模拟的一个配置。其中 a、 t、 c 一使用的是上面的 p a 零, p a 一和 p a 四, a、 d c 二的一个通道,是 p b 零, p c 零和 p c 一。我们进行一下配置。 这时候 p a 零、 p a 一和 p a 四就已经设置完了,他们映射的就是一个 a、 d、 c 一的一个通道。 然后要注意的就是这下面的一个配置。这个是一个独立的一个模式,然后分左对齐和右对齐,这使用的是一个右对齐, 此时它的一个数量是还是一,如果是一的话,这三这 这两个都是不能进行一个使能的。这个是一个扫描的一个模式,你只有一个通道的时候,他是没有办法进行一个扫描的。 以及这个间断模式也是没有办法进行开启。这我们用了三个 a、 d、 c 的通道,这我们就先改为三。可以看到这下面也同步到了三个通道,此时这个就会自动开启,就没有办法进行一个关闭了。 因为多通道的时候他会开启一个扫描模式,然后这一使能一个间断。在这下面的话,你要将他的一个通道给放进去。 由于我们使用的是一个轮巡,所以的话 d m a 不用进行一个开启中断也不用进行一个开启。此时我们配置完了 a、 d c e, 我们 再用相同的方法配置一下 a、 d c 二。 此时的话 p b 零, p b p c 零和 p c 就已经配置完毕了。然后还是用刚刚说的一个相同的方法,首先你用到了几个通道,你这个数字就填起, 然后把它的通道对应好它的一个广角, 然后就可以生成我们的一个工程了。 这个调试口的话还是打开一下会比较好,就是 p a 十三和 p b p a 十四。 生存完毕之后,我们打开一下工程, 首先还是对我们的创口进行一下 啊重定向,这样的话方方便我们进行一个数据的打印 以及一个数据的存放。这里的话 a、 d、 c 一 buff 的话就存放 a、 d、 c 一的一个数据, a、 d、 c 二 buff 就存放 a、 d c 二的一个数据。 可以看到在这里主程序这已经对 a、 d、 c 一和 a、 d c 二以及创口二进行了一个初始化的一个设置。 这时候我们可以对它进行一个校准, a、 d c 的一个校准。校准完之后,我们打印一个 a d c demo 的一个 一个这样的一个文字。 在这个 m c u 设置这里,你要把这个 paint 给打开,不然的话它会有个报错,打开之后它的报错就会消失了。 由于我们是一个轮巡的一个机制,所以 a d c 开启一次,它就是扫描一个通道,再次开启的时候它就再次扫描下一个通道。这里的话就一个 well i。 小于三的一个循环,就是连续 获取三次的一个数据。这三次的一个数据分别对应的是刚刚设置的一三个通道。当然这个 a、 d、 c 二同样也是使用相同的一个方法。 获取完毕之后,我们编译一下。 对应完毕之后,我们下载进去看一下它的一个实际的一个情况。 可以看到此时他就已经是正常的打印了。 我们看一下我们的一个切法,它的切法就是 p a 零接个 v c c p a 一接个两幅,这个两幅是一个可变的。现在我接的是一个一点三幅左右的 p a 四是居然低。然后下面的 a、 d、 c 二的通道是这样的一个接法。我们看一下我们的一个摄像头, 像我这个输出是一点三五伏。 可以看到 a c 的话,这个 p a e 和 p c e 分别接的是一个可变的一个电压, p a 一对应的是一点三四,和这个一点三五是差不多的。还有一个 p c 一, 你看这个是差不多的,这时候我们把它的一个电压调大一点, 那现在是一点八六伏。 可以看到 p a e 对应的是一点八五,还有一个 p c e 对应的是一点八四。说明双通道轮循去 检测 adc 是成功的配置。 本章课程就已经讲解完毕,谢谢大家。


