| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #include "hal_adc.h"
- #include "sys_log.h"
- #include "sys_timer.h"
- #include "delay.h"
- #include "board.h"
- #define GET_ADC_CNT 3
- ADC_HandleTypeDef ADC1_Handler; //ADC���
- //��ʼ��ADC
- //ch: ADC_channels
- //ͨ��ֵ 0~16ȡֵ��ΧΪ��ADC_CHANNEL_0~ADC_CHANNEL_16
- void HAL_AdcInit(void)
- {
- RCC_PeriphCLKInitTypeDef ADC_CLKInit;
- ADC_CLKInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; //ADC����ʱ��
- ADC_CLKInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; //��Ƶ����6ʱ��Ϊ72M/6=12MHz
- HAL_RCCEx_PeriphCLKConfig(&ADC_CLKInit); //����ADCʱ��
- ADC1_Handler.Instance = ADC1;
- ADC1_Handler.Init.DataAlign = ADC_DATAALIGN_RIGHT; //�Ҷ���
- ADC1_Handler.Init.ScanConvMode = DISABLE; //��ɨ��ģʽ
- ADC1_Handler.Init.ContinuousConvMode = DISABLE; //�ر�����ת��
- ADC1_Handler.Init.NbrOfConversion = 1; //1��ת���ڹ��������� Ҳ����ֻת����������1
- ADC1_Handler.Init.DiscontinuousConvMode = DISABLE; //��ֹ����������ģʽ
- ADC1_Handler.Init.NbrOfDiscConversion = 0; //����������ͨ����Ϊ0
- ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START; //��������
- HAL_ADC_Init(&ADC1_Handler); //��ʼ��
- HAL_ADCEx_Calibration_Start(&ADC1_Handler); //УADC
- }
- //ADC�ײ��������������ã�ʱ��ʹ��
- //�˺����ᱻHAL_ADC_Init()����
- //hadc:ADC���
- void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
- {
- GPIO_InitTypeDef GPIO_Initure;
- __HAL_RCC_ADC1_CLK_ENABLE(); //ʹ��ADC1ʱ��
- __HAL_RCC_GPIOA_CLK_ENABLE(); //����GPIOAʱ��
- GPIO_Initure.Pin = ADC_PIN; //PA1
- GPIO_Initure.Mode = GPIO_MODE_ANALOG; //�
- GPIO_Initure.Pull = GPIO_NOPULL; //����������
- HAL_GPIO_Init(ADC_GPIO, &GPIO_Initure);
- }
- /*
- ͨ���� ���� ͨ���� ����
- ͨ��0 PA0 ͨ��8 PB0
- ͨ��1 PA1 ͨ��9 PB1
- ͨ��2 PA2 ͨ��10 PC0
- ͨ��3 PA3 ͨ��11 PC1
- ͨ��4 PA4 ͨ��12 PC2
- ͨ��5 PA5 ͨ��13 PC3
- ͨ��6 PA6 ͨ��14 PC4
- ͨ��7 PA7 ͨ��15 PC5
- */
- //���ADCֵ
- //ch: ͨ��ֵ 0~16��ȡֵ��ΧΪ��ADC_CHANNEL_0~ADC_CHANNEL_16
- //����ֵ:ת�����
- static uint16_t Get_Adc(uint32_t ch)
- {
- ADC_ChannelConfTypeDef ADC1_ChanConf;
- ADC1_ChanConf.Channel = ch; //ͨ��
- ADC1_ChanConf.Rank = 1; //��1����������1
- ADC1_ChanConf.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; //����ʱ��
- HAL_ADC_ConfigChannel(&ADC1_Handler, &ADC1_ChanConf); //ͨ������
- HAL_ADC_Start(&ADC1_Handler); //����ADC
- HAL_ADC_PollForConversion(&ADC1_Handler, 10); //��ѯת��
- return (uint16_t)HAL_ADC_GetValue(&ADC1_Handler); //�������һ��ADC1�������ת�����
- }
- //��ȡָ��ͨ����ת��ֵ��ȡtimes��,Ȼ��ƽ��
- uint16_t HAL_AdcGetVal(void)
- {
- u32 temp_val = 0;
- u8 t;
- for (t = 0; t < GET_ADC_CNT; t++)
- {
- temp_val += Get_Adc(ADC_CHANNEL_1);
- delay_ms(3);
- }
- return temp_val / GET_ADC_CNT;
- }
- void get_adv_val_timer_callback(void)
- {
- int mv;
- uint16_t val = HAL_AdcGetVal();
- mv = val*(3.3/4096)*1000;
- DLOG_I("adv_val:%d,mv:%d",val,mv);
- }
- void HAL_AdcGetValTimerInit(void)
- {
- HAL_TimerRegister(get_adv_val_timer_callback, 1000);
- }
|