完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近使用到了STM32F030CCT6,较之前经常使用的STM32F207还是有些区别的,今天主要说一下STM32F030 多路ADC采样(非DMA连续方式)遇到的一些问题,供其他同志参考。
首先,ST官方的STM32F0系列的官方标准库函数存在问题,也有可能是我手上的不是最新版本,但着实是个不小的坑,之前在使用STM32F07X系列的时候就遇到了,但过了一段时间又给忘了,让我调试了半天才发现。 官方原版: void ADC_ChannelConfig(ADC_TypeDef* ADCx, uint32_t ADC_Channel, uint32_t ADC_SampleTime) { uint32_t tmpreg = 0; /* Check the parameters */ assert_param(IS_ADC_ALL_PERIPH(ADCx)); assert_param(IS_ADC_CHANNEL(ADC_Channel)); assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime)); /* Configure the ADC Channel */ ADCx-》CHSELR |= (uint32_t)ADC_Channel; /* Clear the Sampling time Selection bits */ tmpreg &= ~ADC_SMPR1_SMPR; /* Set the ADC Sampling Time register */ tmpreg |= (uint32_t)ADC_SampleTime; /* Configure the ADC Sample time register */ ADCx-》SMPR = tmpreg ; } 修改之后: void ADC_ChannelConfig(ADC_TypeDef* ADCx, uint32_t ADC_Channel, uint32_t ADC_SampleTime) { uint32_t tmpreg = 0; /* Check the parameters */ assert_param(IS_ADC_ALL_PERIPH(ADCx)); assert_param(IS_ADC_CHANNEL(ADC_Channel)); assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime)); /* Configure the ADC Channel ,删除或运算 */ ADCx-》CHSELR = (uint32_t)ADC_Channel; /* Clear the Sampling time Selection bits */ tmpreg &= ~ADC_SMPR1_SMPR; /* Set the ADC Sampling Time register */ tmpreg |= (uint32_t)ADC_SampleTime; /* Configure the ADC Sample time register */ ADCx-》SMPR = tmpreg ; } 其次,在多路ADC通道非DMA连续采样方式下,发现各通道ADC采样数据出现了一个偏移错位,这里和我的采样方式有一定的关系。但确实在操作上和STM32F2系列有些不同,我是将之前STM32F207的采样程序直接拿过来用的,分析之后发现了问题所在,即配置通道启动采样后必须读取采样数据,如果没有读取数据,即使随后配置了其他通道并启动采样也会导致读取的数据是之前的采样数据(间隔很短的情况下),所以STM32F030尽量保证通道配置、启动与读取匹配出现,防止数据异常。 ADC_ChannelConfig(ADC1, chanel_num[AI_CurrentCH], ADC_SampleTime_55_5Cycles); ADC_StartOfConversion(ADC1); ADC_GetConversionValue(ADC1);即使有一次的采样数据不需要,也要执行对应的读取操作。 |
|
|
|
只有小组成员才能发言,加入小组>>
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
528 浏览 2 评论
550 浏览 2 评论
信号发生器产生的正弦频率信号,用定时器进行捕获,当幅值低于3V后为什么MCU就无法捕获到了?
209 浏览 2 评论
875 浏览 2 评论
编码器模式下,中断内访问其他定时器cnt值,会导致进入中断次数丢失的原因?
859 浏览 2 评论
1331浏览 9评论
STM32出现error downloading following files怎么解决?
28浏览 3评论
stm32f103的RST复位后PWM就停止输出了,为什么?
37浏览 3评论
STM32G0空闲中断异常,且DMA接收不到数据是怎么回事?
24浏览 3评论
STM32F103用Timer3TRGO通道触发ADC,ADC在三路输出PWM高电平中间点采样,如何配置?
15浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-28 23:46 , Processed in 0.578812 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号