0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F1的ADC2如何使用DMA功能 USART过载错误Overrun error

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-14 14:42 次阅读

ADC2如何使用DMA功能

上一篇文章说了关于ADC使用DMA的功能,单ADC(只使用ADC1,或者只使用ADC2)采集多条通道,可以使用规则多利用DMA功能实现。

但是,只有ADC1和ADC3拥有DMA功能,而ADC2没有DMA功能,如何实现使用DMA功能采集数据呢?

这个问题大家不必担心,ST这么大的公司,这种基本的功能,肯定是有办法解决的。

其实这问题在参考手册中都能找到答案。答案简单概括就是:使用双ADC模式,由ADC2转化的数据可以通过双ADC模式,利用ADC1的DMA功能传输。

在有2个或以上ADC模块的产品中,可以使用双ADC模式。在双ADC模式里,根据ADC1_CR1寄存器中UALMOD[2:0]位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同步触发。

STM21F1的ADC2转换的结果也是保存在ADC_DR寄存器中,这种是在双模式下(像F4还有三重模式)。

假如上一篇文章的采集通道换成如下顺序:ADC2的通道3、ADC1的通道8、ADC2的通道2,则需要软件配置:

ADC_RegularChannelConfig(ADC2,ADC_Channel_3, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_8, 2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC2,ADC_Channel_2, 3, ADC_SampleTime_55Cycles5);

说到这里,相信都应该明白了吧。

USART过载错误Overrun error

这一节内容,也有点算是网友问的问题,只是问的方式不同,也算是一个问题点吧。

这个问题的来源就是:频繁的接收UART数据,没有及时的读取USART_DR中的数据,使其会发生过载错误。

这种情况一般是发生在我们不使用中断接收UART数据,在某些RTOS中,我们使用getchar来读取数据,但由于有更高优先级任务打断了接收的任务,而这个时候UART又有许多数据发过来,这时,过载错误就会发生了。

而过载错误就会导致接收的数据异常,这个时候,解决的办法很简单:通过读取USART_SR,再读取USART_DR即可清除。

这个时候也可以使用过载错误中断,但是,配置的时候需要注意软件的配置:USART_ITConfig(USART1,USART_IT_ERR, ENABLE);而有的人配置成:USART_IT_ORE.

USART_IT_ORE这个确实存在,但不能使用在这里,USART_ITConfig这个函数明确要求了配置的参数。这个用于处理中断判断标志:if(USART_GetITStatus(USART1,USART_IT_ORE) != RESET)

好了,今天就讲述上面两点,希望对你们有所帮助。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dma
    dma
    +关注

    关注

    3

    文章

    561

    浏览量

    100574
  • USART
    +关注

    关注

    1

    文章

    195

    浏览量

    30850
  • STM32F10
    +关注

    关注

    0

    文章

    45

    浏览量

    15627
  • ADC2
    +关注

    关注

    0

    文章

    2

    浏览量

    1480
收藏 人收藏

    评论

    相关推荐

    STM32CUBEMX(3)--ADC通过DMA方式采样,USART打印

    使用的产品型号的不同,有一个或两个DMA模块。 STM32F0XX DMA控制器总共有5个通道用于DMA1,每个通道都专门管理来自一个或多个外设的存储器访问请求。它具有一个仲裁器,用于
    发表于 09-04 14:08

    自制一款兼容STM32F1/F4芯片的飞控板

    自己制作的一款兼容STM32F1/F4芯片的飞控板。
    发表于 07-04 14:07 0次下载

    esp32s2使用WIFI功能ADC2模块功能会有冲突,为什么?

    is successful. 如果是我使用WIFI功能ADC2 模块功能会有冲突 ,还是ADC2相关引脚也不能做普通IO口用,或者 DAC 模块也不能用?
    发表于 06-18 06:23

    如何在STM32F439 DMA流中断中区分是哪个通道产生的中断?

    STM32F439有两个DMA控制器DMA1DMA2,每个控制器有8个流,每个流有8个通道,我做的是采用串口1DMA中断接收数据,
    发表于 05-17 08:20

    STM32F334 ADC1ADC2同步采样,有时会出现采ADC1ADC2所有的通道采集数据都一样的情况为什么?

    STM32F334 ADC1ADC2同步采样,有时会出现采ADC1ADC2所有的通道采集数据都一样,给人直观的感觉像是
    发表于 05-15 08:15

    stm32f302和stm32f103的ADC区别是什么?

    请问stm32f302和stm32f103的ADC除了stm32f103有2ADC
    发表于 05-15 08:03

    STM32F1内部ADC的DUAL MODE的使用问题求解

    我想利用STM32F1内部的ADC采集四路电压值,因为要求同时采集,所以我使用了ADC的DUAL MODE,可是由于始终未能读明白芯片手册!ADC的设置与
    发表于 05-09 06:51

    STM32F302 TIM15触发ADC规则扫描DMA连续传输ADC数据失败的原因?

    在测试STM32F302RB的ADC功能的时候遇到了问题:用TIM15 更新事件作为 TRGO源 触发ADC2转换,DMA2_Channel_1
    发表于 05-06 06:20

    stm32 adc1和串口2同时使用DMA出错的原因?

    stm32f103r8t6adc1使用dma方式采集数据串口2使用dma方式收发串口发送没有问题,串口接收只要adc1使用
    发表于 04-22 08:08

    STM32F303xC系列ADC校准一直不通过的原因?

    _DMAMode_Circular); /* Enable the ADC DMA */ ADC_DMACmd(ADC1, ENABLE); /* Enable
    发表于 04-11 08:26

    STM32 ADC+DMA多通道转换数据错位的原因?怎么解决?

    ]​,即为ADC采样的值。 2、​HAL库配置:​ ​扫描模式使能,连续转换模式使能,DMA连续转换请求使能 3、DMA2_CH1中断不使能(目的为了减少进出中断时间)​ 4、whi
    发表于 04-10 07:24

    请问STM32G4的ADC1,ADC2,ADC3,ADC4可以同时工作在独立模式吗?

    咨询下各位: STM32G4的ADC1,ADC2,ADC3,ADC4可以同时工作在独立模式吗?每个ADC
    发表于 04-10 06:01

    STM32 USART中断与ADC DMA中断冲突造成硬件错误的原因?

    使用STM32USART与主机设备通讯,主机设备每隔50ms会与STM32USART通讯一次,使用ADC
    发表于 04-02 06:26

    STM32H750VBT6 ADC1,ADC2,ADC3,加DMA为什么ADC3回调函数不能正常工作?

    STM32H750VBT6ADC1,ADC2,ADC3,加DMA为什么ADC3回调函数不能正常工作 AD
    发表于 03-29 07:23

    求助,STM32F1慢速交叉模式中两个ADC采集和转换时间的问题求解

    前提: 1.目前正在学习HAL库的双ADC慢速交叉模式(DMA版),用PC0采集通道电压值; 2.main.c中只有延时1秒循环打印采集到的
    发表于 03-28 08:32