ADC 简介
STM32f103 系列有 3 个 ADC,精度为 12 位。
每个 ADC 最多有 16 个外部通道。其中 ADC1 和 ADC2 都有 16 个外部通道,ADC3 根据 CPU 引脚的不同通道数也不同,一般都有 8 个外部通道。
ADC 的模式非常多,功能非常强大,具体的我们在功能框图中分析每个部 分的功能。
配置ADC:
一共需要经过八个配置过程,分别是:配置电压输入范围,输入通道转换顺序,触发源,ADC时钟,数据储存器,中断,转换电压
ADC_InitTypeDef 结构体
1 typedef struct
2 {
3 uint32_t ADC_Mode; // ADC 工作模式选择
4 FunctionalState ADC_ScanConvMode; //ADC 扫描(多通道)或者单次(单通道)模式选择
5 FunctionalState ADC_ContinuousConvMode;// ADC 单次转换或者连续转换选择
6 uint32_t ADC_ExternalTrigConv; // ADC 转换触发信号选择
7 uint32_t ADC_DataAlign; // ADC 数据寄存器对齐格式
8 uint8_t ADC_NbrOfChannel; // ADC 采集通道数
9 } ADC_InitTypeDef;
第一步 配置CubeMX
配置ADC
?配置UART
?生成KEIL5文件
?第二步 编写代码
写在头文件下面
#include "stdio.h" //sprintf的库函数的头文件
#include "string.h" //strlen的库函数的头文件
以下添加在主函数的while循环中
//存放HAL_ADC_GetValue读回来的值
uint32_t ret;
//用字符数组保存结果
char str[64];
//ADC启动函数(adc句柄)
HAL_ADC_Start(&hadc1);
//轮询函数(adc句柄,等待时间)
HAL_ADC_PollForConversion(&hadc1,HAL_MAX_DELAY);
//ADC返回值函数(adc句柄)
ret = HAL_ADC_GetValue(&hadc1);
//把结果打印成字符串
sprintf(str,"%d",ret*3.3/4095);//ret*参考电压/选择精度的最大值
//串口输出函数(urat句柄,发送字符串,标准库函数用于判断字符串的长度)
HAL_UART_Transmit(&huart1,(uint8_t *)str,strlen(str),HAL_MAX_DELAY);
//延时函数
HAL_Delay(1000);
|