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

描述

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

假如上一篇文章的采集通道换成如下顺序: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)

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分