新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2021-12-6
- 在线时间
- 3 小时
|

楼主 |
发表于 2021-12-7 10:14:34
|
显示全部楼层
- #include "stm32f4xx.h"
- #include "usart.h"
- #include "delay.h"
- #include "lsens.h"
- #include "Adc.h"
- #include "dma.h"
- #define LSENS_READ_TIMES 5
- void Lsens_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
- GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
- GPIO_InitStructure.GPIO_Speed=GPIO_High_Speed;
- GPIO_Init(GPIOF,&GPIO_InitStructure);
- }
- void Adc3_Init(void)
- {
- ADC_InitTypeDef ADC_InitStructure;
- ADC_CommonInitTypeDef ADC_CommonInitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3,ENABLE);
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,ENABLE);
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,DISABLE);
-
- ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
- ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
- ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;
- ADC_InitStructure.ADC_NbrOfConversion=1;
- ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;
- ADC_InitStructure.ADC_ScanConvMode=DISABLE;
- ADC_Init(ADC3,&ADC_InitStructure);
-
- ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_1;
- ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent;
- ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div4;
- ADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;
- ADC_CommonInit(&ADC_CommonInitStructure);
-
- ADC_RegularChannelConfig(ADC3, ADC_Channel_5, 1, ADC_SampleTime_480Cycles );
- ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);
- ADC_DMACmd(ADC3, ENABLE);
- ADC_Cmd(ADC3,ENABLE);
- }
- void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u32 chx,u32 par,u32 mar,u16 ndtr)
- {
-
- DMA_InitTypeDef DMA_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- if((u32)DMA_Streamx>(u32)DMA2)
- {
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);
-
- }else
- {
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);
- }
- DMA_DeInit(DMA_Streamx);
-
- while (DMA_GetCmdStatus(DMA_Streamx) != DISABLE){}
-
- DMA_InitStructure.DMA_Channel = chx;
- DMA_InitStructure.DMA_PeripheralBaseAddr = par;
- DMA_InitStructure.DMA_Memory0BaseAddr = mar;
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
- DMA_InitStructure.DMA_BufferSize = ndtr;
- 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_Medium;
- DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
- DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
- DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
- DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
- DMA_Init(DMA_Streamx, &DMA_InitStructure);
-
- DMA_ClearFlag(DMA2_Stream0,DMA_IT_TC);
- DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,ENABLE);
- NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- while (DMA_GetCmdStatus(DMA2_Stream0) != DISABLE){}
- DMA_Cmd(DMA2_Stream0, ENABLE);
- }
- u16 Get_Adc3(u8 ch)
- {
- ADC_RegularChannelConfig(ADC3, ADC_Channel_5, 1, ADC_SampleTime_480Cycles );
- ADC_SoftwareStartConv(ADC3);
- while(!ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC ));
- return ADC_GetConversionValue(ADC3);
- }
- u8 Lsens_Get_val(void)
- {
- u32 temp_val=0;
- u8 t;
- for(t=0;t<LSENS_READ_TIMES;t++)
- {
- temp_val+=Get_Adc3(ADC_Channel_5);
- delay_ms(5);
- }
- temp_val/=LSENS_READ_TIMES;
- return temp_val;
- }
- void DMA2_Stream0_IRQHandler(void)
- {
- if (DMA_GetFlagStatus(DMA2_Stream0, DMA_IT_TCIF2) == SET)
- {
- Lsens_Get_val();
- DMA_ClearFlag(DMA2_Stream0, DMA_IT_TCIF2);
- }
- }
- u16 ADC_Data[LSENS_READ_TIMES];
- u8 adcx;
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- delay_init(168);
- uart_init(115200);
- Adc3_Init();
- MYDMA_Config(DMA2_Stream0, DMA_Channel_2, (u32)&ADC3->DR, (u32)ADC_Data,LSENS_READ_TIMES);
- ADC_SoftwareStartConv(ADC3);
- while(1)
- {
- adcx=Lsens_Get_val();
- printf("%8u\n",adcx);
- delay_ms(250);
- }
- }
复制代码 |
|