1、打开DMA和ADC1的时钟。
在RCC_Configuration()中添加:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
2、配置模拟IO输入口
在GPIO_Configuration()中配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //ADC0 -light
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //ADC9-sound
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
3、配置DMA初始化和ADC初始化
void DMA_Configuration(void)
void ADC1_Configuration(void)
4、启动和读值处理ADC数据
启动:ADC_SoftwareStartConvCmd(ADC1, ENABLE);
等待DMA处理完成标志位:if(DMA_GetFlagStatus(DMA_FLAG_TC1)==1)
处理:
5、ADC硬件参考电压的选择:
void DMA_Configuration(void)
{
DMA_DeInit(DMA_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; // 定义DMA内存基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 3;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设寄存器地址不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //外设数据宽度32bit
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA_Channel1, &DMA_InitStructure);
DMA_Cmd(DMA_Channel1, ENABLE);
}
void ADC1_Configuration(void)
{
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;// ADC1 ADC2 在独立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //ENABLE-ADC多通道扫描, DISABLE-ADC单通道扫描
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // ENABLE--ADC连续转化模式 DISABLE--ADC单次转化模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //由软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据向右对齐
ADC_InitStructure.ADC_NbrOfChannel = 3; //连续转化3个AD通道值
ADC_Init(ADC1, &ADC_InitStructure);
//Enable Vrefint channel17
ADC_TempSensorVrefintCmd(ENABLE); //channel17
ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 1, ADC_SampleTime_28Cycles5); //Vref
// ADC1 regular channel0 configuration
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 2, ADC_SampleTime_28Cycles5); //light
// ADC1 regular channel9 configuration
ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 3, ADC_SampleTime_28Cycles5); //sound
// ADC_RegularChannelConfig(ADC1, ADC_Channel_1,4, ADC_SampleTime_55Cycles5); //voltage
// Enable ADC1 DMA );
ADC_DMACmd(ADC1, ENABLE);
// Enable ADC1
ADC_Cmd(ADC1, ENABLE);
// Enable ADC1 reset calibaration register
ADC_ResetCalibration(ADC1);
// Check the end of ADC1 reset calibration register
while(ADC_GetResetCalibrationStatu
// Start ADC1 calibaration
ADC_StartCalibration(ADC1);
// Check the end of ADC1 calibration
while(ADC_GetCalibrationStatus(ADC1));
}
void ADC_process_Voltage_Light_Voice(void)
{
ADC_Cmd(ADC1, ENABLE);
DMA_Cmd(DMA_Channel1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// Delay(20);
{
}
adv[1] = (float)(ADC_ConvertedValue[1]&0x0fff)*1.2/(ADC_ConvertedValue[0]&0X0FFF); //放大100倍
DMA_Cmd(DMA_Channel1, DISABLE);
}
上一篇:arm之TFT
下一篇:我的ARM编程技巧---积累
推荐阅读最新更新时间:2024-03-16 14:36
设计资源 培训 开发板 精华推荐
- 发原创讨论 赢惊喜大礼
- 有奖直播:英飞凌 MERUS™ D 类音频放大器的多电平技术及其优势
- EEWORLD社区-2010年度风云人物评选
- 赢京东卡 室内空气隐患大作战——英飞凌XENSIV™PAS CO2传感器
- 《美光2022台北国际电脑展主题演讲精选:数据中心专辑》,关注、评论赢固态硬盘等好礼!
- 有奖直播:迈来芯消费级超低功耗位置传感器,简化设计降低成本
- 齐分享,月月有奖第25期活动华丽升级来袭
- 力源带你了解安森美半导体开发神器——高度灵活的物联网开发套件( IDK )!看视频轻松答题享好礼!
- 安世半导体&世平集团 Nexperia 在5G基础架构的应用 下载赢好礼!
- Sitara™ AM335x ARM® Cortex™-A8 团购