|
這里配置一個ADC多路ADC同時觸發的DMA程序,
ADC配置
ADC_DeInit(ADC1); //復位ADC1,將外設 ADC1 的全部寄存器重設為缺省值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在獨立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //模數轉換工作在掃描模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //模數轉換工作在連續轉換模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //轉換由軟件而不是外部觸發啟動
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數據右對齊
ADC_InitStructure.ADC_NbrOfChannel = N; //順序進行規則轉換的ADC通道的數目
ADC_Init(ADC1, &ADC_InitStructure);
DMA配置
DMA_DeInit(DMA1_Channel1); //將DMA的通道1寄存器重設為缺省值 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; //定義DMA外設基地址為ADC1 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_RCVTab; //定義DMA內存基地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //外設作為數據傳輸的來源 DMA_InitStructure.DMA_BufferSize = N*16; //定義指定DMA通道的DMA緩存的大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設地址寄存器不變 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //內存地址寄存器遞增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //數據寬度為16位 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //數據寬度為16位 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循環緩存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道1擁有高優先級 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道1沒有設置為內存到內存傳輸 DMA_Init(DMA1_Channel1, &DMA_InitStructure);
配置ADC轉換順序及周期
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 0, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 4, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 5, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 6, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 7, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 8, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 9, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 10, ADC_SampleTime_1Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 11, ADC_SampleTime_1Cycles5);
|
評分
-
查看全部評分
|