{"id":1413,"date":"2024-11-06T22:00:52","date_gmt":"2024-11-06T14:00:52","guid":{"rendered":"https:\/\/aoofoo.com\/?p=1413"},"modified":"2024-11-19T16:12:56","modified_gmt":"2024-11-19T08:12:56","slug":"stm32fsmc%e6%a0%87%e5%87%86%e5%ba%93%e9%85%8d%e7%bd%aelcd%e8%a7%a3%e5%86%b3","status":"publish","type":"post","link":"https:\/\/aoofoo.com\/index.php\/2024\/11\/06\/stm32fsmc%e6%a0%87%e5%87%86%e5%ba%93%e9%85%8d%e7%bd%aelcd%e8%a7%a3%e5%86%b3\/","title":{"rendered":"[STM32]FSMC\u6807\u51c6\u5e93\u914d\u7f6eLCD\u89e3\u51b3"},"content":{"rendered":"<h2>\u524d\u8a00<\/h2>\n<p>\u548c\u5927\u5bb6\u4e00\u6837\uff0c\u6211\u4e4b\u524d\u4e5f\u6ca1\u6709\u63a5\u89e6\u8fc7FSMC\uff0c\u53ea\u662f\u5728\u4f7f\u7528LCD\u5c4f\u5e55\u7684\u65f6\u5019\uff0cLCD\u9a71\u52a8\u91cc\u4f1a\u6709FSMC\u7684\u76f8\u5173\u914d\u7f6e\u3002<\/p>\n<p>\u662f\u4ec0\u4e48\u9a71\u4f7f\u6211\u4f7f\u7528\u6807\u51c6\u5e93\u6765\u914d\u7f6eFSMC\u6765\u89e3\u51b3LCD\u5462\uff1f\u90a3\u80af\u5b9a\u662f\u56e0\u4e3a\u5382\u5bb6\u7ed9\u7684\u9a71\u52a8\u914d\u7f6e\u4e0d\u597d\u7528\u5457\uff0c\u7ed9\u4e86\u5bc4\u5b58\u5668\u548cHAL\u7684\u914d\u7f6e\u9a71\u52a8\uff0c\u552f\u72ec\u6ca1\u6709\u7ed9\u6807\u51c6\u5e93\u7684\u9a71\u52a8\uff0c\u800c\u4e14\u5bc4\u5b58\u5668\u7684LCD\u9a71\u52a8\u7ed9\u7684\u5c4f\u5e55\u5ef6\u65f6\u592a\u9ad8\uff0c\u5e76\u4e14\u53ef\u8bfb\u6027\u5f88\u5dee\uff0c\u6240\u4ee5\u6211\u5c31\u9ed8\u9ed8\u7684\u5f00\u59cb\u7528HAL\u6765\u79fb\u690d\u6807\u51c6\u5e93\u4e86&#8230;&#8230;<\/p>\n<h2>\u6b63\u7bc7<\/h2>\n<h3>FSMC\u7b80\u4ecb<\/h3>\n<p>FSMC\uff08Flexible Static Memory Controller\uff0c\u53ef\u53d8\u9759\u6001\u5b58\u50a8\u5668\u63a7\u5236\u5668\uff09 \u662f STM32F4 \u7cfb\u5217\u5fae\u63a7\u5236\u5668\u4e2d\u7684\u4e00\u4e2a\u7279\u6b8a\u5916\u8bbe\uff0c\u5b83\u7528\u4e8e\u8fde\u63a5\u548c\u63a7\u5236\u5916\u90e8\u5b58\u50a8\u5668\u548c\u5916\u8bbe\uff0c\u5982 SRAM\u3001NOR Flash\u3001NAND Flash\u3001PC \u5361\u3001CF \u5361\uff0c\u4ee5\u53ca\u4f7f\u7528\u5e76\u884c\u63a5\u53e3\u7684 LCD \u5c4f\u5e55\u7b49\u3002FSMC \u53ef\u4ee5\u8ba9 MCU \u901a\u8fc7\u5e76\u884c\u63a5\u53e3\u4e0e\u5916\u90e8\u8bbe\u5907\u9ad8\u901f\u901a\u4fe1\uff0c\u5c31\u50cf\u8bbf\u95ee\u5185\u90e8\u5b58\u50a8\u5668\u4e00\u6837\u3002<\/p>\n<p>FSMC\u4e3a MCU \u548c\u5916\u90e8\u5e76\u884c\u8bbe\u5907\u4e4b\u95f4\u63d0\u4f9b\u9ad8\u901f\u3001\u7075\u6d3b\u7684\u63a5\u53e3\u3002\u7b80\u5316\u4e86\u4e0e\u5916\u90e8\u8bbe\u5907\u7684\u901a\u4fe1\uff0c\u65e0\u9700\u624b\u52a8\u63a7\u5236\u5f15\u811a\u65f6\u5e8f\uff0cFSMC \u81ea\u52a8\u5904\u7406\u8bfb\u5199\u63a7\u5236\u4fe1\u53f7\u548c\u65f6\u5e8f\u3002\u652f\u6301\u914d\u7f6e\u4e0d\u540c\u7684\u6570\u636e\u603b\u7ebf\u5bbd\u5ea6\uff088 \u4f4d\u300116 \u4f4d\u300132 \u4f4d\uff09\uff0c\u4ee5\u53ca\u53ef\u7f16\u7a0b\u7684\u65f6\u5e8f\u53c2\u6570\uff0c\u9002\u5e94\u4e0d\u540c\u7684\u5916\u8bbe\u9700\u6c42\u3002<\/p>\n<div class=\"sc-collapse\"><div class=\"sc-collapse__header\"><svg class=\"sc-collapse__arrow\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"\/><\/svg>\u4e3a\u4ec0\u4e48\u4f7f\u7528FSMC\u6765\u9a71\u52a8LCD\uff1f<\/div><div class=\"sc-collapse__body\"><div class=\"sc-collapse__content\"><\/p>\n<ul>\n<li><strong>\u9ad8\u901f\u901a\u4fe1<\/strong>\uff1aFSMC \u652f\u6301\u9ad8\u8fbe\u6570\u5341 Mbps \u7684\u6570\u636e\u4f20\u8f93\u901f\u7387\uff0c\u9002\u5408\u9700\u8981\u9ad8\u901f\u5237\u65b0\u548c\u5927\u91cf\u6570\u636e\u4f20\u8f93\u7684 LCD \u5c4f\u5e55\u3002<\/li>\n<li><strong>\u7b80\u5316\u7f16\u7a0b<\/strong>\uff1aFSMC \u81ea\u52a8\u7ba1\u7406\u4e86\u4e0e\u5916\u90e8\u8bbe\u5907\u901a\u4fe1\u6240\u9700\u7684\u5730\u5740\u3001\u6570\u636e\u548c\u63a7\u5236\u4fe1\u53f7\uff0c\u7a0b\u5e8f\u5458\u65e0\u9700\u624b\u52a8\u64cd\u4f5c GPIO \u5f15\u811a\u3002<\/li>\n<li><strong>\u5e76\u884c\u6570\u636e\u4f20\u8f93<\/strong>\uff1a\u76f8\u6bd4\u4e8e SPI\u3001I2C \u7b49\u4e32\u884c\u63a5\u53e3\uff0c\u5e76\u884c\u63a5\u53e3\u7684\u6570\u636e\u541e\u5410\u91cf\u66f4\u9ad8\uff0c\u9002\u5408\u9ad8\u5206\u8fa8\u7387\u3001\u5927\u5c4f\u5e55\u7684 LCD\u3002<\/li>\n<\/ul>\n<p><\/div><\/div><\/div>\n<div class=\"sc-collapse\"><div class=\"sc-collapse__header\"><svg class=\"sc-collapse__arrow\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"\/><\/svg>FSMC\u7684\u5de5\u4f5c\u539f\u7406\u662f\u4ec0\u4e48\uff1f<\/div><div class=\"sc-collapse__body\"><div class=\"sc-collapse__content\"><\/p>\n<ul>\n<li><strong>\u5730\u5740\u6620\u5c04<\/strong>\uff1a\u901a\u8fc7 FSMC\uff0c\u5c06\u5916\u90e8 LCD \u6620\u5c04\u5230 MCU \u7684\u5185\u5b58\u5730\u5740\u7a7a\u95f4\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u50cf\u8bbf\u95ee\u5185\u5b58\u4e00\u6837\u64cd\u4f5c LCD\u3002<\/li>\n<li><strong>\u8bfb\u5199\u63a7\u5236<\/strong>\uff1aFSMC \u81ea\u52a8\u751f\u6210 LCD \u6240\u9700\u7684\u8bfb\u3001\u5199\u3001\u7247\u9009\u3001\u5730\u5740\u4fe1\u53f7\uff0c\u7b80\u5316\u4e86\u4e0e LCD \u7684\u901a\u4fe1\u6d41\u7a0b\u3002<\/li>\n<li><strong>\u65f6\u5e8f\u63a7\u5236<\/strong>\uff1aFSMC \u5141\u8bb8\u914d\u7f6e\u4e0d\u540c\u7684\u65f6\u5e8f\u53c2\u6570\uff0c\u6ee1\u8db3\u4e0d\u540c LCD \u63a7\u5236\u5668\u5bf9\u65f6\u5e8f\u7684\u8981\u6c42\u3002<\/li>\n<\/ul>\n<p><\/div><\/div><\/div>\n<div class=\"sc-collapse\"><div class=\"sc-collapse__header\"><svg class=\"sc-collapse__arrow\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"\/><\/svg>FSMC\u7684\u4f7f\u7528\u65b9\u5f0f\u662f\u4ec0\u4e48\uff1f<\/div><div class=\"sc-collapse__body\"><div class=\"sc-collapse__content\"><\/p>\n<ul>\n<li><strong>\u6570\u636e\u603b\u7ebf<\/strong>\uff1a\u5c06 MCU \u7684 FSMC \u6570\u636e\u7ebf\uff08D0~D15\uff09\u8fde\u63a5\u5230 LCD \u7684\u6570\u636e\u5f15\u811a\u3002<\/li>\n<li><strong>\u5730\u5740\u603b\u7ebf<\/strong>\uff1a\u4f7f\u7528 FSMC \u7684\u5730\u5740\u7ebf\uff08A0~A25\uff09\u6765\u9009\u62e9 LCD \u7684\u5bc4\u5b58\u5668\u6216 GRAM \u8bbf\u95ee\u3002<\/li>\n<li><strong>\u63a7\u5236\u4fe1\u53f7<\/strong>\uff1a\n<ul>\n<li><strong>FSMC_NOE\uff08\u8f93\u51fa\u4f7f\u80fd\uff0c\u8bfb\u4fe1\u53f7\uff0cRD\uff09<\/strong>\uff1a\u901a\u5e38\u8fde\u63a5\u5230 LCD \u7684 RD \u5f15\u811a\u3002<\/li>\n<li><strong>FSMC_NWE\uff08\u5199\u4f7f\u80fd\uff0cWR\uff09<\/strong>\uff1a\u901a\u5e38\u8fde\u63a5\u5230 LCD \u7684 WR \u5f15\u811a\u3002<\/li>\n<li><strong>FSMC_NE1~NE4\uff08\u7247\u9009\uff0cCS\uff09<\/strong>\uff1a\u9009\u62e9\u4f7f\u7528\u54ea\u4e2a\u7247\u9009\u4fe1\u53f7\u6765\u6fc0\u6d3b FSMC \u7684\u5b58\u50a8\u533a\u57df\uff0c\u901a\u5e38\u8fde\u63a5\u5230 LCD \u7684 CS \u5f15\u811a\u3002<\/li>\n<li><strong>FSMC_Ax\uff08\u5730\u5740\u7ebf\uff0cRS \u6216 DC\uff09<\/strong>\uff1a\u7528\u4e8e\u533a\u5206\u547d\u4ee4\u548c\u6570\u636e\uff0c\u8fde\u63a5\u5230 LCD \u7684 RS\uff08Register Select\uff09\u6216 DC\uff08Data\/Command\uff09\u5f15\u811a\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/div><\/div><\/div>\n<div class=\"sc-collapse\"><div class=\"sc-collapse__header\"><svg class=\"sc-collapse__arrow\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"\/><\/svg>&lt;strong&gt;FSMC\u5982\u4f55\u8fdb\u884c\u8f6f\u4ef6\u914d\u7f6e\uff1f&lt;\/strong&gt;<\/div><div class=\"sc-collapse__body\"><div class=\"sc-collapse__content\"><\/p>\n<ul>\n<li><strong>\u4f7f\u80fd FSMC \u65f6\u949f<\/strong>\uff1a\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li><strong>GPIO \u914d\u7f6e<\/strong>\uff1a\n<ul>\n<li>\u5c06\u7528\u4e8e FSMC \u7684 GPIO \u5f15\u811a\u8bbe\u7f6e\u4e3a\u590d\u7528\u529f\u80fd\uff08Alternate Function\uff09\uff0c\u5e76\u914d\u7f6e\u4e3a\u9ad8\u901f\u3001\u63a8\u633d\u8f93\u51fa\u3001\u65e0\u4e0a\u4e0b\u62c9\u6216\u4e0a\u62c9\u3002<\/li>\n<li>\u590d\u7528\u6620\u5c04\uff1a\u4f7f\u7528 <code>GPIO_PinAFConfig<\/code> \u51fd\u6570\uff0c\u5c06\u5f15\u811a\u7684\u590d\u7528\u529f\u80fd\u8bbe\u7f6e\u4e3a FSMC\u3002\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); \/\/ PD14 -&gt; FSMC_D0\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>FSMC \u63a7\u5236\u5668\u914d\u7f6e<\/strong>\uff1a\n<ul>\n<li>\u5b9a\u4e49\u65f6\u5e8f\u7ed3\u6784\u4f53\uff1a\u5206\u522b\u5b9a\u4e49\u8bfb\u53d6\u548c\u5199\u5165\u65f6\u5e8f\u7684\u53c2\u6570\uff0c\u8fd9\u4e9b\u53c2\u6570\u6839\u636e<strong> LCD \u63a7\u5236\u5668<\/strong>\u7684\u89c4\u683c\u4e66\u8fdb\u884c\u8bbe\u7f6e\u3002\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">FSMC_NORSRAMTimingInitTypeDef ReadTiming;\r\nFSMC_NORSRAMTimingInitTypeDef WriteTiming;\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li>\u521d\u59cb\u5316 FSMC_NORSRAMInitTypeDef \u7ed3\u6784\u4f53\uff1a\u914d\u7f6e FSMC \u7684\u64cd\u4f5c\u6a21\u5f0f\u3001\u6570\u636e\u5bbd\u5ea6\u3001\u5b58\u50a8\u5668\u7c7b\u578b\u7b49\u53c2\u6570\u3002\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;\r\nFSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;\r\n\/\/ ...\uff08\u5176\u4ed6\u914d\u7f6e\uff09\r\nFSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &amp;ReadTiming;\r\nFSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &amp;WriteTiming;\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li>\u521d\u59cb\u5316 FSMC\uff1a\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">FSMC_NORSRAMInit(&amp;FSMC_NORSRAMInitStructure);\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li>\u4f7f\u80fd FSMC Bank\uff1a\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u5730\u5740\u6620\u5c04<\/strong>\uff1a\n<ul>\n<li>\u8ba1\u7b97 LCD \u63a7\u5236\u5668\u7684\u57fa\u5730\u5740\uff0c\u901a\u8fc7 FSMC \u7684\u7247\u9009\u4fe1\u53f7\u548c\u5730\u5740\u7ebf\uff0c\u5c06 LCD \u6620\u5c04\u5230\u7279\u5b9a\u7684\u5185\u5b58\u5730\u5740\u7a7a\u95f4\u3002\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">#<span class=\"hljs-meta-keyword\">define<\/span> LCD_BASE ((uint32_t)(0x60000000 | (FSMC_Bank1_NORSRAM4 - 1) * 0x04000000 | (1 &lt;&lt; LCD_FSMC_AX)))\r\n#<span class=\"hljs-meta-keyword\">define<\/span> LCD ((LCD_TypeDef *)LCD_BASE)\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li>\u901a\u8fc7\u7ed3\u6784\u4f53\u8bbf\u95ee LCD \u5bc4\u5b58\u5668\u548c\u6570\u636e\u5bc4\u5b58\u5668\uff1a\n<div class=\"MarkdownCodeBlock_container__nRn2j\">\n<div class=\"MarkdownCodeBlock_codeBlock__rvLec force-dark\">\n<div class=\"\" data-collapsed=\"unknown\">\n<pre class=\"MarkdownCodeBlock_preTag__QMZEO\"><code class=\"MarkdownCodeBlock_codeTag__5BV0Z\">typedef <span class=\"hljs-class\">struct<\/span>\r\n<span class=\"hljs-class\">{<\/span>\r\n    volatile uint16_t LCD_REG;\r\n    volatile uint16_t LCD_RAM;\r\n} LCD_TypeDef;<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><\/div><\/div><\/div>\n<h3>\u95ee\u9898\u4e0e\u89e3\u51b3<\/h3>\n<p>\u521d\u6b65\u7406\u89e3\u4e86\u4ec0\u4e48\u662fFSMC\uff0c\u5c31\u53ef\u4ee5\u6b63\u5e38\u7684\u8fdb\u884c\u95ee\u9898\u89e3\u51b3\u4e86\uff0c\u5176\u4e2d\u6bd4\u8f83\u91cd\u8981\u7684\u4e00\u70b9\u662f\uff0c\u7528\u8c03\u8bd5\u7684\u601d\u60f3\uff0c\u67e5\u770b\u5230\u5e95\u662f\u54ea\u4e00\u6b65\u4ee3\u7801\u65e0\u6cd5\u4f7f\u7528\uff0c\u4e0b\u9762\u662f\u6211\u9047\u5230\u7684\u95ee\u9898\uff0c<\/p>\n<pre class=\"corepress-code-pre\"><code>void lcd_write_reg(uint16_t regno, uint16_t data)\r\n{\r\n  printf(\"regno=%d,data=%d\\r\\n\");\r\n    LCD-&gt;LCD_REG = regno;   \/* \u5199\u5165\u8981\u5199\u7684\u5bc4\u5b58\u5668\u5e8f\u53f7 *\/\r\n    LCD-&gt;LCD_RAM = data;    \/* \u5199\u5165\u6570\u636e *\/\r\n}\r\n<\/code><\/pre>\n<p>\u5c31\u662f\u8fd9\u4e2a\u4ee3\u7801\uff0c\u524d\u9762\u534a\u6bb5\u53ef\u4ee5\u7528\uff0c\u540e\u534a\u6bb5\u53cd\u800c\u4e0d\u884c\u4e86\uff0c\u627e\u95ee\u9898\u627e\u4e86\u8001\u534a\u5929\u4e5f\u6ca1\u627e\u5230\uff0c\u4f46\u5176\u5b9e\u5982\u679c\u6211\u5229\u7528\u4e86\u8c03\u8bd5\u7684\u601d\u60f3\uff0c\u4e00\u773c\u5c31\u80fd\u9501\u5b9aBUG\u7684\u4f4d\u7f6e\uff0c\u5e76\u89e3\u51b3\uff0c\u6539\u4ee3\u7801\u4e0d\u6015\u4f60\u4ee3\u7801\u8dd1\u4e0d\u52a8\uff0c\u5c31\u6015\u4f60<strong>\u627e\u4e0d\u5230\u4f4d\u7f6e<\/strong>\uff01<\/p>\n<p>\u6211\u5728\u66f4\u6539FSMC\u914d\u7f6e\u65f6\uff0c\u5e76\u6ca1\u6709\u5229\u7528printf(&#8220;\u66f4\u6539\u914d\u7f6e\\r\\n&#8221;)\uff0c\u663e\u793a\u6211\u5728\u8fd9\u4e2a\u5730\u65b9\u66f4\u6539FSMC\u914d\u7f6e\u4e86\uff0c\u5bfc\u81f4\u4e86\u65e0\u6cd5\u9501\u5b9aBUG\u4f4d\u7f6e\uff0c\u82b1\u8d39\u4e86\u5927\u91cf\u7684\u65f6\u95f4\u3002\u4e0b\u9762\u7684\u4ee3\u7801\u662f\u4fee\u590d\u8fc7\u7684\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002<\/p>\n<pre class=\"corepress-code-pre\"><code>printf(\"\u4fee\u6539FSMC\u7684\u503c\\r\\n\");\r\n\tif (lcddev.id == 0x5510)\r\n\t{\r\n    \/\/ \u76f4\u63a5\u4fee\u6539 BWTR \u5bc4\u5b58\u5668\u4e2d\u7684\u5199\u65f6\u5e8f\u53c2\u6570\r\n    uint32_t bank = FSMC_Bank1_NORSRAM4; \/\/ \u4f7f\u7528 NE4\uff0cBank4\r\n    uint32_t bwtrIndex = bank - FSMC_Bank1_NORSRAM1;\r\n    \/\/ \u914d\u7f6e\u65b0\u7684\u5199\u65f6\u5e8f\u53c2\u6570\r\n    uint32_t newBwtr = 0;\r\n    newBwtr |= (2 &lt;&lt; 0);   \/\/ FSMC_BWTR_ADDSET\uff0c\u5730\u5740\u5efa\u7acb\u65f6\u95f4\u4e3a 2 \u4e2a HCLK \u5468\u671f\r\n    newBwtr |= (0 &lt;&lt; 4);   \/\/ FSMC_BWTR_ADDHLD\uff0c\u5730\u5740\u4fdd\u6301\u65f6\u95f4\u4e3a 0\r\n    newBwtr |= (2 &lt;&lt; 8);   \/\/ FSMC_BWTR_DATAST\uff0c\u6570\u636e\u4fdd\u6301\u65f6\u95f4\u4e3a 2 \u4e2a HCLK \u5468\u671f\r\n    newBwtr |= FSMC_AccessMode_A; \/\/ \u8bbf\u95ee\u6a21\u5f0f A\r\n    \/\/ \u66f4\u65b0 BWTR \u5bc4\u5b58\u5668\r\n    FSMC_Bank1E-&gt;BWTR[bwtrIndex] = newBwtr;\r\n\t\t}\r\n<\/code><\/pre>\n<p>\u5176\u5b9e\u4e5f\u4e0d\u96be\u7406\u89e3\uff0c\u4e00\u4e2a\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u51fd\u6570\uff0c\u4e0d\u53ef\u80fd\u65e0\u7f18\u65e0\u6545\u7684\u5931\u6548\uff0c\u51e0\u4e4e\u53ef\u4ee5\u80af\u5b9a\u662f<strong>\u66f4\u6539\u4e86\u76f8\u5173\u7684\u914d\u7f6e<\/strong>\u800c\u9020\u6210\u7684\uff0c\u6709\u4e86\u4e2a\u8fd9\u4e2a\u601d\u8def\uff0c\u518d\u914d\u5408\u4e32\u53e3\uff0c\u80fd\u76f4\u63a5\u53d1\u73b0\u95ee\u9898\u6240\u5728\uff0c\u4e0b\u9762\u662f\u914d\u5408\u4e32\u53e3\u6765\u5b9e\u73b0\u7684BUG\u9501\u5b9a\uff1a<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1421\" src=\"https:\/\/aoofoo.com\/wp-content\/uploads\/2024\/11\/\u5c4f\u5e55\u622a\u56fe-2024-11-07-153110.png\" alt=\"\" width=\"423\" height=\"214\" \/><\/p>\n<p>\u627e\u5230\u4e86BUG\u7684\u4f4d\u7f6e\uff0c\u5c31\u4fee\u6539BUG\u5c31\u884c\u4e86\uff0c\u6709\u4eba\u4f1a\u8bf4\uff0c\u4e3a\u4ec0\u4e48\u4f60\u8981\u4e2d\u9014\u66f4\u6539FSMC\u7684\u914d\u7f6e\u5462\uff1f\u8fd9\u4e0d\u662f\u95f2\u7740\u86cb\u75bc\u5417\uff1f<\/p>\n<p>\u90a3\u662f\u56e0\u4e3a\u5728\u521d\u59cb\u5316\u9636\u6bb5\uff0cLCD \u63a7\u5236\u5668\u53ef\u80fd\u8fd8\u672a\u5b8c\u5168\u51c6\u5907\u597d\uff0c\u4f7f\u7528\u8f83\u5927\u7684\u65f6\u5e8f\u53c2\u6570\uff08\u8f83\u957f\u7684\u5ef6\u8fdf\uff09\u6709\u52a9\u4e8e\u786e\u4fdd\u521d\u59cb\u5316\u8fc7\u7a0b\u7684\u7a33\u5b9a\u6027\u3002\u4f8b\u5982\uff0c<code>FSMC_AddressSetupTime<\/code> \u548c <code>FSMC_DataSetupTime<\/code> \u8bbe\u7f6e\u4e3a\u8f83\u5927\u7684\u503c\uff0c\u5982 15 \u548c 60\uff0c\u53ef\u4ee5\u786e\u4fdd\u5728\u521d\u59cb\u5316\u8fc7\u7a0b\u4e2d\uff0cLCD \u6709\u8db3\u591f\u7684\u65f6\u95f4\u54cd\u5e94\u3002<\/p>\n<p>\u5728\u786e\u8ba4 LCD \u6b63\u5e38\u5de5\u4f5c\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u8981\uff0c\u8c03\u6574\u65f6\u5e8f\u53c2\u6570\u4ee5\u63d0\u9ad8\u901a\u4fe1\u901f\u5ea6\u3002\u5c06 FSMC_AddressSetupTime \u548c FSMC_DataSetupTime \u8c03\u5c0f\uff08\u5982\u8bbe\u7f6e\u4e3a 2\uff09\uff0c\u53ef\u4ee5\u52a0\u5feb\u6570\u636e\u4f20\u8f93\u901f\u5ea6\uff0c\u63d0\u9ad8\u5c4f\u5e55\u5237\u65b0\u7387\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u548c\u5927\u5bb6\u4e00\u6837\uff0c\u6211\u4e4b\u524d\u4e5f\u6ca1\u6709\u63a5\u89e6\u8fc7FSMC\uff0c\u53ea\u662f\u5728\u4f7f\u7528LCD\u5c4f\u5e55\u7684\u65f6\u5019\uff0cLCD\u9a71\u52a8\u91cc\u4f1a\u6709FSMC\u7684\u76f8\u5173\u914d\u7f6e\u3002 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-1413","post","type-post","status-publish","format-standard","hentry","category-issue"],"_links":{"self":[{"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/posts\/1413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/comments?post=1413"}],"version-history":[{"count":12,"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/posts\/1413\/revisions"}],"predecessor-version":[{"id":1475,"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/posts\/1413\/revisions\/1475"}],"wp:attachment":[{"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/media?parent=1413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/categories?post=1413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aoofoo.com\/index.php\/wp-json\/wp\/v2\/tags?post=1413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}