中级会员
 
- 积分
- 459
- 金钱
- 459
- 注册时间
- 2016-7-7
- 在线时间
- 110 小时
|
1金钱
两个程序单独都能跑通,如果把两部分程序整合一起泽lwip不能工作,网络连接不上,最后找到问题在于这三行代码,如果使用了,则lwip不能正常工作,如果不使用则sd卡不能工作,求助
Write_Through(); //开启强制透写!
Cache_Enable(); //打开L1-Cache
MPU_Memory_Protection();
另外MPU_Memory_Protection的代码为
u8 MPU_Set_Protection(u32 baseaddr,u32 size,u32 rnum,u32 ap)
{
MPU_Region_InitTypeDef MPU_Initure;
HAL_MPU_Disable(); //配置MPU之前先关闭MPU,配置完成以后在使能MPU
MPU_Initure.Enable=MPU_REGION_ENABLE; //使能该保护区域
MPU_Initure.Number=rnum; //设置保护区域
MPU_Initure.BaseAddress=baseaddr; //设置基址
MPU_Initure.Size=size; //设置保护区域大小
MPU_Initure.SubRegionDisable=0X00; //禁止子区域
MPU_Initure.TypeExtField=MPU_TEX_LEVEL0; //设置类型扩展域为level0
MPU_Initure.AccessPermission=(u8)ap; //设置访问权限,
MPU_Initure.DisableExec=MPU_INSTRUCTION_ACCESS_ENABLE; //允许指令访问(允许读取指令)
MPU_Initure.IsShareable=MPU_ACCESS_NOT_SHAREABLE; //禁止共用
MPU_Initure.IsCacheable=MPU_ACCESS_CACHEABLE; //打开cache
MPU_Initure.IsBufferable=MPU_ACCESS_BUFFERABLE; //允许缓冲
HAL_MPU_ConfigRegion(&MPU_Initure); //配置MPU
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); //开启MPU
return 0;
}
//设置需要保护的存储块
//必须对部分存储区域进行MPU保护,否则可能导致程序运行异常
//比如MCU屏不显示,摄像头采集数据出错等等问题...
void MPU_Memory_Protection(void)
{
MPU_Set_Protection(0x20020000,MPU_REGION_SIZE_512KB,MPU_REGION_NUMBER1,MPU_REGION_FULL_ACCESS); //保护整个内部SRAM,包括SRAM1,SRAM2和DTCM,共512K字节
}
|
|