STM32应用中的两个小误会
来源:茶话MCU 发布时间:2024-06-13 分享至微信


误会1STM32U5系列的DMA只支持8位数据传输吗?

近日有人网络上发帖咨询,他使用STM32U5系列开发,用到SPI通信外设并启用DMA传输。经过一番调试,发现SPI明明支持8位、16位和32位宽度的访问,可是配置DMA传输后,只有8位格式才能正常传输,甚是奇怪。难道STM32U5系列的DMA只支持8位数据传输?

显然,该用户对SPIDMA的基本应用是没什么问题的,而且很可能也是STM32老用户了。这个问题很可能出在DMA的使用惯性上,STM32U5STM32H5系列的DMA跟其它系列有些不同,基于二者的DMA数据传输时,计算传输数据长度时须按照源数据的个数换算成以字节为单位的数字。关于这点在我另外一篇公众号文章《STM32 TIMER+DMA输出PWM异常二案例》有详细介绍,有兴趣的在下面的往期阅读链接里点开阅读,这里不再赘述。

误会2:下面的PWM输出波形是异常的吗?

有STM32用户使用STM32芯片的高级定时器TIM1PWM输出,采用中心对齐计数模式,中途会不时修改通道的CCR值,但仅限于2个不同的CCR值,同时也设置了RCR=1 且开启了CCR的预装载功能。可他在测试过程中意外地发现,通道的PWM输出波形中偶尔会夹杂一个异样的脉冲,如上图红色框内信号。感觉这个波形的占空比不符合两个CCR值中的任意一个,咨询这是否是TIMER的异常输出,想知道这个异样波形是怎么产生的,如果是异常输出,可否有办法改善?

基于客户的使用前提,我借助于示波器经过初步验证也重现了客户反馈的情况。这个异样脉冲怎么来的,我一下子也没想明白。具体展开后续讨论之前,先就后续测试、验证内容做几点约定:

1、使用中心对齐计数模式,RCR=1,CCR寄存器预装功能;

2、输出默认指OCxRef信号或与其同相的OC信号;

3、顶点这里指计数器向上计数记到CNT=ARR-1的时刻;

4、底点指计数器向下计数记到CNT=1的时刻;

5、计数周期是指两两相邻更新事件点所对应的时间;

当我还未想明白STM32用户所给波形中的异样脉冲怎么来时,同事经过一番研究后告知,他只要修改更新事件点就可以消除那个异样脉冲了 ,并展示了示波器波形。这个结果让令有点意外和吃惊。按我的理解,只要RCR=1且开启了CCR预装功能,更新事件无论是锁定在顶点还是底点并无实质差别,都是1个完整周期适用一个CCR值。我对这个结果也颇为不解,觉得原理上解释不通。

后来我使用比较原始也自认为比较可靠的办法,直接使用EXCEL来手绘波形图。经过一番手绘比划,问题也就渐渐明朗、清晰起来,并得出几点感受和结论:

第一、我应该早点使用类似工具绘绘图,这个地方如果你不是对中心对齐模式下的PWM输出特别熟悉是不太容易简单根据示波器波形来判断出那个异样波形是怎么产生的,也就没法进一步判断输出是否异常。通过描图,不仅可以看到最终的输出波形,还能看到每段输出跟计数过程以及CCR值的对应关系,很直观。 【下面各图中箭头所指意味更新事件发生点】

二、同事说通过修改更新事件点就可以消除异样波形也是个误会。他用示波器展示时我们都把关注点盯在那个高电平线段了。当时他修改后,异样的高电平段的确消失了,不过同时又产生了一段低电平异样段,即从高电平异样变为低电平异样。我们不妨看看下图。采用PWM1模式,更新事件事件点发生在顶点。在下半部分带红星的浅红色区域修改CCR值,在浅绿色区域对应的计数周期生效。

单看图中上半部分输出波形的高电平没发现什么异样,也符合两个不同的CCR值。如果查看低电平,显然在CCR发生变化的两个相邻区域【黄色区域】有段低电平信号异样。其实,这个异样并不代表PWM输出异常,该异样段横跨或分属于2个不同计数周期,而在这2个计数周期内的PWM输出都是可控、有效的。也正因为这两个相邻周期内不同的CCR值导致这个结合部的电平持续时间一定与众不同,这是由中心对齐方式下的PWM输出特性决定的。我们并不能因此而断言PWM输出异常失控。【下图是基于PWM2模式,更新事件在底点的输出情形,虽然每个周期都很正常可控,但依然可以发现发生CCR变更的相邻周期的结合部的那个电平长度的异样。注意下图中黄色标记的地方。】

既然这里的PWM输出正常、可控,这个结合部的异样波形自然也属正常现象,不存在消除的说法。换言之,这个结合部的异样段是它本来该有的样子。

下面图形是我后续验证过程中的示波器截图【CCR2000040000两个值间切换,同一PWM模式,两种情形选用不同更新事件点】。

经过上面的分析,客户给出有疑问的波形其实是正常的,那个异样的波形正是相邻两个周期用了不同CCR的体现。所以,这也只是一个误解、误会。

我在STM32用户提供的波形图中加上了绿色虚线以区分计数周期,以便于观察、理解它的由来。

好,今天分享的内容就到这里。分享的是STM32开发过程中可能发生的小误会,或说可能踩到的小坑。作为MCU开发人员,这些往往是难免的。遇到了就冷静面对,加以耐心、细心,梅花香自苦寒来,祝君好运~

~~~~~~~~~~~~~~~~~~~~

[ 新闻来源:茶话MCU,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论

暂无评论哦,快来评论一下吧!