STM32-独立模式单通道ADC采集

目录

1. ADC介绍

2. 硬件设计

 3. 软件设计

3.1. CubeMX设置

 3.2. KEIL开发

4. 实验现象


1. ADC介绍

12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 

有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 ● 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。 ● 注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。 如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到ADC以转换新选择的组。 温度传感器/ VREFINT内部通道温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换。 注意: 温度传感器和VREFINT只能出现在主ADC1中。

ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。 总转换时间如下计算: TCONV = 采样时间+ 12.5个周期

例如: 当ADCCLK=14MHz,采样时间为1.5周期 TCONV = 1.5 + 12.5 = 14周期 = 1μs

单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。 

在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。

2. 硬件设计

ADC1的通道11连接滑动变阻:

 

 3. 软件设计

3.1. CubeMX设置

选择ADC通道IN11,独立模式,连续转换,采样周期41.5,开启NVIC:

8分频,即9MHz的时钟,TCONV = 41.5 + 12.5 = 54周期*(1/9) = 6μs,点击生成代码:

 3.2. KEIL开发

 ADC中断回调函数接收转换后的值:

//adc.c
/* USER CODE BEGIN 0 */
uint32_t convValve;
/* USER CODE END 0 */

/* USER CODE BEGIN 1 */
/**
  * @brief  Conversion complete callback in non blocking mode 
  * @param  hadc: ADC handle
  * @retval None
  */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
  convValve=HAL_ADC_GetValue(hadc);
	
}
/* USER CODE END 1 */

main函数接收并打印电压采样值:

//main.c
  
/* USER CODE BEGIN 2 */
	printf("ADC转换实验:\n");
	HAL_ADCEx_Calibration_Start(&hadc1);
	HAL_ADC_Start_IT(&hadc1);
 /* USER CODE END 2 */

/* USER CODE BEGIN WHILE */
  while (1)
  {
		static float convValveVoltage;
		convValveVoltage=(float)(convValve*(3.3/4096));
		printf("ADC值为:%d\n",convValve);
		printf("ADC转换为电压后的值为:%f\n\n",convValveVoltage);
		HAL_Delay(2000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

4. 实验现象

调动电压值,可以看到电压值在0~3.3V之间变化:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值