stm32 adc可以同时转换吗 STM32 的ad转换,是不是 adc1 adc2 各可以设...

STM32\uff0cADC,\u591a\u901a\u9053\u8f6c\u6362\uff0c\u662f\u600e\u4e48\u6837\u8bfb\u53d6\u8f6c\u6362\u7684\u7ed3\u679c\u7684 \uff1f

\u4f7f\u7528DMA\u4f20\u8f93\u6216\u8005\u4f7f\u7528ADC\u4e2d\u65ad\uff0c\u5efa\u8bae\u4f7f\u7528DMA
/********************************************************************************* * \u6587\u4ef6\u540d \uff1aADC.c * \u63cf\u8ff0 \uff1aADC\u6a21\u5757 * \u5e93\u7248\u672c \uff1aST3.5.0 */#include "system.h"#include "ADC.h"vu16 ADC_ConvertedValue[Sample_Num][Channel_Num];void ADC_DMA_Config(void){ DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = Sample_Num*Channel_Num; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//\u5916\u8bbe\u5730\u5740\u4e0d\u53d8 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//\u5185\u5b58\u5730\u5740\u9012\u589e 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_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); DMA_Cmd(DMA1_Channel1,ENABLE);}void ADC1_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure); ADC_DMA_Config(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);// ADC_DeInit(ADC1); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1\u548cADC2\u5de5\u4f5c\u5728\u72ec\u7acb\u6a21\u5f0f ADC_InitStructure.ADC_ScanConvMode = ENABLE;//\u591a\u901a\u9053 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//\u8fde\u7eed\u8f6c\u6362 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//\u8f6f\u4ef6\u542f\u52a8\u8f6c\u6362 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//\u8f6c\u6362\u7ed3\u679c\u53f3\u5bf9\u9f50 ADC_InitStructure.ADC_NbrOfChannel = Channel_Num;//\u901a\u9053\u6570\u76ee ADC_Init(ADC1, &ADC_InitStructure); // ADC_TempSensorVrefintCmd(ENABLE);//\u4f7f\u80fd\u7247\u5185\u6e29\u5ea6\u4f20\u611f\u5668 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //PCLK 6\u5206\u9891 ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);//\u901a\u9053\uff0c\u8f6c\u6362\u6b21\u5e8f\uff0c\u8f6c\u6362\u65f6\u95f4 ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 4, ADC_SampleTime_55Cycles5);// ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 6, ADC_SampleTime_239Cycles5); ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1);//\u5f00\u59cb\u6821\u51c6 while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE);//\u4f7f\u80fdADC\u7684\u8f6f\u4ef6\u8f6c\u6362\u542f\u52a8\u529f\u80fd}uint16_t ReadADCAverageValue(uint16_t Channel){ uint8_t i; uint32_t sum = 0; for(i=0; i<Sample_Num; i++) { sum+=ADC_ConvertedValue[i][Channel]; } return (sum/Sample_Num);} \u5934\u6587\u4ef6#ifndef __ADC_H#define __ADC_H/*\u4f7f\u7528\u793a\u4f8b:* printf("%d\r\n",ADC_ConvertedValue[0]); printf("%d\r\n",ADC_ConvertedValue[1]); printf("%d\r\n",ADC_ConvertedValue[2]); printf("\u043e?:%f\r\n",(1.43-(ADC_ConvertedValue[3]*3.3/4096))/0.0043+25);* sprintf(ch,"AD0 Value Is:%5d.",ADC_ConvertedValue[0]); printf("%s",ch); LCD_ShowString(20,20,(uint8_t*)ch,Color[i]); sprintf(ch,"AD1 Value Is:%5d.",ADC_ConvertedValue[1]); printf("%s",ch); LCD_ShowString(20,40,(uint8_t*)ch,Color[i]); sprintf(ch,"AD2 Value Is:%5d.",ADC_ConvertedValue[2]); printf("%s",ch); LCD_ShowString(20,60,(uint8_t*)ch,Color[i]); sprintf(ch,"AD3 Value Is:%5d.",ADC_ConvertedValue[3]); printf("%s",ch); LCD_ShowString(20,80,(uint8_t*)ch,Color[i]);*/#define Channel_Num 4#define Sample_Num 10extern vu16 ADC_ConvertedValue[Sample_Num][Channel_Num];void ADC1_Config(void);uint16_t ReadADCAverageValue(uint16_t Channel);#endif

STM32F10x_ADC\u4e09\u901a\u9053\u9010\u6b21\u8f6c\u6362(\u5355\u6b21\u3001\u5355\u901a\u9053\u8f6f\u4ef6\u89e6\u53d1)\uff1a
http://blog.csdn.net/ybhuangfugui/article/details/51982080

同一个ADC外设处理器的不同通道之间是不能同时转换的。比如说ADC1_CHANNEL1和2之间就只能一个进行AD转换。

扩展阅读:stm32有多少adc外设 ... stm32adc配置代码 ... stm32 dma 多个adc ... stm32 adc多通道采集 ... stm32串口 接收ff ... stm32采集25v电压 ... stm32f103 dac ... stm32内部adc ... stm32 fdcan进不了中断 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网