资深版主
 
- 积分
- 12012
- 金钱
- 12012
- 注册时间
- 2013-9-10
- 在线时间
- 427 小时
|
发表于 2016-1-12 12:41:45
|
显示全部楼层
寄存器看不懂,我用库函数写的,下面是我在STM32F103上面用的,仅供参考
[mw_shl_code=applescript,true]void ADC_ChannelInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
#if ADC_DMA_ENABLE==1
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA时钟
#endif
RCC_APB2PeriphClockCmd(ADCx_CHANNEL_GPIO_CLK, ENABLE); //使能转换接口时钟
RCC_APB2PeriphClockCmd(ADCx_CLK, ENABLE); //使能ADC时钟
//初始化ADC采集通道PC.00
GPIO_InitStructure.GPIO_Pin = GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
GPIO_Init(GPIO_PORT, &GPIO_InitStructure);
#if ADC_DMA_ENABLE==1
//
//配置DMA传输
//
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADCx_DR_ADDRESS; //目标源地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&uhADCxConvertedValue; //目的地
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //搬运到内存区域
DMA_InitStructure.DMA_BufferSize = 1; //数据量
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设非增量模式
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; //存储器非增量模式
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_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA_CHANNELx, &DMA_InitStructure);
DMA_Cmd(DMA_CHANNELx, ENABLE);
#endif
RCC_APB2PeriphResetCmd(ADCx_CLK, ENABLE); //开始复位ADC
RCC_APB2PeriphResetCmd(ADCx_CLK, DISABLE); //复位ADC结束
//ADC通道采样配置
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立工作模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //非扫描模式
#if ADC_DMA_ENABLE==1
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
#else
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
#endif
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //1个通道在规则中
ADC_Init(ADCx, &ADC_InitStructure);
#if ADC_DMA_ENABLE==1
/* ADC3 regular channel7 configuration **************************************/
ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1, ADC_SampleTime_55Cycles5);
/* Enable ADC3 DMA */
ADC_DMACmd(ADCx, ENABLE);
#endif
ADC_Cmd(ADCx, ENABLE); //开启ADC转换
ADC_ResetCalibration(ADCx); //使能复位校准
while (ADC_GetResetCalibrationStatus(ADCx)); //等待复位校准完成
ADC_StartCalibration(ADCx); //开启AD校准
while (ADC_GetCalibrationStatus(ADCx)); //等待校准完成
ADC_SoftwareStartConvCmd(ADCx, ENABLE); //使能软件启动AD
}[/mw_shl_code]
|
|