技术笔记!
一、ADC简介(了解)
1.1,什么是ADC
1.2,常见的ADC类型
1.3,并联比较型工作示意图
1.4,逐次逼近型工作示意图
1.5,ADC的特性参数
1.6,STM32各系列ADC的主要特性
二、ADC工作原理(掌握)
2.1,ADC框图简介
2.2,参考电压/模拟部分电压
2.3,输入通道
2.4,转换序列
2.5,触发源
2.6,转换时间
2.7,数据寄存器
2.8,中断
2.9,单次转换模式和连续转换模式
2.10,扫描模式
三、单通道ADC采集实验(熟悉)
3.1,实验简要(了解)
3.2,ADC寄存器介绍(了解)
3.3,单通道ADC采集实验配置步骤(掌握)
3.4,编程实战:单通道ADC采集实验(掌握)
mian.c
int main(void)
{
uint16_t adcx;
float temp;
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
delay_init(72); /* 延时初始化 */
usart_init(115200); /* 串口初始化为115200 */
led_init(); /* 初始化LED */
//lcd_init(); /* 初始化LCD */
adc_init(); /* 初始化ADC */
//lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);
//lcd_show_string(30, 70, 200, 16, 16, "ADC TEST", RED);
//lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
//lcd_show_string(30, 110, 200, 16, 16, "ADC1_CH1_VAL:", BLUE);
//lcd_show_string(30, 130, 200, 16, 16, "ADC1_CH1_VOL:0.000V", BLUE); /* 先在固定位置显示小数点 */
while (1)
{
adcx = adc_get_result();
//lcd_show_xnum(134, 110, adcx, 5, 16, 0, BLUE); /* 显示ADCC采样后的原始值 */
printf("原始值:%d\n",adcx);
//void lcd_show_xnum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, uint8_t size, uint8_t mode, uint16_t color)
temp = (float)adcx * (3.3 / 4096); /* 获取计算后的带小数的实际电压值,比如3.1111 */
adcx = temp; /* 赋值整数部分给adcx变量,因为adcx为u16整形 */
//lcd_show_xnum(134, 130, adcx, 1, 16, 0, BLUE); /* 显示电压值的整数部分,3.1111的话,这里就是显示3 */
printf("电压值(整数):%d\n",adcx);
temp -= adcx; /* 把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111 */
temp *= 1000; /* 小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。 */
//lcd_show_xnum(150, 130, temp, 3, 16, 0X80, BLUE);/* 显示小数部分(前面转换为了整形显示),这里显示的就是111. */
printf("电压值(小数):%d\n",(int)temp);
LED0_TOGGLE();
delay_ms(100);
}
}
adc.c
ADC_HandleTypeDef g_adc_handle; //句柄
/* ADC单通道 */
void adc_init(void)
{
ADC_ChannelConfTypeDef adc_ch_conf; //通道
g_adc_handle.Instance = ADC1; //基地址
g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT; //数据对齐方式
g_adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE; //扫描模式
g_adc_handle.Init.ContinuousConvMode = DISABLE; //连续模式
g_adc_handle.Init.NbrOfConversion = 1; //转换数量
g_adc_handle.Init.DiscontinuousConvMode = DISABLE; //间断模式
g_adc_handle.Init.NbrOfDiscConversion = 0; //间断数量
g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;//外部触发源选择
HAL_ADC_Init(&g_adc_handle); //ADC初始化
HAL_ADCEx_Calibration_Start(&g_adc_handle); //ADC校验
adc_ch_conf.Channel = AD