CUBEMXV6
发表于|更新于|MCU
[toc]
CUBEMXV6.70版本 使用STM32H750 之前时钟配置报错的修改办法
评论遇到的问题解决办法
上述问题,版本重新选择一下
- 如下图所示修改既可
- 虽然配置变了,但是实际工程去查看对应代码没有任何修改
- 没有选项的按下
文章作者: Liya Huang
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wdfk-prog的个人博客!
相关推荐

2025-10-03
ADC+DMA 目标数组无更新 解决办法
@[toc] 代码结构优化12345678910111213141516171819202122/* USER CODE BEGIN Header *//** ****************************************************************************** * @file : adc_dma.c * @brief : ADC with DMA implementation for STM32F7 series ****************************************************************************** * @attention * - STM32F7 L1-cache注意事项: * - 开启D-cache会导致DMA数据不更新 * - 解决方案: * - 使用DTCM内存(0x20000000) * - 手动维护cache一致性(SCB_InvalidateDCache_by_...

2025-10-03
ARM原子操作
@[toc] 原子操作1.概述原子操作很好用,在两三个小线程要同步变量时,不占用中断,也不过度占用资源。如果使用Mutex等并发原语进行这些优化,虽然可以解决问题,但是这些并发原语的实现逻辑比较复杂,对性能还是有一定的影响的。atomic包提供的方法会提供内存屏障的功能,atomic不仅仅可以保证赋值的数据完整性,还能保证数据的可见性,一旦一个核更新了该地址的值,其它处理器总是能读取到它的最新值。原子操作常用的三个操作有load,store,exchange。load方法会取出addr地址中的值;store方法会把一个值存入到指定的addr地址中;如果不需要比较旧值,只是比较粗暴地替换的话,就可以使用exchange方法,它替换后还可以返回旧值。 2.使用● 最简单的使用途径替换NODE_CRITICAL_SECTION_BEGIN与NODE_CRITICAL_SECTION_END之间的变量操作代码;全局变量,且在不同线程间同步才有意义 ● 理解与使用查看测试文件既可 ● 测试代码在STM32WLE上验证通过;如下验证代码通过可证明原子操作的效果,不会使得变量在不同线程...

2025-10-03
ARM Cortex-M内核中DMA内存地址对齐的影响与效率权衡
@[toc] ARM Cortex-M内核中DMA内存地址对齐的影响与效率权衡 1. 引言在基于ARM Cortex-M4/M7等高性能微控制器的嵌入式系统中,直接内存访问(DMA)是实现高数据吞吐量、降低CPU负载的关键技术。然而,DMA控制器的高效运作与其访问的内存地址是否对齐密切相关。本文旨在深度剖析当DMA访问未对齐内存地址时所引发的一系列问题,包括性能下降、硬件故障风险以及数据完整性问题。此外,本文将对“直接使用未对齐地址”与“预先拷贝至对齐缓冲区”这两种策略进行详尽的效率对比分析,以阐明在不同场景下的最优选择。 2. DMA与内存地址未对齐的定义内存地址对齐是指一个数据的存储地址是其数据类型大小的整数倍。例如,一个32位(4字节)整数的地址若是4的倍数,则称其为地址对齐。DMA传输同样遵循此原则,其配置的数据宽度(通常为字节、半字或字)决定了理想的对齐边界。当DMA被配置为以字(4字节)为单位进行传输,但其源或目标内存地址不是4的倍数时,即构成了地址未对齐的DMA访问。 123456789101112131415graph TD subgraph ...

2025-10-03
FEERTOS的TICKLESS模式下最大低功耗的时间只能是349tick的原因分析
@[toc] FEERTOS的TICKLESS模式下最大低功耗的时间只能是349tick的原因分析原因 开启TICKLESS模式后,在PreSleepProcessing和PostSleepProcessing中打印ulExpectedIdleTime变量,即空闲时间.输出如下 代码如下 123456789void PreSleepProcessing(uint32_t *ulExpectedIdleTime){ log_i("ulExpectedIdleTime %lu", *ulExpectedIdleTime);}void PostSleepProcessing(uint32_t *ulExpectedIdleTime){} 分析 为什么是349tick进入一次空闲线程? 分析FREERTOS源码,在portTASK_FUNCTION函数中调用接口,写入空闲时间值 在赋值后打印变量 12345678910111213141516171819202122if( xExpectedIdleTime &...

2025-10-03
FREERTOS开启TICKLESS后最大只能349tick休眠的原因分析
@[toc] 空闲线程的运行时间分析原因 开启TICKLESS模式后,在PreSleepProcessing和PostSleepProcessing中打印ulExpectedIdleTime变量,即空闲时间.输出如下 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56thy2v3-1684831702598)(TICKLESS.assets/image-20230523161450180.png)] 代码如下 123456789void PreSleepProcessing(uint32_t *ulExpectedIdleTime){ log_i("ulExpectedIdleTime %lu", *ulExpectedIdleTime);}void PostSleepProcessing(uint32_t *ulExpectedIdleTime){} 分析 为什么是349tick进入一次空闲线程? 分析FREERTOS源码,在portTASK_FUNCTIO...

2025-10-03
HAL_DMA_ERROR_FE错误代码解决方法
[toc] 错误场景: 使用STM32F7芯片 使用CUBE生成配置 使用如下链接代码 https://download.csdn.net/download/qq_39665253/77125064 具体为DMA+USART+FIFO(软件编写)+双串口。将接受到的数据发送回串口助手中。 表面上看收发正常。实际应用时(MODBUS多从机应用),总会丢失数据。debug看串口错误中断,发现EeeoreCode错误代码为10如何定位进入错误中断前的代码,看下面链接 https://blog.csdn.net/u013181595/article/details/69523331 定位进入错误中断代码,可找到这段代码。即进入了FIFO错误中断了观察CUEB串口设置,并没有使用FIFO。 CUBE生成代...
评论
公告
欢迎光临!有任何问题或想法,欢迎在文章下留言交流,或者通过 关于页面 联系我。






