初级会员

- 积分
- 139
- 金钱
- 139
- 注册时间
- 2015-9-16
- 在线时间
- 39 小时
|

楼主 |
发表于 2016-11-9 20:07:35
|
显示全部楼层
本帖最后由 swallow_sw 于 2016-11-11 20:16 编辑
/*AD配置*/
void MY_ADC_Init(void)
{
ADC_ChannelConfTypeDef ADC1_Channel_Config;
ADC1_Handler.Instance=ADC1;
ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;
ADC1_Handler.Init.Resolution=ADC_RESOLUTION_12B;
ADC1_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT;
ADC1_Handler.Init.ScanConvMode=ENABLE;
ADC1_Handler.Init.EOCSelection=DISABLE;
ADC1_Handler.Init.ContinuousConvMode=ENABLE;
ADC1_Handler.Init.NbrOfConversion=1;
ADC1_Handler.Init.DiscontinuousConvMode=DISABLE;
ADC1_Handler.Init.NbrOfDiscConversion=0;
ADC1_Handler.Init.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T2_TRGO;
ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_RISING;
ADC1_Handler.Init.DMAContinuousRequests=ENABLE;
HAL_ADC_DeInit(&ADC1_Handler);
HAL_ADC_Init(&ADC1_Handler);
//ADC channel
ADC1_Channel_Config.Channel = ADC_CHANNEL_5;
ADC1_Channel_Config.Rank = 1;
ADC1_Channel_Config.SamplingTime = ADC_TWOSAMPLINGDELAY_6CYCLES;//ADC_SAMPLETIME_3CYCLES; //ADC_TWOSAMPLINGDELAY_5CYCLES; //
HAL_ADC_ConfigChannel(&ADC1_Handler, &ADC1_Channel_Config);
HAL_ADC_Start(&ADC1_Handler);
}
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_ADC1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_5; //PA5
GPIO_Initure.Mode=GPIO_MODE_ANALOG;
GPIO_Initure.Pull=GPIO_NOPULL;
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}
/*DMA配置*/
void ADC_DMA_Open(uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
{
//DMA config
ADC_DMA_Config(SrcAddress,DstAddress,DataLength);
//ADC
HAL_ADC_Start_DMA(&ADC1_Handler,&DstAddress, DataLength);
//enable Timer
HAL_TIM_Base_Start_IT(&TIM2_Handler);
HAL_TIM_Base_Start(&TIM2_Handler);
}
void ADC_DMA_Close()
{
//Timer
HAL_TIM_Base_Stop(&TIM2_Handler);
HAL_TIM_Base_Stop_IT(&TIM2_Handler);
//DMA
HAL_ADC_Stop_DMA(&ADC1_Handler);
//ADC
HAL_ADC_Stop(&ADC1_Handler);
}
void ADC_DMA_Config(uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
{
if((u32)DMA2_Stream0>(u32)DMA2)
{
__HAL_RCC_DMA2_CLK_ENABLE();
}else
{
__HAL_RCC_DMA1_CLK_ENABLE();
}
__HAL_LINKDMA(&ADC1_Handler,DMA_Handle,ADC1DMA_Handler);
//Tx DMA????
ADC1DMA_Handler.Instance =DMA2_Stream0;
ADC1DMA_Handler.Init.Channel =DMA_CHANNEL_0;
ADC1DMA_Handler.Init.Direction=DMA_PERIPH_TO_MEMORY;
ADC1DMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
ADC1DMA_Handler.Init.MemInc=DMA_MINC_ENABLE;
ADC1DMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_WORD;
ADC1DMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_WORD;
ADC1DMA_Handler.Init.Mode=DMA_NORMAL;
ADC1DMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM;
ADC1DMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
ADC1DMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
ADC1DMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;
ADC1DMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE;
/* Configure DMA Stream source address */
ADC1DMA_Handler.Instance->PAR = SrcAddress;
ADC1DMA_Handler.Instance->M0AR = DstAddress;
ADC1DMA_Handler.Instance->NDTR = DataLength;
HAL_DMA_Init(&ADC1DMA_Handler);
HAL_DMA_Start (&ADC1DMA_Handler,SrcAddress,DstAddress,DataLength);
}/*TIM*/
void TIM2_Init(u16 arr,u16 psc)
{
TIM2_Handler.Instance=TIM2;
TIM2_Handler.Init.Prescaler=psc;
TIM2_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;
TIM2_Handler.Init.Period=arr;
TIM2_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&TIM2_Handler);
HAL_TIM_Base_Start_IT(&TIM2_Handler);
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2)
{
__HAL_RCC_TIM2_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM2_IRQn,1,3);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
}
}
|
|