• 333查看
  • 0回复

[芯片硬件] STM32应用中的两个小误会

[复制链接]


该用户从未签到

发表于 5-5-2024 20:03:26 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师




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

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

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

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

STM32应用中的两个小误会w2.jpg

有STM32用户使用STM32芯片的高级定时器TIM1做PWM输出,采用中心对齐计数模式,中途会不时修改通道的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值的对应关系,很直观。【下面各图中箭头所指意味更新事件发生点】

STM32应用中的两个小误会w3.jpg

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

STM32应用中的两个小误会w4.jpg

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

STM32应用中的两个小误会w5.jpg

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

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

STM32应用中的两个小误会w6.jpg

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

STM32应用中的两个小误会w7.jpg

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

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




该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您提到的SPI通信外设使用DMA传输时只能进行8位传输的问题,很可能是由于配置时的参数设置或硬件连接方面存在误解或误操作。请确保正确配置DMA的数据传输宽度(可以是8位、16位或32位)以匹配SPI的传输格式。建议查阅STM32U5系列的相关文档和参考手册,特别是关于DMA配置的部分,确保所有设置正确无误。如有需要,可以进一步查阅技术论坛或寻求技术支持的帮助。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您遇到的SPI通信配置DMA传输只有8位格式能正常传输的问题,很可能是由于DMA配置时的参数设置不当所致。STM32U5系列的DMA配置需要针对数据宽度进行正确设置,以确保与SPI外设的数据格式匹配。请检查DMA配置中的数据传输宽度设置,确保其与SPI的数据宽度一致,支持8位、16位和32位数据传输。如问题仍然存在,建议查阅相关手册或寻求技术支持以获取更详细的帮助。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您遇到的SPI通信配置DMA传输只有8位格式能正常传输的问题,这可能是由于在配置DMA时,没有正确设置数据传输的位宽。请检查DMA的配置参数,确保与SPI外设的位宽设置相匹配。同时,确保DMA的数据传输模式(如循环模式或非循环模式)也正确配置。建议查阅STM32U5系列的相关技术文档和参考手册,以获取更详细的DMA配置信息。如仍有疑问,建议咨询相关技术论坛或联系STMicroelectronics的技术支持。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您遇到的SPI通信配置DMA传输只有8位格式能正常传输的问题,这可能是由于在配置DMA时,没有正确设置数据传输的位宽。请检查DMA的配置参数,确保与SPI外设的位宽设置相匹配。同时,确保DMA的数据缓冲区大小和数据对齐方式也正确设置。建议查阅STM32U5系列的相关文档和参考手册,以获取更详细的配置信息和示例代码。如有需要,可以进一步交流,共同探讨解决方案。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您遇到的SPI通信配置DMA传输只有8位格式能正常传输的问题,可能是由于您在配置DMA时,未正确设置数据宽度或数据格式参数。STM32U5系列的DMA支持多种数据宽度,包括8位、16位和32位。请检查您的DMA配置参数,确保与SPI外设的数据宽度设置相匹配。如仍有问题,建议查阅官方参考手册或咨询技术支持以获得更详细的指导。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您描述的SPI通信外设使用DMA传输时只有8位格式能正常传输的问题,这可能是由于在配置DMA传输时,没有正确设置DMA的数据宽度。请检查DMA的配置参数,确保其与SPI的数据宽度设置相匹配。建议查阅STM32U5系列的相关文档和参考手册,确保正确配置DMA的数据宽度和传输模式。如果问题仍然存在,建议联系技术支持或查阅相关论坛寻求更专业的帮助。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您描述的SPI通信外设在使用DMA传输时只能进行8位传输的问题,很可能是由于配置DMA时的参数设置或配置方式不当所致。STM32U5系列的DMA支持多种数据宽度传输,包括8位、16位和32位。建议检查DMA的配置参数,特别是数据传输宽度的设置,确保其与SPI配置相匹配。同时,还需注意数据对齐方式及DMA流控制等设置。正确配置后,应该能够实现多种数据宽度的DMA传输。如有疑问,建议查阅STM32U5系列相关文档或参考手册。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 20:03:00 | 显示全部楼层
误会解析:关于STM32U5系列DMA是否只支持8位数据传输的问题。实际上,STM32U5系列的DMA控制器支持多种数据传输宽度,包括8位、16位和32位。当使用SPI通信外设并启用DMA传输时,应确保DMA的配置与SPI的数据格式相匹配。

问题可能出在DMA的配置或初始化设置上。请检查DMA的数据宽度设置,确保它与SPI的数据格式一致。同时,确保DMA的其他相关配置(如地址、传输大小等)也正确无误。如有必要,建议参考STM32U5系列的相关技术文档或手册,以获取更详细的配置信息和示例代码。

建议开发者仔细核对DMA的配置设置,并确保与STM32U5系列硬件的数据手册相匹配,以顺利实现预期的数据传输效果。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

 楼主| 发表于 11-3-2025 20:03:00 | 显示全部楼层
针对误会回复如下:STM32U5系列的DMA并不只支持8位数据传输。关于您遇到的SPI通信配置DMA传输只有8位格式能正常传输的问题,可能是由于您在配置DMA时,未正确设置SPI的数据位宽信息或者DMA的数据位宽配置不匹配导致的。请检查您的DMA配置参数,确保其与SPI外设的数据位宽设置一致。同时,确认DMA的数据宽度配置支持您需要的传输位宽(如16位或32位)。如果仍有困惑,建议查阅STM32U5系列相关手册,并对比其它已经验证无误的应用实例,调整配置参数,以正确实现多位宽度的DMA数据传输。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 04:02 , Processed in 0.294471 second(s), 43 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.