完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序整体 是开机工作 采集数据,数据符合要求就进入STM32停机模式,同时开启rtc 2s的闹钟,闹钟唤醒后继续采集数据,判断数据情况在进入停机反复如此
现在问题是程序复位后可以正常采集 正常工作,但是不知道过多久,随机的,adc的数据就会停留在一个固定数值,不论我怎么调节模拟输入都无效 用仿真器查了 dma 和 数据buf 和adc的DR寄存器数值都一致,排除数据处理的问题,在adc这边数据已经不采集了不知道哪里的问题,求助大神们 adc 相关代码 #include "ADC_init.h" u16 ADC_ConvertedValue[2]={0,0}; void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; //定义adc结构体 DMA_InitTypeDef DMA_InitStructure; //定义dma结构体 DMA_DeInit(DMA1_Channel1); /* 将与 DMA 有关的寄存器设我初始值 */ /*定义 DMA 外设基地址, 这里的 ADC1_DR_Address 是用户自己定义的,即为存放转换结果的寄存器 ,他的作用 就是告诉 DMA 取数就到 ADC1_DR_Address 这里来取。*/ DMA_InitStructure.DMA_PeripheralBaseAddr =ADC1_DR_Address; /*定义内存基地址,即告诉 DMA 要将从 AD 中取来的数放到 ADC_ConvertedValue 中 */ DMA_InitStructure.DMA_MemoryBaseAddr =(u32) ADC_ConvertedValue; /*定义 AD 外设作为数据传输的来源,即告诉 DMA 是将 AD 中的数据取出放到内存中,不能反过来*/ DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /*指定 DMA 通道的 DMA 缓存的大小,即告诉 DMA 开辟几个内存空间,由于我们只取通道 10 的 AD 数据所以只需 开辟一个内存空间*/ DMA_InitStructure.DMA_BufferSize = 2; /*设定寄存器地址固定,即告诉 DMA,只从固定的一个地方取数*/ DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /*设定内存地址固定,即每次 DMA,,只将数搬到固定的内存中*/ DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /*设定外设数据宽度,即告诉 DMA 要取的数的大小*/ DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; /*设定内存的的宽度*/ DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; /*设定 DMA 工作再循环缓存模式,即告诉 DMA 要不停的搬运,不能偷懒*/ DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /*设定 DMA 选定的通道软件优先级*/ DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, DMA_InitStructure); /* Enable DMA channel1,CPU 有好几个 DMA 秘书,现在只用 DMA1_Channel1 这个秘书*/ DMA_Cmd(DMA1_Channel1, ENABLE); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/*设置 ADC 工作在独立模式*/ ADC_InitStructure.ADC_ScanConvMode = ENABLE; /*单通道选择dis,多通道选择en*/ ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; /*设定 AD 转化在连续模式*/ ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; /*不使用外部chu发转换*/ ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/*采集的数据在寄存器中以右对齐的方式存放*/ ADC_InitStructure.ADC_NbrOfChannel = 2; /*设定要转换的 AD 通道数目*/ ADC_Init(ADC1, ADC_InitStructure); //ADC_TempSensorVrefintCmd(ENABLE); //开启内部温度传感器 RCC_ADCCLKConfig(RCC_PCLK2_Div8); /*配置 ADC 时钟,为 PCLK2 的 8 分频,即 9MHz*/ ADC_RegularChannelConfig(ADC1, ADC_Channel_3,1, ADC_SampleTime_239Cycles5); /*配置 ADC1 的通道3为 55.5 个采样周期 ,负压传感*/ ADC_RegularChannelConfig(ADC1, ADC_Channel_9,2, ADC_SampleTime_239Cycles5); /*配置 ADC1 的通道9为 55.5 个采样周期 ,电池电压*/ ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 DMA */ ADC_Cmd(ADC1, ENABLE); /* Enable ADC1 */ ADC_ResetCalibration(ADC1);/*复位校准寄存器 */ while(ADC_GetResetCalibrationStatus(ADC1)); /*等待校准寄存器复位完成 */ ADC_StartCalibration(ADC1); /* ADC 校准 */ while(ADC_GetCalibrationStatus(ADC1)); /* 等待校准完成*/ ADC_SoftwareStartConvCmd(ADC1, ENABLE);/* 由于没有采用外部触发,所以使用软件触发 ADC 转换 */ } |
|
相关推荐
2个回答
|
|
是不是ADC进入低功耗了,你可以尝试重新设置看看?
|
|
|
|
这个问题可能有多种原因。以下是一些可能导致此问题的原因和解决方法:
1. ADC初始化问题:请确保在每次唤醒并重新开启ADC之前,正确地初始化和配置ADC。检查ADC的采样时间、分辨率和参考电压等设置是否正确。 2. ADC转换触发源问题:如果转换触发源设置错误,可能导致ADC不进行转换。请确保正确设置转换触发源,例如使用定时器触发或软件触发。 3. ADC电源和参考电压问题:如果ADC电源或参考电压不稳定,可能导致ADC不正常工作。请检查ADC的电源和参考电压是否正确稳定。 4. 电源噪声问题:电源噪声可能干扰ADC的正常工作。请确保电源供应稳定,并考虑添加电源滤波器或隔离电源噪声的方法。 5. ADC通道选择问题:确保正确选择ADC的通道并进行配置。检查ADC通道选择寄存器的设置是否正确。 6. 外部干扰问题:外部干扰可能会对ADC的采样结果产生影响。请确保ADC的输入引脚正确连接和屏蔽,并考虑使用滤波器来降低外部干扰。 请逐一排查以上可能导致问题的原因,并逐步解决。如果问题仍然存在,请考虑使用示波器或逐步调试代码以了解问题所在。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1649 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1566 浏览 1 评论
994 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
694 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1613 浏览 2 评论
1872浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
657浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
527浏览 3评论
544浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
516浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 04:12 , Processed in 0.603712 second(s), Total 53, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号