吃了榴莲不可以吃什么| 身高别体重是什么意思| 小拇指和无名指发麻是什么原因| 值神天德是什么意思| 备孕需要吃什么| 明年生肖是什么| 大姨妈来了不能吃什么水果| 晚上睡觉口干是什么原因| 双向情感障碍吃什么药| 1979属什么生肖| saucony是什么品牌| 梦到蛇什么意思| 鹅口疮用什么药| 皮肤自愈能力差缺什么| 什么是阳光抑郁症| 什么是保守治疗| bl和bg是什么意思| 跃字五行属什么| 嘘寒问暖是什么意思| 再生纤维素纤维是什么面料| 前列腺穿刺是什么意思| 计抛是什么意思| 湿热是什么原因引起的| 95年的猪是什么命| 衣原体感染是什么意思| 结婚证需要什么资料| 胃不舒服做什么检查| omega什么意思| 婵字五行属什么| sv是什么意思| 测脸型适合什么发型| 羊绒和羊毛有什么区别| 燕京大学现在叫什么| nars属于什么档次| 头里面有肿瘤有什么症状| 梦见好多猪是什么意思| 拉肚子能吃什么菜| mbi是什么意思| 入殓师是做什么的| 埃及的母亲河是什么| 磁共振和核磁共振有什么区别| 婴儿流鼻涕吃什么药| 踏空是什么意思| 左后背疼是什么原因| 什么是物理| 身上有淤青是什么原因| 肾结石忌口什么| 十八罗汉分别叫什么| 牙痛用什么药| 脊椎侧弯挂什么科| 县级干部是什么级别| 生殖细胞是什么| 连襟是什么意思| 砭石是什么石头| 一什么无余| 木姜子什么味道| 肝郁血瘀吃什么中成药| 改良碱性土壤用什么| 文笔是什么意思| 大脑供血不足用什么药| 过敏喝什么药| 牛津布是什么材质| 有什么游戏| 挂名什么意思| 隐疾是什么意思| 总胆汁酸高是什么原因| 花中皇后指的是什么花| 男男叫什么| 西瓜能做什么美食| 磨牙是缺什么| 补血吃什么食物| 洗衣机启动不了是什么原因| 尿道口感染吃什么药| 阳虚火旺吃什么中成药| 兔肉不能和什么一起吃| 诱因是什么意思| 东北方是什么方位| 正团级是什么军衔| 预计是什么意思| 乙肝两对半45阳性是什么意思| 1985年是什么年| 特需病房是什么意思| 梦到牙齿掉了是什么意思| 门诊是什么意思| 半青皮是什么意思| 什么样的人容易得脑梗| 你什么意思| 36是什么意思| 松花蛋不能和什么一起吃| 长可以加什么偏旁| 哺乳期什么东西不能吃| 防中暑喝什么水| 公共关系是什么意思| 他是什么意思| 乳头发黑是什么原因| 319是什么意思| sm是什么| 什么病需要化疗| 颈椎脑供血不足吃什么药| nsfw是什么意思| roma是什么意思| 官杀旺是什么意思| bmr是什么意思| 紫癜是什么| 刮痧有什么好处和坏处| 耳石症是什么| 吃燕麦片有什么好处| 牙神经拔了对牙齿有什么影响| 什么是智齿牙| 乳胶是什么意思| 什么米最贵| 荆芥是什么菜| 别扭是什么意思| 南宁有什么好吃的| 女性白带有血丝是什么原因| 每天跳绳有什么好处| 双肺纹理增多是什么意思严重吗| 三叉神经痛挂什么科就诊| 诺欣妥是什么药| 什么叫有机| 鳗鱼是什么鱼| 社保缴纳基数是什么意思| 偏光太阳镜是什么意思| 坐月子可以吃什么零食| 酸根是什么| 乳头刺痛什么原因| 十月一日什么星座| 苦瓜泡水喝有什么功效和作用| 将星是什么意思| 儿童水杯什么材质好| 公元前是什么意思| 月经提前了10天是什么原因| 手脚发胀是什么前兆| 高血糖不能吃什么| 后背痛是什么病的先兆| 名节是什么意思| 肠鸣是什么原因引起的| 叶子发黄缺什么肥| 绝望的绝是什么意思| 拔完智齿需要注意什么| 一天当中什么时候最热| 现在可以种什么农作物| 惠字五行属什么| 荨麻疹用什么药最好| 骨髓水肿吃什么消炎药| 香港车牌号是什么样子| 萧墙是什么意思| 大兴安岭属于什么市| 南瓜吃多了有什么坏处| 月加厷念什么| 兔和什么相冲| 三七治什么病最好| 1997年7月1日属什么生肖| 红花有什么功效| 朝拜的意思是什么| 香菜什么时候种| 孕妇有狐臭擦什么最好| 复原乳是什么意思| dia什么意思| 头晕喝什么饮料| 封闭针是什么| 辰五行属性是什么| 孩子铅高有什么症状| 得了肠胃炎吃什么最好| 心动过速吃什么药最好| 淋巴结节什么症状| 跖疣念什么字| beside是什么意思| 劳碌命是什么意思| 小腹痛挂什么科| 脚面麻木是什么原因| 阳痿早泄吃什么药| 勋章是什么意思| 为什么会血脂高| 不够时间好好来爱你是什么歌| 咳嗽吃什么药好得快| 什么病误诊为帕金森| 乳腺癌吃什么好| 直肠炎吃什么药好的快| 心主什么| 肋骨下面疼是什么原因| 愿闻其详什么意思| 多潘立酮片是什么药| 孕妇做无创是检查什么| 53岁属什么| 头皮一阵一阵发麻是什么原因| 苒字五行属什么| 痉挛吃什么药效果好| 献出什么| 马口鱼是什么鱼| 缺少雌激素吃什么可以补充| 面部油腻是什么原因| 什么时候拔罐最好| 早期教育是什么| 男鸡配什么属相最好| 干燥综合症挂什么科| 长得标致是什么意思| 什么时候有流星| 嘴干嘴苦是什么原因| 口若什么什么| 一进去就射是什么原因| 甲亢病是什么原因引起的| 跑步后尿血是什么情况| 副鼻窦炎症是什么意思| 巴卡是什么意思| 可人是什么意思| 浩瀚是什么意思| 打嗝用什么药| 肾结石吃什么药| 1.29是什么星座| 郭麒麟什么学历| 猫藓长什么样| 物欲横流什么意思| 脖子出汗多是什么原因女人| 黑卡是什么意思| 衣原体感染用什么药| 气虚是什么原因造成的| rsa胎位是什么意思| 穆字五行属什么| 刘三姐是什么生肖| 落子无悔是什么意思| 想吃辣的是什么原因| 代谢慢是什么原因引起的| 经期血量少是什么原因| 副团级是什么军衔| 胎盘前壁是什么意思| 有什么园| 芈月传芈姝结局是什么| 腱鞘炎吃什么药好使| 1月22号什么星座| 黄毛什么意思| 五指毛桃根有什么功效| 歆字取名什么寓意| 反复呕吐是什么原因| 3a是什么意思| 女单读什么| 看腋窝挂什么科| 额头爱出汗是什么原因| 身体缺镁会有什么症状| 什么叫肺部纤维灶| 什么是c字裤| 什么是晶体| 油菜籽什么时间种| o型rhd阳性是什么意思| 1935年属什么生肖| 血常规24项能查出什么病| 水肿吃什么消肿最快| 奶粉中的opo是什么| 吃什么水果养胃| 肝硬化挂什么科| 肾结石什么原因引起的| 既济是什么意思| 砒霜是什么| 粉底液和bb霜有什么区别| 阳明病是什么意思| 分家是什么意思| 为什么会掉头发| 磊字五行属什么| 什么样的吸尘器比较好| 为什么睡不着觉会胡思乱想| 安全期什么时候| 碱性磷酸酶偏高说明什么问题| 芦荟有什么功效与作用| 牙龈黑紫色是什么原因| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 【STM32F769】记一次由于开启D-Cache之后DMA数据传输出错的问题查

共7条 1/1 1 跳转至

【STM32F769】记一次由于开启D-Cache之后DMA数据传输出错的问题查找与解决

工程师
2025-08-04 21:13:25   被打赏 35 分(兑奖)     打赏
百度 第二代逸动先期将搭载一台代号为JL478QEN的升自然吸气发动机,配有直喷技术,其最大功率94千瓦;传动系统或提供5挡手动和4挡自动变速器可选;另外还有一款的发动机。

缘由

我原来在STM32F769I-DISC1开发板上使用ST7789成功的实现了LVGL,使用spi_dma实现16bit传数据,原来跑得一切正常的。我今天移植FreeRTOS之后,考虑到性能优化,在main中,添加了指令缓存与数据缓存之后,就出现了花屏现象:

SCB_EnableICache();
  /* Enable D-Cache */
  SCB_EnableDCache();

现象如下:

image.png

禁用后,一切又正常了,因此我怀疑是开启I-Cache与D-Cache的原因。

原因分析

经查找资料,分析可能是我在发送DMA数据之前有缓存数据存在,因此发生送的数据有可能没有请理。网上的如下原因分析:

在 STM32F769 中启用指令缓存(I-Cache)和数据缓存(D-Cache)后,DMA 发送数据出错,可能是由缓存一致性问题导致的。下面详细分析可能的原因及对应的解决办法。 可能的原因 1. 缓存一致性问题 启用 D-Cache 后,数据可能会被缓存到高速缓存中,而 DMA 直接访问的是内存地址。如果缓存中的数据与内存中的数据不一致,DMA 就可能发送错误的数据。 2. 未进行缓存操作 在进行 DMA 操作前后,没有对相关的缓存区域进行适当的操作(如使无效、清理等),导致缓存中的数据没有及时更新到内存中,或者内存中的数据没有及时更新到缓存中。 3. 地址对齐问题 DMA 操作通常要求数据地址和长度满足一定的对齐要求。如果数据地址或长度没有正确对齐,可能会导致 DMA 传输出错。

解决方法

根据以及资料的提示,我找到了DMA发送的地方,在传输之前清理D-Cache,确保数据从缓存写回到内存。DMA发送结束之后使D-Cache无效,确保后续访问的数据是最新的。

修改代码如下:

while (total_size > 0)
        {
            uint16_t chunk_size = (total_size > 32000) ? 32000 : total_size;
            // 清理D-Cache,确保数据从缓存写回到内存
            SCB_CleanDCache_by_Addr((uint32_t *)(color_p + offset), chunk_size * 2);
            // 使用 DMA 发送数据
            if (HAL_SPI_Transmit_DMA(&hspi2, (uint8_t *)(color_p + offset), chunk_size*2) != HAL_OK)
            {
                printf("DMA transmission failed\r\n");
                break;
            }
            // 等待DMA传输完成
            while (spi2_dma_tx_flag == 0)
                ;
            // 使D-Cache无效,确保后续访问的数据是最新的
            SCB_InvalidateDCache_by_Addr((uint32_t *)(color_p + offset), chunk_size * 2);
            spi2_dma_tx_flag = 0; // 重置标志
            total_size -= chunk_size;
            offset += chunk_size;
        }

重新烧录程序后,花屏现象成功解决。

image.png

经验总结

这次的现象,是显示屏,很容易就出现问题。如果在其他的场合,比如发送串口数据,那问题暴露就不是这么的明显。因此在开启数据缓存功能之后,切记要注意这点,在DMA传输之前把数据清理。




关键词: STM32F769     D-Cache     数据     缓存    

专家
2025-08-04 18:42:25     打赏
2楼

过程很痛苦,经验很宝贵


院士
2025-08-04 19:02:31     打赏
3楼

Cache的开启会加速MCU,提高性能,但也会带来一些小的“烦恼”!


高工
2025-08-04 20:31:07   被打赏 10 分(兑奖)     打赏
4楼

也可以把使用DMA 搬运的显寸数据通过mpu 配置为no_cache属性,这样就不会因开关cache 将一些已经在cache里的非显存数据flush掉


高工
2025-08-04 11:32:07     打赏
5楼

赞,宝贵的经验!学到了


工程师
2025-08-04 10:29:01     打赏
6楼

感谢分享,也可以把使用DMA 搬运的显寸数据通过mpu 配置为no_cache属性,这样就不会因开关cache 将一些已经在cache里的非显存数据flush掉,这个怎么设置?


菜鸟
2025-08-04 02:16:28     打赏
7楼

好文章一起学习


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
青蒜炒什么好吃 一什么山泉 双下肢静脉彩超主要检查什么 什么叫双向情感障碍 唾液酸苷酶阳性什么意思
口痰多是什么原因 吃什么长个子最快 平安喜乐什么意思 为什么8到10周容易胎停 反酸是什么意思
闭经有什么症状 久经沙场是什么意思 老年人缺钾吃什么好 桂林山水下一句是什么 怀孕天数从什么时候算起
刚字五行属什么 榧子是什么 溯溪是什么意思 7.28是什么星座 左是什么意思
阿尔山在内蒙古什么地方cj623037.com 湖北九头鸟是什么意思hcv8jop7ns2r.cn 手脚麻是什么原因hcv9jop5ns4r.cn 拍大腿内侧有什么好处hcv8jop8ns7r.cn 转氨酶高吃什么药最好hcv8jop4ns9r.cn
为什么吃荔枝会上火hcv7jop6ns0r.cn 洋姜有什么功效与作用hcv8jop0ns4r.cn 低压高用什么药hlguo.com 九什么一毛hcv9jop7ns0r.cn 什么体质容易长肿瘤hcv8jop4ns3r.cn
儿童口臭什么原因引起的hcv9jop0ns9r.cn 7月20号是什么星座hcv8jop5ns4r.cn 甲亢有什么症状表现hcv8jop5ns6r.cn 梨的功效与作用是什么hcv9jop5ns8r.cn 梦见打老婆是什么预兆hcv8jop3ns4r.cn
炎性改变是什么意思hcv9jop4ns0r.cn 拉k是什么意思hcv9jop0ns6r.cn 甲醛是什么东西adwl56.com 心外科是看什么病的liaochangning.com 蜂蜜什么时候喝最好hcv8jop1ns8r.cn
百度