硬汉嵌入式论坛

 找回密码
 立即注册
查看: 197|回复: 5
收起左侧

[MPU] MPU很奇怪的问题

[复制链接]

5

主题

62

回帖

77

积分

初级会员

积分
77
发表于 3 天前 | 显示全部楼层 |阅读模式
我用串口DMA发送,已经关闭了DMA发送内存cache,然而发送的数据始终是上次的不能正常更新.发送前必须要加上SCB_CleanDCache才能正常更新发送.
123.jpg
1234.jpg

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 3 天前 | 显示全部楼层
方便的话,工程分享到百度网盘看下
回复

使用道具 举报

5

主题

62

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 jiaoxiake 于 2025-6-6 12:45 编辑

测试了很多次,要么SCB_CleanDCache,要么直接SCB_DisableDCache,就算配置成Write-Through也不行,MPU_ACCESS_SHAREABLE也不行.百思不得其解!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 前天 07:42 | 显示全部楼层
jiaoxiake 发表于 2025-6-6 12:43
测试了很多次,要么SCB_CleanDCache,要么直接SCB_DisableDCache,就算配置成Write-Through也不行,MPU_ACCESS_ ...

调用下SCB_CleanDCache带by addr后缀函数,如果有问题,可能是程序其它地方有影响
回复

使用道具 举报

5

主题

62

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 前天 09:53 | 显示全部楼层
本帖最后由 jiaoxiake 于 2025-6-7 10:05 编辑

调用SCB_CleanDCache_by_Addr((uint32_t*)&U3TXBUF,sizeof(U3TXBUF)),没问题.调用SCB_CleanDCache_by_Addr((uint32_t*)(&U3TXBUF+512),sizeof(U3TXBUF))地址加512字节偏移跳过发送缓存也能正常发送没问题.
然而不调用clean 先清空一次发送缓存区也正常.
    for(char i=0;i<8;i++)U3TXBUF=0;
    U3TXBUF[0] = 0x13;
    U3TXBUF[1] = 0x04;
    U3TXBUF[2] = 0x00;
    U3TXBUF[3] = 0x50;
    U3TXBUF[4] = 0x00;
    U3TXBUF[5] = 0x0c;
    U3TXBUF[6] = 0xF3;
    U3TXBUF[7] = 0x6C;

U3TXBUF  已经调成32字节对齐了


赋值后 中间也加过tx_thread_sleep(50); HAL_Delay(20);或者加其它空操作都不能正常发送.只有动下发送缓冲区才能正常发送.


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 昨天 10:03 | 显示全部楼层
jiaoxiake 发表于 2025-6-7 09:53
调用SCB_CleanDCache_by_Addr((uint32_t*)&U3TXBUF,sizeof(U3TXBUF)),没问题.调用SCB_CleanDCache_by_Addr( ...

下周我做个例子测试下
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 19:54 , Processed in 0.245560 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表