{"id":226,"date":"2021-04-01T18:06:14","date_gmt":"2021-04-01T10:06:14","guid":{"rendered":"https:\/\/blogs.gongqilin.cn\/?p=226"},"modified":"2021-04-01T19:11:44","modified_gmt":"2021-04-01T11:11:44","slug":"iap%e7%9a%84%e4%b8%a4%e7%a7%8d%e5%ae%9e%e7%8e%b0%e6%96%b9%e5%bc%8f","status":"publish","type":"post","link":"https:\/\/blogs.gongqilin.cn\/?p=226","title":{"rendered":"IAP\u7684\u4e24\u79cd\u5b9e\u73b0\u65b9\u5f0f"},"content":{"rendered":"<p>\u5728Coretext-M3\u4e0eCoretext-M4\u6838\u4e2d\uff0c\u5728System Control Block\u4e2d\u5b58\u5728\u4e00\u4e2a\u5411\u91cf\u8868\u504f\u79fb\u91cf\u5bc4\u5b58\u5668 VTOR(0xE000ED08)\uff0c\u7cfb\u7edf\u4ea7\u751f\u4e2d\u65ad\u540e\uff0c\u5185\u6838\u901a\u8fc7\u8fd9\u4e2a\u5bc4\u5b58\u5668\u7684\u503c\u6765\u627e\u5230\u4e2d\u65ad\u5411\u91cf\u8868\u7684\u5730\u5740\uff0c\u8fdb\u800c\u6267\u884c\u4e2d\u65ad\u4f8b\u7a0b\u4ee3\u7801\uff0c\u5f53\u7136\uff0c\u6b64\u5bc4\u5b58\u5668\u7684\u503c\u662f\u53ef\u4ee5\u4fee\u6539\u7684\uff0c\u5b83\u7684\u9ed8\u8ba4\u503c\u4e3a0\uff0c\u7531\u4e8e\u6620\u5c04\u5173\u7cfb\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u6307\u5411\u6620\u5c04\u5730\u5740\uff0c\u6bd4\u59820x0800 0000\u3002\u503c\u5f97\u6ce8\u610f\u7684\u662f\u7531\u4e8eSTM32F0XX\u91c7\u7528\u7684\u662fM0\u6838\uff0c\u5b83\u662f\u6ca1\u6709VTOR\u5bc4\u5b58\u5668\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u5bf9\u4e8eM0\u6765\u8bf4\uff0c\u4e2d\u65ad\u5411\u91cf\u8868\u7684\u5730\u5740\u56fa\u5b9a\u5728\u5730\u57400x0000 0000\u4e0a\u3002\u7b80\u5355\u7684\u6765\u8bf4\uff0c\u5c06M0\u7406\u89e3\u6210M3\/M4\u7684\u7279\u6b8a\u60c5\u51b5\uff0cM0\u5047\u8bbe\u4e5f\u5b58\u5728VTOR\u8fd9\u4e48\u4e00\u4e2a\u865a\u62df\u5bc4\u5b58\u5668\uff0c\u53ea\u4e0d\u8fc7\u5b83\u7684\u503c\u4e0d\u80fd\u4fee\u6539,\u56fa\u5b9a\u4e3a0\u7f62\u4e86\u3002\u5982\u679cM0\u9700\u8981\u4f7f\u7528IAP\u7a0b\u5e8f\uff0c\u90a3\u4e48\u9700\u8981\u4ece\u5185\u90e8FLASH\u4e2d\u62f7\u8d1d\u4e2d\u65ad\u5411\u91cf\u8868\u5230\u5185\u5b58\u7136\u540e\u91cd\u6620\u5c04SRAM\u3002<\/p>\n<p>\u8fd9\u91cc\u634b\u4e00\u4e0bSTM32\u7684\u542f\u52a8\u6d41\u7a0b\uff0cSystem Control Block\uff08SYSCFG\u5bc4\u5b58\u5668\uff09\u6709\u4e2aMEM_MODE\u5bc4\u5b58\u5668\u3002<\/p>\n<ol>\n<li>MEM_MODE\u7684\u503c\u5728\u4e0a\u7535\u540e\u6709BOOT0\uff0cBOOT1\u7684\u72b6\u6001\u503c\u51b3\u5b9a\u3002\u8fd9\u5c31\u662f\u4e3a\u9ed8\u8ba4\u6620\u5c04\uff0c\u662f\u7cfb\u7edf\u81ea\u52a8\u5b8c\u6210\u7684<\/li>\n<li>MEM_MODE\u7684\u503c\u51b3\u5b9a\u4e86\u54ea\u4e2a\u5185\u5b58\u6620\u5c04\u5230\u5730\u57400x0000 0000\uff08\u7a0b\u5e8f\u4ece\u54ea\u5f00\u59cb\u542f\u52a8\uff09<\/li>\n<li>\u5f53MEM_MODE =00\/10\u65f6,Main Flash\uff08\u4e3b\u95ea\u5b58\uff09\u6620\u5c04\u5230\u5730\u57400x0000 0000,\u5373\u5730\u57400x0800 0000\u6620\u5c04\u52300x0000 0000.<\/li>\n<li>\u5f53MEM_MODE =01\u65f6,System Flash\u6620\u5c04\u5230\u5730\u57400x0000 0000,\u4e5f\u5c31\u662f\u82af\u7247\u81ea\u5e26\u7684Bootloader\u4ee3\u7801\u90e8\u5206\u4f1a\u6620\u5c04\u5230\u5730\u57400x0000 0000,\u53730x1FFF C800\u6620\u5c04\u5230\u5730\u57400x0000 0000.\uff08\u4e0b\u8f7d\u7a0b\u5e8f\u65f6\uff09<\/li>\n<li>\u00a0\u5f53MEM_MODE =11\u65f6,Embeded SRAM\u6620\u5c04\u5230\u5730\u57400x0000 0000,\u4e5f\u5c31\u662f\u5185\u5b58\u5730\u57400x2000 0000\u6620\u5c04\u5230\u5730\u57400x0000 0000.<\/li>\n<li>MEM_MODE\u4f4d\u662fRW\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\u53ef\u4ee5\u4fee\u6539\u7684\u8fd9\u4e00\u4fee\u6539\u7684\u8fc7\u7a0b\uff0c\u6211\u4eec\u5c31\u53eb\u5176\u4e3a\u91cd\u6620\u5c04\u3002\u91cd\u6620\u5c04\u662f\u901a\u8fc7\u7528\u6237\u4ee3\u7801\u901a\u8fc7\u4fee\u6539MEM_MODE\u7684\u503c\u6765\u5b8c\u6210\u7684\u3002<\/li>\n<\/ol>\n<p>\u5728\u590d\u4f4d\u542f\u52a8\u540e\uff0c\u7cfb\u7edf\u5728\u7cfb\u7edf\u65f6\u949f\u7684\u7b2c4\u4e2a\u4e0a\u5347\u6cbf\u6839\u636eBOOT0,BOOT1\u7684\u914d\u7f6e\u83b7\u53d6\u5176\u503c\uff0c\u4e5f\u5c31\u662f\u5b58\u50a8\u5230\u5bc4\u5b58\u5668SYSCFG_CFGR1\u7684MEM_MODE\u4f4d\u4e0a\uff0c\u8fd9\u91cc\u786e\u5b9a\u4e860x0000 0000\u7684\u6620\u5c04\u5730\u5740\uff0c\u662f\u7cfb\u7edf\u81ea\u52a8\u5b8c\u6210\u7684\u3002\uff08\u8fd9\u91cc\u52a0\u4e0a\u4eceMain Flash\uff08\u4e3b\u95ea\u5b58\uff09\uff09\u5728\u7cfb\u7edf\u542f\u52a8\u540e\uff0cCPU\u4ece\u5730\u57400x0000 0000\u83b7\u53d6\u6808\u9876\u5730\u5740\uff0c\u7136\u540e\u4ece0x0000 0004\u5f00\u59cb\u6267\u884c\u4ee3\u7801\u3002\u7531\u4e8e0x0000 0000\u88ab\u6620\u5c04\u4e860x0800 0000\uff0c\u83b7\u53d6\u6808\u9876\u4e0e\u6267\u884c\u5b9e\u9645\u4e0a\u90fd\u662f\u4ece\u6620\u5c04\u7684\u5730\u5740\u4e0a\u5b9e\u65bd\u7684\u3002\u4e5f\u5c31\u662f\u4ece\u6620\u5c04\u7684\u5730\u5740\u5f00\u59cb\u6267\u884c\u4ee3\u7801\uff0c\u6bd4\u5982\u4ece\u5730\u57400x08000 0004\u5f00\u59cb\u6267\u884c\u4ee3\u7801\uff08\u8fd9\u91cc\u5c31\u662fReset_Handler\uff09\uff0c\u4e5f\u5c31\u662f\u6b63\u5e38\u542f\u52a8\u4ee3\u7801\uff0c\u9996\u5148\u5c31\u8fd0\u884c\u4e86\u590d\u4f4d\u4e2d\u65ad\uff0c\u8fdb\u800c\u8fd0\u884cSystemInit\u7136\u540e\u8fdb\u5165\u5230main\u51fd\u6570\uff08\u542f\u52a8\u6587\u4ef6\u51b3\u5b9a\uff09\uff0c\u5c31\u8fd9\u6837\uff0c\u6574\u4e2a\u4ee3\u7801\u542f\u52a8\u5b8c\u6210\uff0c\u5e76\u6309\u7167\u5730\u5740\u5f00\u59cb\u6267\u884c\u4ee3\u7801\u3002\u90a3\u4e48\u5982\u679c\u8fd9\u4e2a\u65f6\u5019\u4e2d\u65ad\u4ea7\u751f\u4e86\uff0c\u5982\u4f55\u54cd\u5e94\u4e2d\u65ad\u5462\uff1fCPU\u6839\u636e\u4e2d\u65ad\u7c7b\u578b\u786e\u5b9a\u504f\u79fb\u5730\u5740\uff0c\u5e76\u56fa\u5b9a\u5230\u5730\u57400x0000 0000\u4e0a\u627e\u4e2d\u65ad\u5165\u53e3\u51fd\u6570\uff0c\u6620\u5c04\u540e0x0800 0000\u4e0a\u627e\u4e2d\u65ad\u670d\u52a1\u51fd\u6570\uff0c\u6bd4\u5982\u53d1\u9001\u590d\u4f4d\u4e2d\u65ad\uff0cPC\u6307\u9488\u504f\u79fb4\u5b57\u8282\uff084\u5b57\u8282\u5bf9\u9f50\uff09\u5230Reset_Handler\uff080x08000 0004\uff09\u5f00\u59cb\u6267\u884c\uff0c\u6267\u884c\u5b8c\u6210\u540e\u8fd4\u56de\u539f\u5730\u5740\u6267\u884c\u3002\u6b63\u5e38\u7684\u7a0b\u5e8f\u57fa\u672c\u6d41\u7a0b\u5c31\u662f\u8fd9\u6837\u3002<\/p>\n<p>\u73b0\u5728\u9700\u8981\u52a0\u5165IAP\u529f\u80fd\uff0c\u5047\u8bbeAPP\u5730\u5740\u4e3a0x08000 6000 \uff080x08000 0000 &#8212; 0x08000 6000\u5b58\u653eIAP\uff09<\/p>\n<p>\u5982\u679c\u518d\u6b21\u6309\u7167\u8fd9\u4e2a\u6d41\u7a0b\uff0c\u5728IAP\u5224\u65adAPP\u5730\u5740\u5b58\u5728\u7528\u6237\u4ee3\u7801\uff0c\u5e76\u8df3\u8f6c\u5230APP\u6267\u884c\uff0c\u5219\u65f6\u5019APP\u8df3\u8f6c\u540e\uff0cPC\u6307\u9488\u53d8\u4e86\uff0cSP\u6808\u6307\u9488\u4e5f\u4fee\u6539\u4e86\uff0c\u4f46\u662f\u4e2d\u65ad\u5411\u91cf\u8868\u7684\u4f4d\u7f6e\u5e76\u6ca1\u6709\u6539\u53d8\uff0c\u8fd9\u4e2a\u65f6\u5019\u53d1\u9001\u4e2d\u65ad\u65f6\uff0c\u518d\u6b21\u6309\u7167\u9ed8\u8ba4\u6620\u5c04\u4ece0x08000 0000\u5f00\u59cb\u627e\u4e2d\u65ad\u5411\u91cf\u8868\uff0c\u7ee7\u7eed\u6267\u884cIAP\u7684\u4e2d\u65ad\u4f8b\u7a0b\uff0c\u8fdb\u800c\u5f15\u53d1hard fault\uff0c\u6240\u4ee5\u8fd9\u4e2a\u65f6\u5019\u5c31\u9700\u8981\u5229\u7528\u5230\u91cd\u6620\u5c04\uff08\u4fee\u6539MEM_MODE =11\uff09\u3002f030\u6709\u8fd9\u4e48\u4e00\u6bb5\u7a0b\u5e8f<\/p>\n<pre class=\"prettyprint linenums\">void CMainApp::IapSet()\r\n{\r\n\tu32 i = 0;\r\n\tfor(i = 0; i &lt; 48; i++)\r\n\t{\r\n\t\t*((u32*)(0x20000000 + (i &lt;&lt; 2)))=*(__IO u32*)(APP_BASE + (i&lt;&lt;2));\r\n\t}\r\n\t\r\n\tRCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); \r\n\tSYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);\r\n}\r\n<\/pre>\n<p>\u8fd9\u6bb5\u4ee3\u7801\u6267\u884c\u4e86\u4ece\u5185\u90e8FLASH\u4e2d\u62f7\u8d1d\u4e2d\u65ad\u5411\u91cf\u8868\u5230\u5185\u5b58\uff0c\u7136\u540e\u91cd\u6620\u5c04SRAM\uff0c\uff08M0\u6700\u591a48\u4e2a\u4e2d\u65ad\u670d\u52a1\u51fd\u6570\uff09\uff0c\u5f53\u53d1\u751f\u4e2d\u65ad\u7684\u65f6\u5019PC\u6307\u9488\u56fa\u5b9a\u5230\u5730\u57400x0000 0000\u4e0a\u627e\u4e2d\u65ad\u5165\u53e3\u51fd\u6570\uff0c\u6620\u5c04\u540e0x20000000\u4e0a\u627e\u4e2d\u65ad\u670d\u52a1\u51fd\u6570\uff0c\u8fd9\u4e2a\u5c31\u662fAPP\u4e2d\u4e2d\u65ad\u3002\u503c\u5f97\u6ce8\u610f\u7684\u662f\u7531\u4e8e\u8fd9\u4e2a\u5730\u65b9\u4f1a\u5360\u75284*48=192=0xc0\u7684RAM\uff0c\u90a3\u4e48APP\u7684RAM\u7684\u8d77\u59cb\u5730\u5740\u5e94\u4fee\u6539\u4e3a0x200000C0\u3002\u5177\u4f53\u4fee\u6539\u65b9\u5f0fKeil\u8bf7\u81ea\u884c\u767e\u5ea6\uff0cGCC\u8bf7\u4fee\u6539\u94fe\u63a5\u6587\u4ef6\uff0c<a href=\"https:\/\/blogs.gongqilin.cn\/?p=221\">\u8bf7\u67e5\u770b\u8fd9\u91cc <img src=\"https:\/\/blogs.gongqilin.cn\/wp-content\/themes\/git\/assets\/img\/smilies\/icon_evil.gif\" alt=\":evil:\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/a><br \/>\nM0\u3001M3\u3001M4\u90fd\u53ef\u4ee5\u6309\u7167\u8fd9\u4e2a\u65b9\u6cd5\u5b9e\u73b0\uff0c\u4f46\u662fM3\u3001M4\u5efa\u8bae\u901a\u8fc7\u4fee\u6539\u524d\u9762\u63d0\u5230\u7684VTOR\u5bc4\u5b58\u5668\u5b8c\u6210\u91cd\u6620\u5c04\u3002\u52a0\u5165\u4e00\u53e5<\/p>\n<pre class=\"prettyprint linenums\">SCB-&gt;VTOR = APP_BASE;\r\n<\/pre>\n<p>\u4e5f\u4e0d\u7528\u53bb\u5360\u7528RAM\uff0c\u6240\u4ee5\u4e5f\u4e0d\u7528\u53bb\u4fee\u6539APP\u7684RAM\u7684\u8d77\u59cb\u5730\u5740\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728Coretext-M3\u4e0eCoretext-M4\u6838\u4e2d\uff0c\u5728System Control Block\u4e2d\u5b58\u5728\u4e00\u4e2a\u5411\u91cf [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-226","post","type-post","status-publish","format-standard","hentry","category-stm32"],"_links":{"self":[{"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=\/wp\/v2\/posts\/226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=226"}],"version-history":[{"count":7,"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=\/wp\/v2\/posts\/226\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=\/wp\/v2\/posts\/226\/revisions\/233"}],"wp:attachment":[{"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gongqilin.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}