配置需要Device 或 Strongly order執(zhí)行外設(shè)
== 引用硬漢嵌入式老哥的教程。==
配置參數(shù)可看我另一篇文章。
讀寫Cache都是關(guān)閉的,比如FMC外設(shè)驅(qū)動,擴(kuò)展IO,LCD,NOR FLASH SRAM,ETH收發(fā)描述符空間
特點(diǎn):保證嚴(yán)格按照程序代碼執(zhí)行
缺點(diǎn):不支持非對齊訪問
配置 FMC 擴(kuò)展 IO 的 MPU 屬性為 Device 或者 Strongly Ordered
/* 配置 FMC 擴(kuò)展 IO 的 MPU 屬性為 Device 或者 Strongly Ordered */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x60000000;
MPU_InitStruct.Size = ARM_MPU_REGION_SIZE_64KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
以太網(wǎng)收發(fā)描述符空間MPU配置
/* 配置以太網(wǎng)收發(fā)描述符部分為 Device */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x30040000;
MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
配置為最低性能NORMAL,關(guān)閉讀寫Cache
特點(diǎn):可以像F1、F4那樣使用內(nèi)部SRAM。適合初學(xué)者
缺點(diǎn):性能差
/* 配置 AXI SRAM 的 MPU 屬性為 Write back, Read allocate, Write allocate */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x24000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
配置為NORMAL,此時(shí)關(guān)閉寫Cache,開啟讀Cache(透寫)
特點(diǎn):SDRAM 做LCD顯存和動態(tài)內(nèi)存下非常方便,保證數(shù)據(jù)是直接寫到顯存的,開啟讀Cache,SDRAM 的讀性能提升一倍,提升GUI性能(如LTDC)。
缺點(diǎn):由于開啟了讀Cache,用戶需要調(diào)用SCB_CleanInvalidateDCache()函數(shù)管理數(shù)據(jù)一致性問題。只有多主控操作此空間才需要處理文章來源:http://www.zghlxwxcb.cn/news/detail-853221.html
/* 配置SDRAM的MPU屬性為Write through, read allocate,no write allocate */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0xC0000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
配置為NORMAL 讀寫Cache全開,最強(qiáng)性能
特點(diǎn):性能最強(qiáng)
缺點(diǎn):由于讀寫Cache全開,用戶需要調(diào)用SCB_CleanInvalidateDCache()函數(shù)管理數(shù)據(jù)一致性問題。只有多主控操作此空間才需要處理文章來源地址http://www.zghlxwxcb.cn/news/detail-853221.html
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x24000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
到了這里,關(guān)于STM32 MPU (F7 H7)常見應(yīng)用場景配置示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!