123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #include "adc.h"
- u16 uAD_Buff_A[ADC_CHANNEL];
- u16 uAD_Buff_B[ADC_CHANNEL];
- void ADC_GPIO_Config(u32 RCC_APBnPeriphn, GPIO_TypeDef *GPIOx,u16 PIN)
- {
- RCC_AHB1PeriphClockCmd(RCC_APBnPeriphn, ENABLE);
-
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
- GPIO_Init(GPIOx, &GPIO_InitStructure);
- }
- void ADC_Mode_Config(u32 RCC_APBnPeriphn, u32 ADC_ExternalTrigConv, ADC_TypeDef* ADCn, u8 ADC_Channel[], u8 Channel_num)
- {
- RCC_APB2PeriphClockCmd(RCC_APBnPeriphn, ENABLE);
- RCC_APB2PeriphResetCmd(RCC_APBnPeriphn, ENABLE);
- RCC_APB2PeriphResetCmd(RCC_APBnPeriphn, DISABLE);
-
- ADC_CommonInitTypeDef ADC_CommonInitStructure;
- ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
- ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
- ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
- ADC_CommonInit(&ADC_CommonInitStructure);
-
- ADC_InitTypeDef ADC_InitStructure;
- ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
- ADC_InitStructure.ADC_ScanConvMode = ENABLE;
- ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
-
- ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv;
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfConversion = Channel_num;
- ADC_Init(ADCn, &ADC_InitStructure);
-
- for(int i=0; i<Channel_num; i++)
- {
- ADC_RegularChannelConfig(ADC3, ADC_Channel[i] , i+1 , ADC_SampleTime_144Cycles);
- }
-
- ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);
-
- ADC_DMACmd(ADCn, ENABLE);
-
- ADC_Cmd(ADCn, ENABLE);
- }
- void ADC_DMA_Config(u32 RCC_AHB_DMA,u32 DMA_Channel,ADC_TypeDef* ADCn,DMA_Stream_TypeDef *DMA_Stream)
- {
-
- RCC_AHB1PeriphClockCmd(RCC_AHB_DMA, ENABLE);
-
-
- DMA_InitTypeDef DMA_InitStructure;
- DMA_InitStructure.DMA_Channel = DMA_Channel;
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADCn->DR);
- DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)(u16 *)uAD_Buff_A;
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
- DMA_InitStructure.DMA_BufferSize = ADC_CHANNEL;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
- DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
- DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
- DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
- DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
- DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
- DMA_Init(DMA_Stream, &DMA_InitStructure);
-
-
- DMA_DoubleBufferModeConfig(DMA_Stream,(uint32_t)(u16 *)(uAD_Buff_B),DMA_Memory_0);
- DMA_DoubleBufferModeCmd(DMA_Stream,ENABLE);
-
-
- DMA_ClearITPendingBit(DMA_Stream, DMA_IT_TC);
- DMA_ITConfig(DMA_Stream, DMA_IT_TC, ENABLE);
- DMA_Cmd(DMA_Stream, ENABLE);
- }
- void ADC_TIM_Config(TIM_TypeDef* TIMx,u16 psc, u16 per,
- void(*ClockCMD)(uint32_t, FunctionalState),u32 RCC_APBnPeriphn,
- void(*TIM_OCInit)(TIM_TypeDef*, TIM_OCInitTypeDef*),
- void(*TIM_OCPreloadConfig)(TIM_TypeDef*, uint16_t))
- {
- (*ClockCMD)(RCC_APBnPeriphn,ENABLE);
-
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_TimeBaseStructure.TIM_Prescaler = psc;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseStructure.TIM_Period = per;
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseInit(TIMx,&TIM_TimeBaseStructure);
-
- TIM_OCInitTypeDef TIM_OCInitStructure;
- TIM_OCInitStructure.TIM_Pulse = 10;
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
-
- (*TIM_OCInit)(TIMx,&TIM_OCInitStructure);
-
- (*TIM_OCPreloadConfig)(TIMx,TIM_OCPreload_Enable);
-
- TIM_CtrlPWMOutputs(TIMx, ENABLE);
-
-
-
- TIM_SelectOutputTrigger(TIMx, TIM_TRGOSource_OC1);
-
-
-
- TIM_Cmd(TIMx, ENABLE);
-
-
- }
- void ADC_NVIC_Config(u8 NVIC_IRQChannel, u8 pre, u8 sub)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- NVIC_InitStructure.NVIC_IRQChannel = NVIC_IRQChannel;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = pre;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sub;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
|