基于HAL库,实现最简单ADC采集。
第一步,使用CubeMX配置时钟。
然后是adc的配置:
将,稍微修改一下风格,并手写头文件和源文件。
adc.h
很简单,就不说了。
#ifndef __ADC_H
#define __ADC_H
#include "sys.h"
void MY_ADC_Init(void); //ADC通道初始化
u16 Get_Adc(void); //获得某个通道值
#endif
其中,MY_ADC_Init
和HAL_ADC_MspInit
的内容完全是根据CubeMX生成的代码写的,就改了一个变量名字。Get_Adc
则简单了,当我们需要获取adc的值的时候,先HAL_ADC_Start
启动ADC,然后HAL_ADC_PollForConversion
等待转换完成,最后HAL_ADC_GetValue
返回结果。
#include "adc.h"
#include "delay.h"
ADC_HandleTypeDef ADC1_Handler; //ADC句柄
ADC_ChannelConfTypeDef ADC1_ChanConf; //ADC通道配置句柄
//初始化ADC
void MY_ADC_Init(void)
{
ADC1_Handler.Instance = ADC1;
ADC1_Handler.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; //4分频,ADCCLK=PCLK2/4=108/4=27MHZ
ADC1_Handler.Init.Resolution = ADC_RESOLUTION_12B; //12位模式
ADC1_Handler.Init.ScanConvMode = DISABLE;