最近在使用STM32F103开发项目,使用到了AD的多通道采集功能,相关例程网上很多,通过参考相关代码对ADC和DMA进行配置,但是程序运行起来后采集到的数据都为0,当前问题困扰了多天,请诸位帮忙分析下,谢谢,配置部分代码如下: 其中:SCAPChannel_Max = 12,SCAP_BufferSize = 10 static void SCAP_GPIOConfiguration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 打开GPIO A/B/C 部件的系统激励时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); /* 初始化GPIO A端口 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); /* 初始化GPIO B端口 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOB, &GPIO_InitStructure); /* 初始化GPIO C端口 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure); } static void SCAP_DMAConfiguration(SCAPType_t *sCap) { DMA_InitTypeDef DMA_InitStructure; /* 打开DMA部件的系统激励时钟 */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* 设置DMA参数 */ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&ADC1->DR); /* 设置外设基地址 */ DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(&sCap->m_value); /* 设置内存基地址 */ DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /* 外设作为数据的来源 */ DMA_InitStructure.DMA_BufferSize = SCAPChannel_Max * SCAP_BufferSize; /* 内存大小 */ 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_High; /* 工作在高优先级 */ DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); // DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, DISABLE); /* 使能DMA开始工作 */ DMA_Cmd(DMA1_Channel1, ENABLE); } static void SCAP_ADCConfiguration(void) { ADC_InitTypeDef ADC_InitStructure; /* 打开ADC部件的系统激励时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* 复位ADC1,将外设重置成缺省值 */ ADC_DeInit(ADC1); /* 复位ADC1,将外设重置成缺省值 */ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /* 独立工作模式 */ 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_InitStructure.ADC_NbrOfChannel = SCAPChannel_Max; ADC_Init(ADC1, &ADC_InitStructure); /* 配置ADC时钟为PCLK2 1/6 12MHz */ RCC_ADCCLKConfig(RCC_PCLK2_Div6); // /* 内部温度传感器使能 */ // ADC_TempSensorVrefintCmd(ENABLE); /* 对ADC采集通道进行注册 */ /* 注册试剂样品台温度采集通道 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 2, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 3, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 4, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 5, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 6, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 7, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 8, ADC_SampleTime_239Cycles5); /* 注册其他的温度采集通道 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 9, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 10, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 11, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 12, ADC_SampleTime_239Cycles5); // ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5); /* 使能ADC采集的DMA模块 */ ADC_DMACmd(ADC1, ENABLE); /* 打开ADC采集模块 */ ADC_Cmd(ADC1, ENABLE); /* 重置ADC校准寄存器 */ ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); /* 开始ADC校准 */ ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); /* 使能ADC模块开始转换 */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); } |
【MCU实战经验】基于STM32F103C8T6的hart总线调试器设计
求教STM32F103进入STOP模式后用外部中断唤醒的问题
基于STM32F103RCT6的无源蜂鸣器音乐播放(生日快乐歌)
STM32F103c8t6有没有DAC 功能?
STM32F103x中文数据手册
新手求教,为何在我电脑上找不到STM32F1Xx.h文件
金龙107例程汇总(STM32F107)
万利STM32F107VC 原理图
STM32F103 ADC多通道检测必须要DMA吗?
【官方例程】STM32F107以太网官方例程
评分
查看全部评分
还是很感谢你,问题已经解决了,是我二了,keil里边调试那边设置成软件模拟模式了,so 。。。