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

    文章

    577

    浏览量

    105368
  • USART
    +关注

    关注

    1

    文章

    201

    浏览量

    32938
  • STM32F10
    +关注

    关注

    0

    文章

    49

    浏览量

    16131
  • ADC2
    +关注

    关注

    0

    文章

    2

    浏览量

    1603
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自己DIY的STM32F103C8T6最小系统板+ADC使用的是F103的ADC1

    MX_GPIO_Init(); MX_DMA_Init(); MX_ADC1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2
    发表于 12-06 13:14

    定时器触发3路ADC同时采样指定次数

    pluse_cnt 20”值)脉冲,TMR2_CH2 上升沿触发 ADC1/ADC2 采样,TMR2_CH3 上升沿触发 ADC3 采样。
    发表于 09-10 16:06

    STM32G030K6Tx使用ADC+DMA进行6通道ADC采集,DMA传输错位怎么解决?

    F,0,实际测试的时候,AIN5的ADC转换结果被传输到了adc_dma_buff[1],AIN6的ADC转换结果被传输到了
    发表于 09-09 06:30

    制作STM32F1开发板的BSP失败的原因?

    \\bsp\\stm32\\stm32f10x_template,然后通过Keil5打开工程并编译,出现如下错误: compiling stm32f1xx_hal_nor.c...
    发表于 08-29 07:42

    STM32F405RGT6 ADC2+TIM4触发+DMA(DMA2_Stream2_CH1)+DMA中断会死机,怎么解决?

    使用//ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);ADC_DMACmd(ADC2,ENABLE);//使能ADC
    发表于 08-04 07:16

    基于APM32F411 DMA_ADC Handler模式分析及解决

    ADC连续转换采集,因此,我没过滤掉ADC采集中开启中断配置的信息,开启了ADC中断采集,因此这次以APM32F411官方例程中的DMA_ADC
    的头像 发表于 06-24 14:30 889次阅读
    基于APM32<b class='flag-5'>F</b>411 <b class='flag-5'>DMA_ADC</b> Handler模式分析及解决

    STM32F407 ADC Dual regular simultaneous only 模式下最高采样率仅 96 kHz,960 kHz无法工作怎么解决?

    一、平台及配置 MCU 型号 :STM32F407VG (Cortex‑M4) ADCADC1 + ADC2,Dual regular simultaneous only 模式
    发表于 06-16 07:09

    为什么在“PWM Adc Dma 344 S32CT”示例中使用ISR块来读取dma adc通道?

    DMA 模式的 ADC1组的数据,它使用硬件中断块作为墙,就像在中断模式下配置的 ADC2组一样。 我的问题是为什么使用这个块,以及是否有必要读取 ADC1组的值。尽管在
    发表于 04-08 06:39

    STM32F1能使用11.059Mhz外部晶振吗?怎么设置系统频率和PLL?

    请问STM32F1能使用11.059Mhz外部晶振吗?如果可以,怎么设置系统频率和PLL?
    发表于 03-14 06:31

    求助,关于STM32F407 DMA NVIC设置的疑问求解

    采用STM32F407, DMA1 stream5(request: usart2_rx)DMA1 stream6(usart2_tx),
    发表于 03-13 08:09

    Arduino中可以使用STM32F1或者STM32F4系列芯片的内置看门狗吗?

    Arduino中可以使用STM32F1或者STM32F4系列芯片的内置看门狗吗
    发表于 03-13 07:32

    STM32G030F6 ADC+DMA多通道非连续采样无法正常工作怎么解决?

    配置:使用STM32G030F6 ADC外设时,ADC使用两个通道。DMA配置为循环模式,ADC扫描模式+非连续采样。 问题:初始化阶段能进
    发表于 03-12 07:10

    STM32G474 ADC为什么无法正常启动转换?

    ;multimode) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_1
    发表于 03-12 06:52

    stm32f103c8t6 ADC channel 5采样被干扰导致程序卡死重启怎么解决?

    :Channel_2、Channel_8、Channel_9。 ADC1通过TIM2_CC2事件触发单次采样,用DMA搬运完成后在完成中断里处理数据,
    发表于 03-07 16:29

    如何使用DMA进行USART不定长度接收

    在上一讲中,我们对USART进行了简单介绍,并讲解了如何在不使用DMA的情况下进行不定长度数据接收,本讲将着重讲解如何使用DMA进行USART不定长度接收。
    的头像 发表于 02-18 17:01 1367次阅读
    如何使用<b class='flag-5'>DMA</b>进行<b class='flag-5'>USART</b>不定长度接收