怎样添加网站地图,现在做个网站大概多少钱,长沙旅游网站建设,阿里云虚拟主机可以做几个网站实现目标
1、学会STM32CubeMX软件关于ADC的配置
2、掌握ADC三种模式#xff08;查询、中断、DMA#xff09;编程
3、具体目标#xff1a;1、将开发板单片机采集到的电压值上传至上位机串口调试助手显示。 一、ADC 概述
1、什么是ADC?
ADC#xff08;Analog to Digit…实现目标
1、学会STM32CubeMX软件关于ADC的配置
2、掌握ADC三种模式查询、中断、DMA编程
3、具体目标1、将开发板单片机采集到的电压值上传至上位机串口调试助手显示。 一、ADC 概述
1、什么是ADC?
ADCAnalog to Digital Converter即模数转换器用来将模拟信号转换为数字信号。 A/D转换过程
分辨率: A/D转换器对输入模拟量微小变化的分辨能力通常用二进制数的有效位表示。 在最大输入电压一定时位数越多量化单位越小误差越小分辨率越高。
2、STM32F103 的ADC
1简介 STM32F103 系列最多有3个ADC控制器ADC1,ADC2,ADC3多达18个通道可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。ADC为12位是一种逐次逼近型模拟数字转换器。 2ADC通道与引脚对应关系 3STM32分为两种组转换模式
规则通道 规则通道相当于你正常运行的程序看它的名字就可以知道很规矩就是正常执行程序注入通道 注入通道可以打断规则通道听它的名字就知道不安分如果在规则通道转换过程中有注入通道进行转换那么就要先转换完注入通道等注入通道转换完成后再回到规则通道的转换流程。 4ADC配置说明 配置选项说明
模式设置
1、ADCs_Common_Settings DC模式设置 ADC_Mode_Independent 独立模式 独立模式模式下双ADC不能同步每个ADC接口独立工作。所以如果不需要ADC同步或者只是用了一个ADC的时候应该设成独立模式多个ADC同时使用时会有其他模式如双重ADC同步模式两个ADC同时采集一个或多个通道可以提高采样率
ADC常规设置
1、Data Alignment (数据对齐方式): 右对齐/左对齐
2、Scan Conversion Mode( 扫描模式 )
如果只是用了一个通道的话DISABLE果使用了多个通道的话会自动设置为ENABLE。
3、Continuous Conversion Mode(连续转换模式) 设置为ENABLE即连续转换。如果设置为DISABLE则是单次转换。两者的区别在于连续转换直到所有的数据转换完成后才停止转换而单次转换则只转换一次数据就停止要再次触发转换才可以进行转换。
4、Discontinuous Conversion Mode(间断模式)
这里只用到了1个ADC,所以这个直接不使能即可。
规则通道设置
1、Enable Regular Conversions (启用常规转换模式) ENABLE
使能 否则无发进行下方配置
2、Number OF Conversion(转换通道数) 1 用到几个通道就设置为几多个通道会自动使能扫描模式
3、Extenal Trigger Conversion Source (外部触发转换源)
默认采用Regular Conversion launched by software 规则的软件触发 调用函数触发即可
Rank 转换顺序
1、多个通道时会有多个Rank可以设定每个通道的转换顺序。
2、ADC总转换时间如下计算
TCONV 采样时间 12.5个周期 其中1周期为1/ADCCLK 为了保证ADC转换结果的准确性ADC的时钟最好不超过14M。当ADCCLK14MHz(最大)采样时间为1.5周期(最快)时TCONV 1.512.514周期1μs。STM32的ADC最大的转换速率为1MHz,也就是说最快转换时间为1us
注入通道设置
1、注入通道的设置和规则通道设置差不多。
WahchDog
1、当ADC转换的模拟电压值低于低阈值或高于高阈值时便会产生中断。阈值的高低值由ADC_LTR和ADC_HTR配置模拟看门狗。 5ADC的三种工作模式
1阻塞模式也叫查询模式2中断模式3) DMA 模式 二、原理图设计 三、STM32CubeMX 配置串口重定向printf
此项目利用printf 打印ADC采样值先对USART1重定向详细教程参考前面的教程
https://blog.csdn.net/luojuan198780/article/details/138044075 代码设计
/* USER CODE BEGIN Includes */#include stdio.h/* USER CODE END Includes */
/* USER CODE BEGIN 4 *//*********************************************************
*
*重定义 fputc 函数
*
*********************************************************/
int fputc(int ch,FILE *f)
{HAL_UART_Transmit (huart1 ,(uint8_t *)ch,1,HAL_MAX_DELAY );return ch;
}
/* USER CODE END 4 */
四、STM32CubeMX 配置及程序设计单通道
1.阻塞模式查询模式
1.1CubeMX 配置 单通道轮询 配置打开通道8其他默认
1.2 程序设计
Step1 启用ADC Step2 : 等待EOC标志位 Step3 读取寄存器的数据 、-- 查询环节 缺点占用cpu的使用率
主要函数HAL_StatusTypeDef HAL_ADC_Start (ADC_HandleTypeDefhadc) //打开ADC的转换通道 HAL_StatusTypeDef HAL_ADC_Stop (ADC_HandleTypeDefhadc) //关闭ADCHAL_StatusTypeDef HAL_ADC_PollForConversion (ADC_HandleTypeDef*hadc,uint32_t Timeout); // 查询函数
1在main.c中定义一个全局变量
uint16_t ADC_Value;2在main 初始化中开启ADC校准
HAL_ADCEx_Calibration_Start(hadc1); //AD校准
3在while 中编写ADC控制程序 HAL_ADC_Start(hadc1); //启动ADC转换HAL_ADC_PollForConversion(hadc1, 50); //等待转换完成50为最大等待时间单位为msif(HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_REG_EOC)){ADC_Value HAL_ADC_GetValue(hadc1); //获取AD值printf(ADC值: %d \r\n,ADC_Value);printf(采样电压 : %.2f V\r\n,ADC_Value*3.3f/4096);}
HAL_Delay(1000);2.中断模式单通道
2.1CubeMX 配置 配置其打开ADC中断。他与查询模式一样
2.2 程序设计
Step1 启用ADC使能中断 Step2 : 等待EOC自动触发中断 Step3 在中断中读取寄存器的数据 主要函数HAL_StatusTypeDef HAL_ADC_Start_IT (ADC_HandleTypeDefhadc) //使能ADC,打开中断标志位 HAL_StatusTypeDef HAL_ADC_Stop——IT (ADC_HandleTypeDefhadc)HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)//回调函数 1在main.c中定义一个全局变量
uint16_t ADC_Value;2在main函数中开启ADC中断
HAL_ADC_Start_IT(hadc1);
3编写中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)//回调函数
{ADC_Value HAL_ADC_GetValue(hadc1) * 3.3 /4096;printf(采样电压 : %.2f V\r\n,ADC_Value );
}3.DMA 模式单通道
DMA 有两种模式分别为循环模式circular和正常模式normal circular模式DMA 的circular模式只需要调用一次DMA 开启函数DMA 就会持续的搬运数据提高了数据的刷新速度但是在circular模式下不管ADC新的一轮数据采集是否完成有可能直接将旧数据搬运走. normal模式该模式下DMA 启动函数调用一次DMA 通道只会搬运一次数据这样每调一次DMA 启动函数DMA 只会搬运一次数据等待数据传输完成后再次开启DMA 启动函数这样更能保证ADC数据采集的可靠性.
3.1CubeMX 配置(circular模式) 配置1开启连续转换 配置2添加DMA模式选择为循环模式circular
3.1 程序设计
1在main.c中定义一个全局变量 uint16_t ADC_Value0;
2在main函数中开启ADC的 DMA HAL_ADC_Start_DMA(hadc1,(uint32_t*)AD_value,sizeof(AD_value));3在while 中编写ADC控制程序 printf(ADC值: %d \r\n,ADC_Value);printf(采样电压 : %.2f V\r\n,ADC_Value*3.3f/4096);HAL_Delay(100); 五、STM32CubeMX 配置及程序设计多通道
1.阻塞模式多通道
1.1CubeMX 配置 多个通道时必须开启间断模式并且每个间断组中只有一个通道否则每次只能读取到每组最后一个通道的值。
1.2 程序设计
1在main.c中定义一个全局变量
uint16_t AD_value[2]{0};2在while 中编写ADC控制程序
for(i0;i2;i)
{HAL_ADC_Start(hadc1);HAL_ADC_PollForConversion(hadc1,10);AD_value[i]HAL_ADC_GetValue(hadc1);printf(i %d;AD_value%d\r\n,i,AD_value[i]);printf(i %d;电压值 %.3f v\r\n,i,AD_value[i]*3.3/4096);
}
HAL_Delay(500);2.中断模式多通道 多通道情况下使用中断来读取数据理论上是可行的但是读取的数据会混淆即无法确定读取的数据是属于哪一个通道的因此一般不使用。 3.DMA多通道
3.1CubeMX 配置 开启DMA并采用circular模式 3.2 程序设计
1在main.c中定义变量
/* USER CODE BEGIN 1 */uint16_t ADC_Value1,i;uint16_t AD_Buf[2]{0};//两个通道采集数据存在这个数组里面/* USER CODE END 1 */
2在main函数中开启ADC的 DMA
//开启ADC的校准
HAL_ADCEx_Calibration_Start(hadc1);
//开启ADC的DMA采集的数据放入 AD_Buf数组
HAL_ADC_Start_DMA(hadc1,(uint32_t *)AD_Buf,2);3在while 中编写ADC控制程序 printf(AD1%d\n\r,AD_Buf[0]);printf(AD2%d\n\r,AD_Buf[1]);HAL_Delay(100); 总结