奶篓子是什么意思| 急性扁桃体炎吃什么药| 冬瓜烧什么好吃| hkc是什么牌子| 色盲是什么遗传方式| 莆田医院是什么意思| 企鹅吃什么| 痛风什么引起的原因有哪些| 女生月经不规律的原因是什么| 结肠炎吃什么食物好| 小孩满月送什么礼物好| 墨菲定律是什么| 月经来了吃什么好| 腰突然疼是什么原因| 男朋友生日送什么礼物| 白色念珠菌是什么病| 油面筋是什么做的| 转移灶是什么意思| 一什么清香| 7月13日什么星座| 双鱼座最配什么星座| hpv是什么意思啊| 呕气是什么意思| 脚丫痒是什么原因| yy飞机票是什么| 带状疱疹什么引起的| 足外翻挂什么科| 为什么突然得了荨麻疹| 猴子属于什么类动物| 二元酸是什么| 出圈是什么意思| 女性湿气重喝什么茶| 旧历是什么意思| 葛优躺是什么意思| 猪头猪脑是什么生肖| 致青春是什么意思| 鸭子烧什么配菜好吃| 什么不什么干| 鸡爪烧什么好吃| sport什么品牌| 医保定点医院是什么意思| 吃阿胶有什么好处| superstar什么意思| 黑吃黑是什么意思| 黄帝叫什么| 百里挑一是什么生肖| 睡觉流鼻血是什么原因| 搪瓷杯为什么被淘汰了| tbc是什么意思| 身上有淤青是什么原因| 五级士官是什么级别| 烧碱是什么| 抗体弱阳性是什么意思| 阿迪达斯是什么牌子| 11月份是什么星座| 医院红色手环代表什么| 蓝什么什么| 吃什么能| 梦见剪头发预示什么| 鱼子酱是什么东西| 女生胸部什么时候停止发育| 腿发软无力是什么原因引起的| 阴离子是什么| 胃食管反流咳嗽吃什么药| 劳模是什么意思| 缩量横盘意味着什么| 英雄联盟msi是什么| 1月什么星座| 说笑了是什么意思| 静息是什么意思| 鬼画符是什么意思| 胎盘老化是什么原因造成的| 21.75是什么意思| 蓦然回首什么意思| 猫是什么生肖| 什么叫修辞手法| 放炮是什么意思| shark是什么牌子| 梦见煮饭是什么意思| 痛风频繁发作说明什么| asic是什么意思| 木耳和什么不能一起吃| 脚麻木是什么病的前兆| 芭蕉和香蕉有什么区别| 胆囊大是什么原因| 今天买什么股票| 可爱的动物是什么生肖| 渗透压低是什么意思| gris是什么颜色| 防晒霜和隔离霜有什么区别| 巳是什么意思| 溶血性黄疸是什么原因引起的| 父母是什么意思| 女人切除子宫有什么影响| 一什么新月| 什么食物胆固醇含量高| 妾是什么意思| 做高铁不能带什么| 1985是什么年| 产妇吃什么下奶快又多| 梦到自己孩子死了是什么征兆| 黑色水笔是什么笔| 什么东西越洗越脏| 梦见抬死人是什么意思| 白细胞减少吃什么药| 早上5点多是什么时辰| 开塞露用多了有什么副作用| 杀什么吓什么| 宝五行属性是什么| 大姨妈推迟什么原因| 口干口臭口苦吃什么药| 肝经湿热吃什么中成药| 破伤风有什么症状| 一枚什么| 荷叶茶有什么作用| 一个家庭最重要的是什么| 青出于蓝是什么意思| 两榜进士是什么意思| 女生为什么会叫| who是什么组织| 骨髓炎是什么病| 师姐是什么意思| 心肌炎查什么能查出来| 文雅是什么意思| 精子对女性有什么好处| 3885是什么罩杯| 肌酐高是什么意思| 肚子跳动是什么原因| 吃什么药能快速降血压| 蝙蝠吃什么食物| 心跳快吃什么药| 爱在西元前什么意思| 常喝枸杞泡水有什么好处| 餐后胆囊是什么意思| 哮喘病应该注意什么| spv是什么| 一直咳嗽是什么原因| 血压偏低吃什么| 宫颈囊肿有什么症状表现| 怀孕两个星期有什么反应| 什么的故事填词语| 薛之谦属什么生肖| 食谱是什么意思| 骄阳似火是什么意思| 胰腺最怕什么| 命悬一线的意思是什么| 为什么不建议儿童做胃镜| 微信加入黑名单和删除有什么区别| 蛾子吃什么| 斐乐什么档次| u盘什么牌子好| 丙肝阳性是什么意思呢| 每晚都做梦是什么原因| 东方不败练的什么武功| 黄色加蓝色等于什么颜色| 袁字五行属什么| 经常不吃晚饭对身体有什么影响| dior是什么意思| 梦到头发白了是什么意思| 铜锣湾有什么好玩的| 产检请假属于什么假| 小孩上户口需要什么材料| 粥样动脉硬化吃什么药| 指甲盖有竖纹是什么原因| 三个贝念什么| 皮肤上出现小红点是什么原因| 手抖是什么情况| 梦见小葱是什么意思| 衣锦还乡是什么意思| 吃什么增强免疫力最快| 它是什么结构| 女人长期喝西洋参有什么好处| 脸上长痘痘用什么药膏效果好| 当归是什么| 体面什么意思| 面基什么意思| 脂溢性皮炎吃什么药| 一什么房| 阴灵是什么意思| 重阳节是什么时候| 明是什么生肖| 折什么时候读she| 神经性耳鸣有什么症状| 口干口苦吃什么药| 甲申日五行属什么| 苹果熬水喝有什么功效| eo什么意思| 舰长是什么级别| 梦见别人给钱是什么意思| 红豆是什么意思| 碳水化合物指的是什么| 人少了一魄什么反应| 菠萝蜜吃多了有什么坏处| 哔哩哔哩是什么网站| 四大才子中状元是什么生肖| 水杨酸是什么| 手脚脱皮吃什么维生素| 随心而欲是什么意思| 维生素c什么时候吃效果最好| hy什么意思| 为什么叫水浒传| 肢解是什么意思| 3月份什么星座| 洁颜油是干什么用的| 手突然抖动是什么原因| 青菜炒什么好吃| 广基息肉是什么意思| 灰指甲是什么样的图片| 泞字五行属什么| c1和c2有什么区别| 什么方法可以让月经快点来| 割包皮有什么用| 懂事是什么意思| 血脂高不能吃什么| 象牙有什么作用与功效| 执迷不悟是什么生肖| pt是什么材质| 起床气是什么意思| 吃饭吧唧嘴有什么说法| 烂嘴角是缺什么维生素| 鬼代表什么数字| May什么意思| 六味地黄丸有什么副作用吗| 小便有泡沫是什么情况| 口渴是什么病的症状| 鸡奸什么意思| 肌张力是什么意思| 线雕是什么| 西游记什么时候拍的| 安然无恙的恙是什么意思| 白无常叫什么名字| 苔藓是什么意思| 黄体破裂是什么原因| 荔枝什么时候成熟| 猴日冲虎是什么意思| 莲蓬可以用来做什么| 昏厥是什么意思| cosplay什么意思| 中国什么武器世界第一| 左侧卵巢囊性回声是什么意思| 什么叫匝道| 蓝瘦香菇是什么意思| 焦糖色裤子配什么颜色上衣| 梦见晒被子是什么意思| 激素高是什么原因| 蜥蜴吃什么| 睡觉食管反流什么原因| 北方是什么生肖| 怀孕两个月出血是什么原因| 左眼跳女人是什么预兆| 腿麻脚麻用什么药能治| 过敏吃什么| 什么牌空调好用又省电| 咳嗽出血是什么原因| 牛蛙吃什么| 五更泻吃什么药| 茄子不能和什么食物一起吃| 弱水三千是什么意思| 什么是爬虫| 阿托伐他汀钙片什么时候吃最好| gu是什么品牌| 从什么不什么四字词语| 吃蛋白粉有什么好处和坏处| 心脏24小时监测叫什么| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 【STM32F769】记一次由于开启D-Cache之后DMA数据传输出错的问题查

共1条 1/1 1 跳转至

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

工程师
2025-08-04 21:13:25   被打赏 35 分(兑奖)     打赏
百度 马里兰州民主党参议员本·卡丁则质疑称,美国大企业或许还有渠道将自己的关切反映给政策制定者,但美国的小企业没有这样的渠道,它们中很多有赖国际化的供应链,“贸易战可能给它们的生存带来巨大风险”。

缘由

我原来在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     数据     缓存    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
百褶裙搭配什么上衣 甲硝唑有什么副作用 子夜是指什么时间 血氨高是什么原因 大学体检都检查什么
县公安局局长什么级别 什么肉好吃 假花放在家里有什么忌讳 两肺纹理增粗是什么意思 不宁腿综合症是什么原因引起的
黑头发有什么好处 慢性活动性胃炎是什么意思 眼镜轴位是什么 贫血孕妇吃什么补血最快 假体隆胸什么材料好
足癣用什么药膏 被蚂蚁咬了擦什么药 宫腔积液排出什么颜色 梦到捡到钱是什么预兆 上梁是什么意思
总胆红素偏高是什么引起的hcv9jop6ns4r.cn 心脏不好的人吃什么好hcv9jop4ns8r.cn 什么样的孙悟空hcv9jop1ns8r.cn 吃什么止腹泻hcv7jop6ns2r.cn 单方精油和复方精油有什么区别hcv9jop4ns5r.cn
cg是什么意思hcv7jop9ns7r.cn 台湾人说什么语言hcv9jop6ns1r.cn 脆皮是什么意思hcv7jop5ns1r.cn 刘邦和刘备是什么关系hcv8jop3ns9r.cn 高危儿是什么意思hcv7jop9ns9r.cn
长期咳嗽是什么原因hcv9jop5ns8r.cn 乳头长什么样hcv8jop6ns9r.cn 男人喝什么汤补肾壮阳hcv8jop9ns1r.cn 天麻加什么治头晕hcv8jop9ns2r.cn 甲减什么症状hcv9jop6ns0r.cn
珮字五行属什么hcv8jop0ns0r.cn 竖小拇指什么意思hcv8jop9ns1r.cn 水中毒是什么症状ff14chat.com 八月二十八是什么星座hcv9jop3ns3r.cn 拉肚子出血是什么原因hcv7jop9ns5r.cn
百度