一、工程配置
打开工程,在Analog中选择ADC1,选择ADC通道(PC3),配置信息如下:
为了保证ADC转换的准确度,ADC时钟不能超过36MHz,在Clock Prescaler选项中只能选择4分频(84/4=21)及以上,这里选择4分频。分辨率选择12位精度(0-4095),采样时间15个ADC时钟周期。数据对齐方式选择右对齐,如果选择左对齐的方式,需要将得到的数据向右移4位才能得到正确的数据,具体为什么这样可以参考ADC数据存储:左对齐和右对齐 | 风逍遥 (hyxhe.com)https://www.hyxhe.com/archives/a1f79e07.html
触发方式选择软件触发,手动开启采集,采样时间越大精度越高,转换就会越慢,这里选择480个周期。
二、代码编写
生成工程代码,直接在主函数中加入开启转换和读取数据即可:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);//开启转换
HAL_Delay(10);//等待一段时间
printf("%f\r\n",(float)HAL_ADC_GetValue(&hadc1)/4096*3.3);//串口输出
}
/* USER CODE END 3 */
}
先开启ADC转换,等待一段时间,将数据转换成电压值输出,可以在上位机上看到输出数据,这里使用了SerialChart_v034软件绘制电压曲线图。
三、实验现象
曲线的变化使用电位计来改变。
下期学习ADC多通道采集和内部温度传感器数据读取。