From 6c7e61a54ef9b96f79704f0b965664e89f57dd52 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Wed, 29 May 2024 17:41:52 +0800
Subject: [PATCH] 增加休眠,开始上板测试
---
HARDWARE/ADC/ADC.c | 403 +++++++++++++++++++++++++++-----------------------------
1 files changed, 195 insertions(+), 208 deletions(-)
diff --git a/HARDWARE/ADC/ADC.c b/HARDWARE/ADC/ADC.c
index a22b48f..1f82dda 100644
--- a/HARDWARE/ADC/ADC.c
+++ b/HARDWARE/ADC/ADC.c
@@ -1,242 +1,229 @@
-
-/******************************************************************************
- * Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD.
- *
- *-----------------------------------------------------------------------------
- * File: ADC.c
- * Description: use arm inner adc to sample given voltage
- * Author: Lishoujian (867693272@qq.com)
- * Date: Jan 9, 2015
- *****************************************************************************/
-
-/* ----------------------- Platform includes --------------------------------*/
#include "adc.h"
-#include "delay.h"
-#include "fm25V02.h"
-#include "stm32f10x_dma.h"
-#include "calculate.h"
-#include "devicegpioinit.h"
+#include "gpio.h"
-volatile u16 ad_data[1000];
-/******************************************
- * func: Adc_Init
- * desc: config gpio;initialize arm inner adc1
- * input: none
- * output: none
- * return: none
- *****************************************/
-void Adc_set(u8 tem_flag)
-{
- ADC_InitTypeDef ADC_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
+//�ڲ��ۼ� �¶�б��
+//float const_TmpeK = 4.5295; //0X640 ADC�
+//float const_30_top = 30.0;
+
+//�ⲿ�ۼ� �¶�б��
+float const_TmpeK_14BIT = 23.0247; //14BIT ADC�
+float const_30_top = 30.0;
+
+
+void ADC_LithIO_Init(void)
+{
+ CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱ�ӣ�GPIO��ʹ�ܺ���
+// AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN);//ADC_5
+// GPIOx_ANEN_Setable(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN,ENABLE);
+ AnalogIO(LIT_ADC_PORT,LIT_ADC_PIN);//ADC_IN4
+ GPIOx_ANEN_Setable(LIT_ADC_PORT,LIT_ADC_PIN,ENABLE);
+
+}
+
+void ADC_AlkaIO_Init(void)
+{
+ CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱ�ӣ�GPIO��ʹ�ܺ���
+ AnalogIO_H(ALK_ADC_PIN);//ADC_IN8
+// GPIOx_ANEN_Setable(ALK_ADC_PORT,ALK_ADC_PIN,ENABLE); //?û��H�ڣ���ʱ��֪����ô����
+}
+
+void ADC_IN5_Init(void)
+{
+ CDIF_CR_INTF_EN_Setable(ENABLE); //���Դ��ӿ�ʹ��
+ VRTC_Init_RCMF_Trim();
+ VRTC_RCMFCR_EN_Setable(ENABLE);
+ VRTC_ADCCR_CKS_Set(VRTC_ADCCR_CKS_RCMF_2); //ADC����ʱ��ѡ��
+ VRTC_ADCCR_CKE_Setable(ENABLE); //ADC����ʱ��ʹ��
+ ADC_CFGR_BUFSEL_Set(ADC_CFGR_BUFSEL_ADC_IN5); //ADC����ͨ��ѡ��
+
+ ADC_CFGR_BUFEN_Setable(ENABLE); //ADC����ͨ��bufferʹ��/��ֹ
+ ADC_CR_MODE_Set(ADC_CR_MODE_EXTERNAL); //ADC����ģʽѡ���ⲿ�ۼ���
+ ADC_CR_RSTCTRL_EN_Setable(ENABLE); //����������ⲿ��λ
+ ADC_CFGR_ACC_PERIOD_Set(ADC_CFGR_ACC_PERIOD_14BITS); //�ⲿ�ۼ����ۼ���������
+ ADC_CR_HPEN_Set(ADC_CR_HPEN_1MHZ);
- /*GPIO��ʼ��*/
+ ADC_TRIM_Write(0X7FF); //adcƵ��1M ʱ ����ʱ��4ms
+// ADC_TRIM_Write(0X3FF); //adcƵ��1M ʱ ����ʱ��2ms
+// ADC_TRIM_Write(0X1FF); //adcƵ��1M ʱ ����ʱ��1ms
+
+ ADC_CR_ACC_IE_Setable(DISABLE); //�ⲿ�ۼ�ģʽ�жϽ�ֹ
+ ADC_CR_EN_Setable(DISABLE); //ADC�ر�
+}
- /*dma ad �ɼ�������ʼ��*/
- /*dma ��ʼ�����ú���*/
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);//enbale adc channel clock
- //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //Enable DMA
- RCC_ADCCLKConfig(RCC_PCLK2_Div6);
-
-
- /*��λADC1*/
- //ADC_DeInit(ADC1);
-
- /*GPIO��ʼ��*/
- GPIO_InitStructure.GPIO_Pin = ADC_dianchi_PIN_NUM;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(ADC_dianchi_PIN_GROUP, &GPIO_InitStructure);
-
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1 work mode:independent
- ADC_InitStructure.ADC_ScanConvMode = DISABLE; //single channel mode
- ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //once conversion
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //triggered by software
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC data align right
- ADC_InitStructure.ADC_NbrOfChannel = 13;
- ADC_Init(ADC1, &ADC_InitStructure);//init adc1 register
-
-
- if(tem_flag==1)
- {
- //�����¶ȴ�����
- ADC_TempSensorVrefintCmd(ENABLE);
- }
-
-
- /*����ADCʱ��*/
- /*ָ��ͨ��������ת��ʱ��*/
- //ADC_RegularChannelConfig(ADC1, data_p->ad_ch, 1, ADC_SampleTime_13Cycles5);
-
- ADC_Cmd(ADC1, ENABLE);//enbale adc1
-
- ADC_ResetCalibration(ADC1);//reset & calibrate adc1
-
- while(ADC_GetResetCalibrationStatus(ADC1));//waiting for ending
-
- ADC_StartCalibration(ADC1);//open calibrating adc1
-
- while(ADC_GetCalibrationStatus(ADC1));//waiting for ending
-
-}
-
-void Adc_DeInit(u8 tem_flag)
+void ADC_IN4_Init(void)
{
- GPIO_InitTypeDef GPIO_InitStructure;
-// ADC_InitTypeDef ADC_InitStructure;
- /*GPIO��ʼ��*/
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1 , DISABLE);//enbale adc channel clock
+ CDIF_CR_INTF_EN_Setable(ENABLE); //���Դ��ӿ�ʹ��
+ VRTC_Init_RCMF_Trim();
+ VRTC_RCMFCR_EN_Setable(ENABLE);
+ VRTC_ADCCR_CKS_Set(VRTC_ADCCR_CKS_RCMF_2); //ADC����ʱ��ѡ��
+ VRTC_ADCCR_CKE_Setable(ENABLE); //ADC����ʱ��ʹ��
+ ADC_CFGR_BUFSEL_Set(ADC_CFGR_BUFSEL_ADC_IN4); //ADC����ͨ��ѡ��
+
+ ADC_CFGR_BUFEN_Setable(ENABLE); //ADC����ͨ��bufferʹ��/��ֹ
+ ADC_CR_MODE_Set(ADC_CR_MODE_EXTERNAL); //ADC����ģʽѡ���ⲿ�ۼ���
+ ADC_CR_RSTCTRL_EN_Setable(ENABLE); //����������ⲿ��λ
+ ADC_CFGR_ACC_PERIOD_Set(ADC_CFGR_ACC_PERIOD_14BITS); //�ⲿ�ۼ����ۼ���������
+ ADC_CR_HPEN_Set(ADC_CR_HPEN_1MHZ);
+
+ ADC_TRIM_Write(0X7FF); //adcƵ��1M ʱ ����ʱ��4ms
+// ADC_TRIM_Write(0X3FF); //adcƵ��1M ʱ ����ʱ��2ms
+// ADC_TRIM_Write(0X1FF); //adcƵ��1M ʱ ����ʱ��1ms
+
+ ADC_CR_ACC_IE_Setable(DISABLE); //�ⲿ�ۼ�ģʽ�жϽ�ֹ
+ ADC_CR_EN_Setable(DISABLE); //ADC�ر�
+}
- if(tem_flag==1)
- {
- //�����¶ȴ�����
- ADC_TempSensorVrefintCmd(DISABLE);
- }
+void ADC_IN8_Init(void)
+{
+ CDIF_CR_INTF_EN_Setable(ENABLE); //���Դ��ӿ�ʹ��
+ VRTC_Init_RCMF_Trim();
+ VRTC_RCMFCR_EN_Setable(ENABLE);
+ VRTC_ADCCR_CKS_Set(VRTC_ADCCR_CKS_RCMF_2); //ADC����ʱ��ѡ��
+ VRTC_ADCCR_CKE_Setable(ENABLE); //ADC����ʱ��ʹ��
+ ADC_CFGR_BUFSEL_Set(ADC_CFGR_BUFSEL_ADC_IN8); //ADC����ͨ��ѡ��
+
+ ADC_CFGR_BUFEN_Setable(ENABLE); //ADC����ͨ��bufferʹ��/��ֹ
+ ADC_CR_MODE_Set(ADC_CR_MODE_EXTERNAL); //ADC����ģʽѡ���ⲿ�ۼ���
+ ADC_CR_RSTCTRL_EN_Setable(ENABLE); //����������ⲿ��λ
+ ADC_CFGR_ACC_PERIOD_Set(ADC_CFGR_ACC_PERIOD_14BITS); //�ⲿ�ۼ����ۼ���������
+ ADC_CR_HPEN_Set(ADC_CR_HPEN_1MHZ);
- ADC_DeInit(ADC1);
- ADC_Cmd(ADC1, DISABLE);
+ ADC_TRIM_Write(0X7FF); //adcƵ��1M ʱ ����ʱ��4ms
+// ADC_TRIM_Write(0X3FF); //adcƵ��1M ʱ ����ʱ��2ms
+// ADC_TRIM_Write(0X1FF); //adcƵ��1M ʱ ����ʱ��1ms
+
+ ADC_CR_ACC_IE_Setable(DISABLE); //�ⲿ�ۼ�ģʽ�жϽ�ֹ
+ ADC_CR_EN_Setable(DISABLE); //ADC�ر�
+}
+
+void ADC_IN10_Init(void)
+{
-
+ CDIF_CR_INTF_EN_Setable(ENABLE); //���Դ��ӿ�ʹ��
+ VRTC_Init_RCMF_Trim();
+ VRTC_RCMFCR_EN_Setable(ENABLE);
+ VRTC_ADCCR_CKS_Set(VRTC_ADCCR_CKS_RCMF_2); //ADC����ʱ��ѡ��
+ VRTC_ADCCR_CKE_Setable(ENABLE); //ADC����ʱ��ʹ��
+ ADC_CFGR_BUFSEL_Set(ADC_CFGR_BUFSEL_ADC_IN10); //ADC����ͨ��ѡ��
+
+ ADC_CFGR_BUFEN_Setable(ENABLE); //ADC����ͨ��bufferʹ��/��ֹ
+ ADC_CR_MODE_Set(ADC_CR_MODE_EXTERNAL); //ADC����ģʽѡ���ⲿ�ۼ���
+ ADC_CR_RSTCTRL_EN_Setable(ENABLE); //����������ⲿ��λ
+ ADC_CFGR_ACC_PERIOD_Set(ADC_CFGR_ACC_PERIOD_14BITS); //�ⲿ�ۼ����ۼ���������
+ ADC_CR_HPEN_Set(ADC_CR_HPEN_1MHZ);
- GPIO_InitStructure.GPIO_Pin = ADC_dianchi_PIN_NUM;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(ADC_dianchi_PIN_GROUP, &GPIO_InitStructure);
+ ADC_TRIM_Write(0X7FF); //adcƵ��1M ʱ ����ʱ��4ms
+// ADC_TRIM_Write(0X3FF); //adcƵ��1M ʱ ����ʱ��2ms
+// ADC_TRIM_Write(0X1FF); //adcƵ��1M ʱ ����ʱ��1ms
+
+ ADC_CR_ACC_IE_Setable(DISABLE); //�ⲿ�ۼ�ģʽ�жϽ�ֹ
+ ADC_CR_EN_Setable(DISABLE); //ADC�ر�
+}
+
+void ADC_Temp_Init(void)
+{
+ CDIF_CR_INTF_EN_Setable(ENABLE); //���Դ��ӿ�ʹ��
+ VRTC_Init_RCMF_Trim();
+ VRTC_RCMFCR_EN_Setable(ENABLE);
+ VRTC_ADCCR_CKS_Set(VRTC_ADCCR_CKS_RCMF_2); //ADC����ʱ��ѡ��
+ VRTC_ADCCR_CKE_Setable(ENABLE); //ADC����ʱ��ʹ��
+ ADC_CFGR_BUFSEL_Set(ADC_CFGR_BUFSEL_TS); //ADC����ͨ��ѡ��
+
+ ADC_CFGR_BUFEN_Setable(ENABLE); //ADC����ͨ��bufferʹ��/��ֹ
+ ADC_CR_MODE_Set(ADC_CR_MODE_EXTERNAL); //ADC����ģʽѡ���ⲿ�ۼ���
+
+ ADC_CR_RSTCTRL_EN_Setable(ENABLE); //����������ⲿ��λ �ڲ�ģʽdisable �ⲿģʽenable
+
+ ADC_TRIM_Write(0x7FF); //�ⲿ�ۼ� ����д0x7FF
+
+ ADC_CFGR_ACC_PERIOD_Set(ADC_CFGR_ACC_PERIOD_14BITS); //�ⲿ�ۼ����ۼ��������� �ڲ��ۼӿ�ע��
+
+ ADC_CR_ACC_IE_Setable(DISABLE); //�ⲿ�ۼ�ģʽ�жϽ�ֹ
+
+ ADC_CR_EN_Setable(DISABLE); //ADC�ر�
}
-u16 Get_val(u8 ch)
+uint32_t adc_vol_cal(uint32_t adc_data)
{
- u16 DataValue; //
- /* ADC1 regular channel14 configuration */
- ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_55Cycles5);
+ int32_t Volt = 0;
+ Volt = (adc_data*const_adc_Slope/1000.0)+const_adc_Offset/100.0;
- /* Start ADC1 Software Conversion */
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);
-
- /* Test if the ADC1 EOC flag is set or not */
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
-
- /*Returns the ADC1 Master data value of the last converted channel*/
- DataValue = ADC_GetConversionValue(ADC1);
- return DataValue;
-}
-
-u16 Temp_GetADCData(void)
-{
- /*�������ADת��*/
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);
-
- /*�ȴ�ADת�����*/
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
-
- /*��ȡ�ͷ���ADת��ֵ*/
- return (ADC_GetConversionValue(ADC1));
+ if(Volt<0) //VoltΪ��ֵ
+ {
+ Volt=0;
+ }
+ return Volt;
}
-
-
-#define DATA_START 2
-#define DATA_GET_LENGTH 20
-/******************************************
- * func: Get_vol_Average
- * desc:
- * - sample total 100 data,list data from low to hign,get middle 64 data
- * - calculation sample mean of 64 middle data
- * input:
- * ch - select sample channel of adc1
- * vref_adc - Voltage reference of adc1 multiply by 1000. eg:3.3v ->33000
- * output: none
- * return: calculation sample mean of 64 middle data,multiply by 1000. eg:1.0v -> 1000
- *****************************************/
-uint16 Get_vol_Average(u8 channel,u8 tem_flag) //channelͨ���� tem_flag��0��ʾ�ⲿ��ȡ 1��ʾ�ڲ�ͨ����ȡ�¶���
+float adc_tem_cal(uint32_t adc_data)
{
- u32 i, t;
-// uint16 temp;
- uint32 temp_vol;
- uint16 ad_get_address_p[DATA_GET_LENGTH + 1];
- uint32 temp_vol_small;
- uint32 temp_vol_big;
+ float T = 0;
+//�ڲ��ۼӼ���
+// if(adc_data >const_T_30 )
+// {
+// T=(adc_data-const_T_30)/const_TmpeK+const_30_top;
+// }
+// else
+// {
+// T=const_30_top-(const_T_30-adc_data)/const_TmpeK;
+// }
- temp_vol = 0;
- Adc_set(tem_flag);
- //ADC_DMA_Transmit();
-
- for(i = 0; i < DATA_GET_LENGTH; i ++)
+//�ⲿ�ۼƼ���
+ if(adc_data >const_T_30_14BIT )
{
- ad_get_address_p[i] = Get_val(channel);
- temp_vol += ad_get_address_p[i];
+ T=(adc_data-const_T_30_14BIT)/const_TmpeK_14BIT+const_30_top-0.5;
}
- Adc_DeInit(tem_flag);
-
-
- temp_vol_small = ad_get_address_p[DATA_START];
- temp_vol_big = ad_get_address_p[DATA_START];
- for(i = (DATA_START+1); i < (DATA_GET_LENGTH -1); i ++)
+ else
{
- if(temp_vol_small > ad_get_address_p[i])
- temp_vol_small = ad_get_address_p[i];
-
- if(temp_vol_big < ad_get_address_p[i])
- temp_vol_big = ad_get_address_p[i];
+ T=const_30_top-(const_T_30_14BIT-adc_data)/const_TmpeK_14BIT-0.5;
}
-
-
- temp_vol = 0;
- for(t = DATA_START; t < (DATA_GET_LENGTH - 1); t ++)
- {
- temp_vol += ad_get_address_p[t];
- }
- temp_vol = temp_vol - temp_vol_small - temp_vol_big;
-
- temp_vol = temp_vol /(DATA_GET_LENGTH - DATA_START - 3);
-
- return (uint16)temp_vol;
+ return T;
}
-// /**
-// * @brief ��ȡ������˹�˲��������
-// * @param ��
-// * @retval ADC����
-// */
-double Temp_GetBFiltedData(ad_data_s * data_p)
+uint08 adc_wait_finish(void)
{
- u16 i,t;
- volatile double average;
- volatile u32 sum=0;
- double temp_adc_data[20];
- /*-------------------------���ݲɼ�-------------------------*/
- //AD����SMPL_NUM��
-
- Adc_set(0);
-// ADC_DMA_Transmit();
-
- for(t = 0; t < 20; t ++)
+ uint32 timeout=0;
+ do
{
- temp_adc_data[t]= data_p->ad_get_address_p[t];
- sum += temp_adc_data[t];
- }
-
- average=(double)sum/20;
- sum=0;
+ if(SET == ADC_ISR_ACC_IF_Chk()) return 0;//�ⲿ�ۼ�
+ }while(timeout++ < 0xFFFFFFFFU);
+ return 1;//��ʱ
+}
- /*------------------------������˹�˲�-----------------------*/
- filter_set_initial(temp_adc_data[1],temp_adc_data[0],average,average);
-
- //��ȡ�˲�������ݲ����
- for(i=2;i<20;i++)
- {
- temp_adc_data[i]=filter_get_output(temp_adc_data[i]);
- sum+= temp_adc_data[i];
- }
-
- //�����˲������ݵ�ƽ��ֵ
- average=(double)sum/(20-2);
+uint32_t Get_AdcValue(void)
+{
+ volatile int32_t fVlotage = 0;
+ uint32 fTempADC = 0;
+ ADC_CR_EN_Setable(ENABLE); //ADC����
- return average;
+ ADC_ISR_ACC_IF_Clr(); //�ⲿ�ۼ�����жϱ�־
+ if(0 == adc_wait_finish()) //�ȴ�ת�����
+ fTempADC = ADC_DR_Read(); //��ȡADֵ
+ else
+ return 0;
+ fVlotage = adc_vol_cal(fTempADC);//ADֵת��Ϊ��ѹ,��Դ��ѹΪ5V
+
+ return fVlotage;
+}
+
+float Get_AdcTempValue(void)
+{
+ float Temperature = 0;
+ uint32 fTempADC = 0;
+ ADC_CR_EN_Setable(ENABLE); //ADC����
+
+ ADC_ISR_ACC_IF_Clr(); //�ⲿ�ۼ�����жϱ�־
+ if(0 == adc_wait_finish()) //�ȴ�ת�����
+ fTempADC = ADC_DR_Read(); //��ȡADֵ
+ else
+ return 0;
+ Temperature = adc_tem_cal(fTempADC);
+
+ return Temperature;
}
--
Gitblit v1.9.3