• 319查看
  • 0回复

[底层软件] STM32应用五问五答

[复制链接]


该用户从未签到

发表于 27-4-2024 09:54:20 | 显示全部楼层 |阅读模式

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


这里就STM32用户咨询到的几个问题,稍加整理分享出来供君参考。

第1问:我目前使用STM32G0B1,代码里有设计BOOT代码,想在跳转前清理各类使用过的外设寄存器。请问STM32有没有复位所有外设寄存器的函数?

答:其实,每个STM32系列都有相关寄存器和应用函数用来针对指定外设或挂在指定总线上的外设进行批量复位,即令其回归到初始复位状态。以STM32G0系列为例,在STM32HAL库里就有类似下面的各种实现函数。

STM32应用五问五答w2.jpg

关于这个话题可以参考本公众号另外一篇文章《话说STM32外设复位》,那里有更多详细解读,此处就不再赘述。

第2问:我在使用STM32F730的时候,如果SRAM设置到0x20010000 - 0x2001FFFF之间,DMA传输流程都对,但是SPI输出的数据不对,这是怎么回事?另外,在用USB的bulk传输的时候也是,数据有时是对的,有时候错的。

如果SRAM的缓冲区设置到0x20000000-0x2000FFFF之间的时候,就一切正常。请问这是什么原因?

答:现在问题是,只要代码使用的RAM内存锁定在0x20000000-0x2000FFFF之间时功能都正常,只有使用到0x20010000之后的RAM才有异常。结合他使用的芯片STM32F730,基于ARM Cortex-M7内核的,芯片里有高速L1 Cache。同时,他的代码里还用到了DMA。这样看来,如果他的代码启用了D-Cache,用到2个主设备【CPU和DMA】,如果没有针对D-Cache的使用做合理的配置,就很可能发生数据一致性方面的问题。经用户的进一步反馈,他的代码里也的确使用了D-Cache。

进一步的问题就是,为什么这里不能使用0x20010000之后的区域呢?为探究竟,我们有必要看看STM32F730相关的参考手册。

经查证,0x20000000-0x2000FFFF区间是属于DTCM区,CPU访问它时不使用D-Cache,即CPU每次访问DTCM时都是直接访问,当然DMA是不能使用D-Cache的。这时自然不会产生数据访问的一致性问题。而0x20010000~0x2001FFFF区域是经AXI接口访问的,默认情况下,CPU访问这块区域是可以使用D-Cache的【前提是使能了D-Cache】。

STM32应用五问五答w3.jpg

也就是说当我们使用到0x20010000之后的RAM区域时,CPU访问这块可以启用D-Cache。如果DMA也访问这块,若不对该区域做合理存储属性配置或适当操作就可能发生数据一致性问题。此时我们可以对相应RAM区域做MPU配置,将其配置为Shareable 且NonCacheable属性。或在代码里适时地使用针对Cache的清除或无效操作。关于MPU如何配置,这里不做展开,有兴趣的可以进一步了解。本公众号里也有多篇相关文章可供参考阅读。

第3问:在使用STM32 TIMER事件作为触发输出时,那个RESET信号是怎么回事?跟定时器从模式的RESET 模式有什么关系?

STM32应用五问五答w4.jpg

答:这里的RESET事件特指通过软件方式对TIMx_EGR寄存器的UG进行置1操作。该操作可以产生1个触发信号给到其它外设,比方ADC,DAC或其它TIMER。同时这个RESET操作对当前定时器会产生更新效果或复位效果,具体点说就是产生更新事件,当前计数器发生重装从新开始计数。

该RESET操作跟定时器RESET从模式有关系吗?没有任何关系,但有相同的现象或效果。即处于RESET从模式的TIMER收到触发信号时,该从定时器也会产生更新事件、计数器进行重装计数。至于给到处于RESET从模式的TIMER的触发信号,可以是源于前级TIMER的更新事件、计数器使能事件、比较事件产生的,也可以是软件RESET操作产生的。

第4问:在使用STM32 ADC多通道转换时,如果不希望一次性转换完成如何操作?

答: 看情况。如果你选择使用的多个ADC通道,平常转换顺序固定,只是不希望基于扫描模式启动后就一次性转换完毕,而是分次分批转换完成。这时我们可以考虑使用ADC的分组转换模式。可以参考本公众号文章《STM32 ADC间断转换模式应用示例》。

如果你选择使用的多个ADC通道,使用过程中转换顺序随机,只是想每次就某个通道做转换,不同时刻可能使用不同的通道。本质上讲,这其实就是单通道转换,在配置时按单通道配置。需要使用哪个通道时,就针对某个通道配置后再做启动。这点可以参考本公众号文章《ADC多通道随机选择性转换应用示例》。
第5问:在使用STM32片内的Vrefint电压是ADC的参考基准吗?它有什么用?答:STM32片内的Vrefint电压不是ADC模块的参考基准,STM32片内ADC的参考基准可以是Vref,或VDDA【多数时候VDDA跟VDD是接在一起的】,有些系列还可以是VrefBuf电压。注意不要把Vref、Vrefint、VrefBuf搞混了!事实上经常有人弄混。【早期推出的系列STM32片内没有VrefBuf】 Vrefint电压值一般固定在1.2v左右,波动很小。各STM32芯片数据手册有给出参数范围【下图来自STM32G0系列数据手册】:
STM32应用五问五答w5.jpg

至于它有什么用,这要看情况。它只是个备用项、可用项。

我经常拿它来验证ADC功能是否正常,因为其电压可知且比较稳定,无须外边引线。有些场合,Vrefint作为相对稳定的AD输入,反过来监测芯片的VDD,此时ADC模块的参考电压VDDA跟VDD是接在一起。有时Vrefint或其分压可用作片内比较器的输入做其它用途。

这应该是本人2023年的最后一篇分享,就此打住。心怀感恩,迎接新年!




该用户从未签到

发表于 12-3-2025 01:43:00 | 显示全部楼层
第2问:如何在主函数中保证延迟上电函数比SPI、ADC等其他初始化代码后执行?能提供一些优先级的设置方法吗?

答:在STM32中,可以通过中断优先级和中断分组配置来设置代码的执行优先级。此外,也可以利用启动文件中的代码加载过程控制函数执行的顺序。关于SPI和ADC等外设的初始化代码,可以在主函数之前调用一个初始化函数,并在该函数中设置相应的优先级。这样可以确保延迟上电函数在SPI和ADC等外设初始化之前执行。具体的实现方式可以参考STM32的启动文件和相关文档。请注意,优先级的设置应该根据实际的应用场景和需求进行调整,确保系统的稳定性和可靠性。同时请注意合理地规划代码结构,以确保代码的可读性和可维护性。关于这个话题,可以参考相关教材或手册进行深入了解。

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

使用道具 举报



该用户从未签到

发表于 12-3-2025 01:43:00 | 显示全部楼层
第2问:请问在进行硬件断电再开机时,怎么保证STM32的程序能正常启动运行?例如遇到突然断电后的情况。有什么建议吗?是否需要自己编写程序实现电源监控复位等功能?

答:在进行硬件断电再开机时,为确保STM32的程序能正常启动运行,建议采用以下措施:

1. 使用看门狗定时器(Watchdog Timer)进行复位保护,以防程序异常导致死机。
2. 利用电源管理功能,实时监测电源电压,当其低于或高于设定值时自动复位。
3. 在程序中加入电源异常处理逻辑,如检测电源状态并作出相应处理。

第3问:在使用STM32CubeMX配置好外设后生成的代码是否还需要人工修改和优化?如果需要的话,一般应该在哪些部分进行优化?

答:使用STM32CubeMX配置外设生成的代码,虽然能满足基本需求,但在实际项目中仍可能需要人工修改和优化。一般优化的部分包括:

1. 初始化配置部分:根据实际项目需求调整相关配置参数。
2. 中断处理函数:根据实际情况优化中断处理逻辑,提高系统响应速度。
3. 代码结构:根据实际需求调整代码结构,使其更加清晰易懂。

第4问:STM32的时钟树配置起来比较复杂,有没有推荐的配置方法和注意事项?另外时钟树配置好之后怎样验证配置是否正确?是否有相关工具可以使用?

答:关于STM32的时钟树配置,建议按照官方参考手册的步骤进行配置,并遵循以下注意事项:

1. 清晰了解各个时钟源及其相互关系。
2. 根据实际需求选择合适的时钟频率和配置方法。
3. 注意时钟配置的时序要求,避免产生时序错误。

验证时钟树配置是否正确,可通过查看寄存器配置值和使用示波器等工具测量实际时钟波形。此外,还可以使用STM32CubeMX的时钟树配置工具进行辅助验证。

第5问:在使用STM32进行开发时,如何进行调试和调试过程中有哪些技巧可以提高效率?除了使用ST-LINK等工具外还有哪些推荐的工具和方法?

答:在进行STM32开发时,调试是关键环节。以下是一些调试技巧及推荐工具:

1. 使用ST-LINK等工具进行在线调试,逐步跟踪程序执行过程。
2. 利用串口输出调试信息,便于排查问题。
3. 采用断点调试,分析程序行为。
4. 使用第三方调试工具如Total Phase Beagle等,进行更深入的调试和分析。

同时,为提高调试效率,建议:

1. 编写清晰的代码注释。
2. 制定规范的调试流程。
3. 积累常用的调试技巧和方法。

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

使用道具 举报

快速发帖

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

本版积分规则

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

GMT+8, 19-8-2025 04:03 , Processed in 0.350743 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.