微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32笔记(三)ADC、DMA、USART的综合练习

STM32笔记(三)ADC、DMA、USART的综合练习

时间:11-28 来源:互联网 点击:
  我们在这里设置ADC为连续转换模式,常规转换序列中有两路转换通道,分别是ADC_CH10(PC0)和ADC_CH16(片内温度传感器)。因为使用了自动多通道转换,数据的取出工作最适合使用DMA方式取出,so,我们在内存里开辟了一个u16 AD_Value[2]数组,并设置了相应的DMA模块,使ADC在每个通道转换结束后启动DMA传输,其缓冲区数据量为2个HalfWord,使两路通道的转换结果自动的分别落到AD_Value[0]和AD_Value[1]中。
  然后,在主函数里,就无需手动启动AD转换,等待转换结束,再取结果了。我们可以在主函数里随时取AD_Value中的数值,那里永远都是最新的AD转换结果。
  如果我们定义一个更大的AD_Value数组,并调整DMA的传输数据量(BufferSize)可以实现AD结果的循环队列存储,从而可以进行各种数字滤波算法
  接着,取到转换结果后,根据V=(AD_Value/4096)*Vref+的公式可以算出相应通道的电压值,也可以根据T(℃) =(1.43 - Vad)/34*10^(-6) + 25的算法,得到片内温度传感器的测量温度值了。
  通过重新定义putchar函数,及包含"stdio.h"头文件,我们可以方便的使用标准C的库函数printf(),实现串口通信
  相关的官方例程,可以参考FWLib V2.0的ADCADC1_DMA和USARTprintf两个目录下的代码。

本代码例子是基于万利199的开发板EK-STM32F实现,CPU=STM32F103VBT6

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top