{"id":70,"date":"2026-03-16T22:02:04","date_gmt":"2026-03-16T14:02:04","guid":{"rendered":"http:\/\/150.158.139.84\/?p=70"},"modified":"2026-03-18T15:10:49","modified_gmt":"2026-03-18T07:10:49","slug":"%e5%9f%ba%e4%ba%8efreertos%e7%9a%84stm32%e6%99%ba%e8%83%bd%e5%a4%a9%e6%b0%94%e6%97%b6%e9%92%9f","status":"publish","type":"post","link":"https:\/\/blog.echoxx.tech\/index.php\/2026\/03\/16\/%e5%9f%ba%e4%ba%8efreertos%e7%9a%84stm32%e6%99%ba%e8%83%bd%e5%a4%a9%e6%b0%94%e6%97%b6%e9%92%9f\/","title":{"rendered":"\u57fa\u4e8eFreeRTOS\u7684stm32\u667a\u80fd\u5929\u6c14\u65f6\u949f"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u57fa\u4e8e\u5f00\u6e90\u9879\u76ee:\u57fa\u4e8eFreeRTOS\u7684stm32\u667a\u80fd\u5929\u6c14\u65f6\u949f\u590d\u523b\u8fc7\u7a0b\u4e2d\u7684\u4e00\u4e9b\u5fc3\u5f97\u4ee5\u53ca\u7b14\u8bb0\uff0c\u9879\u76ee\u89c6\u9891\u94fe\u63a5:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3010\u3010\u5168\u5f00\u6e90\u624b\u628a\u624b\u9879\u76ee\u5b9e\u6218\u3011\u57fa\u4e8eFreeRTOS\u7684stm32\u667a\u80fd\u5929\u6c14\u65f6\u949f\u3011<a href=\"https:\/\/www.bilibili.com\/video\/BV1tfL1zeEQN?p=18&amp;vd_source=f41ad9d8e6414afd88a3be14a0b309\">https:\/\/www.bilibili.com\/video\/BV1tfL1zeEQN?p=18&amp;vd_source=f41ad9d8e6414afd88a3be14a0b309<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">IO\u57fa\u7840<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">IO\u8f93\u51fa\u7c7b\u578b<strong>\uff1a<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1\u3001\u5f00\u6f0f\u8f93\u51fa(OD)<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/image-23.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/image-23.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"aspect-ratio:1.6156273478587528;width:447px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u82af\u7247\u5185\u90e8\u53ea\u6709\u4e00\u4e2aNMOS\u7ba1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>NMOS<\/strong><strong>\u65e0\u8bba\u5bfc\u4e0d\u5bfc\u901a\uff1a<\/strong>\u7535\u538b\u4e3a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e3a\u4f7f\u82af\u7247\u5728\u5f00\u6f0f\u6a21\u5f0f\u4e0b\u6709\u8f93\u51fa\u9ad8\u7535\u5e73\u80fd\u529b\uff0c\u4e00\u822c\u52a0\u4e00\u4e2a<\/strong><strong>\u4e0a\u62c9\u7535\u963b<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/aa7042ce-4e51-4c38-8c32-61081f8a1d8d.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1255\" height=\"753\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/aa7042ce-4e51-4c38-8c32-61081f8a1d8d.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-79\" style=\"width:436px;height:auto\"  sizes=\"auto, (max-width: 1255px) 100vw, 1255px\" \/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f00\u6f0f\u8f93\u51fa\u4f18\u7f3a\u70b9<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4f18\u70b9:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u53ef\u5b9e\u73b0\u7535\u5e73\u8f6c\u6362,\u8f93\u51fa\u7535\u5e73\u53d6\u51b3\u4e8e\u4e0a\u62c9\u7535\u963b\u7535\u6e90;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.\u53ef\u4ee5\u5b9e\u73b0IO\u7684\u7ebf\u4e0e;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7f3a\u70b9:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u9ad8\u7535\u5e73\u9a71\u52a8\u80fd\u529b\u5dee,\u53d6\u51b3\u4e8e\u5916\u90e8\u4e0a\u62c9\u7535\u963b;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.\u7535\u5e73\u5207\u6362\u901f\u7387\u53d6\u51b3\u4e8e\u5916\u90e8\u4e0a\u62c9\u7535\u963b,\u7535\u963b\u8d8a\u5c0f\u901f\u5ea6\u8d8a\u5feb;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2\u3001\u63a8\u633d\u8f93\u51fa(PP)<\/h3>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/a6519698-af58-4db4-8075-81b407e4672b.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1196\" height=\"752\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/a6519698-af58-4db4-8075-81b407e4672b.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-81\" style=\"aspect-ratio:1.590438435595527;width:387px;height:auto\"  sizes=\"auto, (max-width: 1196px) 100vw, 1196px\" \/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u4e00\u65f6\u95f4\u53ea\u6709\u4e00\u4e2a\u7ba1\u5b50(PMOS\/NMOS)\u5bfc\u901a\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PMOS\u5bfc\u901a\uff08\u63a8\uff09\uff1a<\/strong>Vout=VCC\uff0c\u8f93\u51fa\u5916\u90e8\u9ad8\u7535\u5e73\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>NMOS<\/strong><strong>\u5bfc\u901a\uff08\u633d\uff09\uff1a<\/strong>GND=Vout\uff0c\u5916\u90e8\u6d41\u5165\u4f4e\u7535\u5e73\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u63a8\u633d\u8f93\u51fa\u4f18\u7f3a\u70b9\uff1a<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4f18\u70b9:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u8f93\u51fa\u9ad8\u4f4e\u7535\u5e73\u4e0e\u7535\u6e90\u7535\u538b\u57fa\u672c\u6ca1\u6709\u538b\u5dee;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.\u9ad8\u4f4e\u7535\u5e73\u9a71\u52a8\u80fd\u529b\u8f83\u5f3a,\u4e00\u822c\u6570\u5b57\u82af\u7247\u63a8\u633d\u8f93\u51fa10\u53e3\u9a71\u52a8\u7535\u6d41\u6700\u5927\u53ef\u523020mA;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3.\u7535\u5e73\u5207\u6362\u901f\u5ea6\u5feb\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7f3a\u70b9:<\/strong>\u4e0d\u652f\u6301\u7ebf\u4e0e<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3\u3001\u5f00\u96c6\u8f93\u51fa(OC)<\/h3>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/3063c545-8e3f-401a-8059-ee9ab96f46e2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1046\" height=\"729\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/3063c545-8e3f-401a-8059-ee9ab96f46e2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-74\" style=\"aspect-ratio:1.4348626791576586;width:402px;height:auto\"  sizes=\"auto, (max-width: 1046px) 100vw, 1046px\" \/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">4\u3001\u9ad8\u963b\u6001<\/h3>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/04cf0505-dd1e-4d33-9112-767311f2363e.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1061\" height=\"602\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/04cf0505-dd1e-4d33-9112-767311f2363e.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-82\" style=\"aspect-ratio:1.762507376565471;width:435px;height:auto\"  sizes=\"auto, (max-width: 1061px) 100vw, 1061px\" \/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>E\u4e3a\u4f7f\u80fd\u4fe1\u53f7\uff0cIN\u4e3a<\/strong><strong>\u7f13\u51b2\u5668<\/strong><strong>\u8f93\u5165\uff0cOUT\u4e3a\u7f13\u51b2\u5668\u8f93\u51fa<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u5f53E\u4f7f\u80fd\uff0cIN\u4e3a\u9ad8\u7535\u5e73\uff0cOUT\u4e3a\u9ad8\u7535\u5e73<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2\u3001\u5f53E\u4f7f\u80fd\uff0cIN\u4e3a\u4f4e\u7535\u5e73\uff0cOUT\u4e3a\u4f4e\u7535\u5e73<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3\u3001\u5f53E\u5931\u80fd\uff0cIN\u65e0\u8bba\u662f\u9ad8\/\u4f4e\u7535\u5e73\uff0cOUT\u90fd\u4e0d\u8f93\u51fa\u7535\u5e73\uff0c\u79f0\u4e3a\u9ad8\u963b\u6001<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">IO\u8f93\u5165\u7c7b\u578b<strong>\uff1a<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u6570\u5b57\u82af\u7247\u7684\u8f93\u5165\u5982\u679c\u6ca1\u6709\u8f93\u5165\u6216\u8005\u60ac\u7a7a,\u4e00\u822c\u662f\u9ad8\u963b\u6001,\u8f93\u5165\u72b6\u6001\u662f\u672a\u77e5\u7684;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u8ba9\u6570\u5b57\u82af\u7247\u8f93\u5165\u5728\u6ca1\u6709\u8f93\u5165\u6216\u60ac\u7a7a\u65f6\u6709\u786e\u5b9a\u7684\u72b6\u6001\u5219\u5c31\u9700\u8981\u52a0\u4e0a\u4e0b\u62c9\u7535\u963b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u62c9\u6307\u82af\u7247\u8f93\u5165\u5f15\u811a\u901a\u8fc7\u7535\u963b\u63a5\u5230\u7535\u6e90\u7535\u538b;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u4e0a\u62c9\u6307\u82af\u7247\u8f93\u5165\u5f15\u811a\u901a\u8fc7\u7535\u963b\u63a5\u5230\u53c2\u8003\u96f6\u7535\u5e73;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728CMOS\u82af\u7247(\u5bf9\u7535\u538b\u53d8\u5316\u654f\u611f)\u4e0a,\u4e3a\u4e86\u9632\u6b62\u9759\u7535\u9020\u6210\u635f\u574f,\u4e0d\u7528\u7684\u8f93\u5165\u7ba1\u811a\u4e0d\u80fd\u60ac\u7a7a,\u4e00\u822c\u9700\u8981\u63a5\u4e0a\u4e0b\u62c9\u7535\u963b;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u4e0b\u62c9\u7535\u963b\u8d8a\u5927,\u6211\u4eec\u79f0\u4e3a\u5f3a\u4e0a\u62c9\u548c\u5f3a\u4e0b\u62c9,\u9759\u6001\u7535\u6d41\u8d8a\u5927;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u4e0b\u62c9\u7535\u963b\u8d8a\u5c0f,\u6211\u4eec\u79f0\u4e3a\u5f31\u4e0a\u62c9\u548c\u5f31\u4e0b\u62c9,\u9759\u6001\u7535\u6d41\u8d8a\u5c0f;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\u3001\u4e0a\u62c9\u8f93\u5165(IPU)\uff1a\u5c06\u7535\u5e73\u62c9\u9ad8<\/h3>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/6e383799-88bf-44d9-860e-4f735bb4d4e0.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"843\" height=\"745\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/6e383799-88bf-44d9-860e-4f735bb4d4e0.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-75\" style=\"aspect-ratio:1.1315512523679225;width:402px;height:auto\"  sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2\u3001\u4e0b\u62c9\u8f93\u5165(IPD)\uff1a\u5c06\u7535\u5e73\u62c9\u4f4e<\/h3>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/64b778c2-d4c5-4339-be92-ea834508f420.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"835\" height=\"735\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/64b778c2-d4c5-4339-be92-ea834508f420.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-76\" style=\"width:337px;height:auto\"  sizes=\"auto, (max-width: 835px) 100vw, 835px\" \/><\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e2d\u65ad<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">tips\uff1a\u4f7f\u7528\u4e2d\u65ad\u65f6\u5019\u4e00\u5b9a\u4e00\u5b9a\u4e00\u5b9a\u4e0d\u8981\u5fd8\u4e86\u5728\u4e2d\u65ad\u51fd\u6570\u91cc\u9762\u6e05\u96f6\u6807\u5fd7\u4f4d\uff01\uff01\uff01<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">EXTI \u5916\u90e8\u4e2d\u65ad\u57fa\u7840\u914d\u7f6e<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);\n\nEXTI_InitTypeDef EXTI_InitStructure;\nEXTI_InitStructure.EXTI_Line = EXTI_Line0;\nEXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;\nEXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;\nEXTI_InitStructure.EXTI_LineCmd = ENABLE;\nEXTI_Init(&amp;EXTI_InitStructure);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">SYSTICK\u4e2d\u65ad<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">main\u51fd\u6570\u9884\u89c8\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int main(void)\n{\n    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE, ENABLE);\n    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);\n    \n    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);\n    \n    led_init();\n    led_all_off();\n    \n    SysTick-&gt;LOAD = SystemCoreClock \/ 1000;\n    SysTick-&gt;VAL = 0;\n    SysTick-&gt;CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;\n    \n    NVIC_SetPriority(SysTick_IRQn, 5);\n    \n    while (1)\n    {\n        ;\n    }\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u57fa\u7840\u914d\u7f6e\u64cd\u4f5c\uff1a<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1\u3001RCC\u65f6\u949f,GPIO\/SYSCFG\/SYSTICK?<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE, ENABLE);\nRCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2\u3001\u4e2d\u65ad\u4f18\u5148\u7ea7\u7ec4\u914d\u7f6e<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3\u3001\u914d\u7f6eGPIO,\u5b9e\u73b0LED\u95ea\u70c1,\u8f93\u51fa<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>GPIO_InitTypeDef GPIO_InitStructure;\nGPIO_StructInit(&amp;GPIO_InitStructure);\nGPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;\nGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\nGPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;\nGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\n    \nGPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;\nGPIO_Init(GPIOE, &amp;GPIO_InitStructure);\n    \nGPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;\nGPIO_Init(GPIOB, &amp;GPIO_InitStructure);\n    \nGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;\nGPIO_Init(GPIOB, &amp;GPIO_InitStructure);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4\u3001\u914d\u7f6eSYSTICK,\u5b9e\u73b01ms\u8ba1\u65f6<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>SysTick-&gt;LOAD = SystemCoreClock \/ 1000;\nSysTick-&gt;VAL = 0;\nSysTick-&gt;CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5\u3001\u914d\u7f6eSYSTICK\u4e2d\u65ad\u4f18\u5148\u7ea75<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>NVIC_SetPriority(SysTick_IRQn, 5);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6\u3001\u5199SYSTICK\u4e2d\u65ad\u670d\u52a1\u51fd\u6570,\u8ba1\u6570\u5230500,gpio\u7ffb\u8f6c,\u8ba1\u6570\u503c\u5f52\u96f6<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>void SysTick_Handler(void)\n{\n    static bool led_state = false;\n    static int count = 0;\n    \n    if (++count &gt;= 500)\n    {\n        count = 0;\n        led_state = !led_state;\n        led_set(1, led_state);\n    }\n    \n    \/\/ \u53ea\u7528\u4e8e\u6e05\u9664\u5916\u90e8\u4e2d\u65ad\u6807\u5fd7\u4f4d\uff0cSysTick\u6807\u5fd7\u4f4d\u4e0d\u9700\u8981\u624b\u52a8\u6e05\u9664\n    \/\/ NVIC_ClearPendingIRQ(SysTick_IRQn);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e32\u53e3\u4e2d\u65ad<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">USART\u5e38\u89c1\u4e2d\u65ad\u89e3\u91ca<strong>\uff1a<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e00\u3001\u63a5\u6536\u76f8\u5173\u4e2d\u65ad<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">1\ufe0f\u20e3 USART_IT_RXNE\uff1a<strong>Receive Not Empty\uff08\u63a5\u6536\u6570\u636e\u5bc4\u5b58\u5668\u975e\u7a7a\uff09<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u89e6\u53d1\u6761\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6536\u5230 1 \u5b57\u8282\u6570\u636e\uff0cDR \u4e0d\u4e3a\u7a7a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u4f5c\u7528\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6700\u5e38\u7528\u7684\u63a5\u6536\u4e2d\u65ad<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u5178\u578b\u7528\u9014\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;\u4e32\u53e3\u63a5\u6536\u6570\u636e\u3001AT \u6307\u4ee4\u901a\u4fe1\u3001Modbus \u63a5\u6536<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (USART_GetITStatus(USART1, USART_IT_RXNE))\n{\n    uint8_t data = USART_ReceiveData(USART1);\n}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">2\ufe0f\u20e3 USART_IT_IDLE\uff1a<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7a7a\u95f2\u4e2d\u65ad<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u89e6\u53d1\u6761\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u5e27\u6570\u636e\u63a5\u6536\u5b8c\u6210\u540e\u603b\u7ebf\u7a7a\u95f2 1 \u5e27\u65f6\u95f4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u4f5c\u7528\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5224\u65ad\u201c\u4e0d\u5b9a\u957f\u6570\u636e\u5e27\u7ed3\u675f\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u9ad8\u7ea7\u7528\u6cd5\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DMA + IDLE \u5224\u65ad\u4e00\u5e27\u6570\u636e\u5b8c\u6210<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u26a0 \u9700\u8981\u5148\u8bfb SR \u518d\u8bfb DR \u6e05\u9664<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e8c\u3001\u53d1\u9001\u76f8\u5173\u4e2d\u65ad<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">3\ufe0f\u20e3 USART_IT_TXE\uff1aTransmit Data Register Empty\uff08\u53d1\u9001\u5bc4\u5b58\u5668\u7a7a\uff09<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u89e6\u53d1\u6761\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DR \u6570\u636e\u88ab\u79fb\u5165\u79fb\u4f4d\u5bc4\u5b58\u5668<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u4f5c\u7528\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u7ee7\u7eed\u53d1\u9001\u4e0b\u4e00\u4e2a\u5b57\u8282<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u26a0 \u4e0d\u4ee3\u8868\u53d1\u9001\u5b8c\u6210<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">4\ufe0f\u20e3 USART_IT_TC\uff1aTransmission Complete\uff08\u53d1\u9001\u5b8c\u6210\uff09<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u89e6\u53d1\u6761\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u79fb\u4f4d\u5bc4\u5b58\u5668 + \u505c\u6b62\u4f4d\u53d1\u9001\u5b8c\u6bd5<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u4f5c\u7528\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;\u534a\u53cc\u5de5\u3001RS485 \u65b9\u5411\u5207\u6362\u3001\u53d1\u9001\u7ed3\u675f\u6807\u5fd7<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e09\u3001\u9519\u8bef\u76f8\u5173\u4e2d\u65ad<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">5\ufe0f\u20e3 USART_IT_PE\uff1aParity Error\uff08\u5947\u5076\u6821\u9a8c\u9519\u8bef\uff09<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u6570\u636e\u6821\u9a8c\u5931\u8d25\u65f6\u89e6\u53d1<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">6\ufe0f\u20e3 USART_IT_FE\uff1aFrame Error\uff08\u5e27\u9519\u8bef\uff09<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u505c\u6b62\u4f4d\u5f02\u5e38\u3001\u901a\u5e38\u6ce2\u7279\u7387\u9519\u8bef\u4f1a\u51fa\u73b0<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">7\ufe0f\u20e3 USART_IT_NE\uff1a<strong>Noise Error\uff08\u566a\u58f0\u9519\u8bef\uff09<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u7ebf\u8def\u5e72\u6270<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">8\ufe0f\u20e3 USART_IT_ORE_RX\uff1aOverrun Error\uff08\u63a5\u6536\u6ea2\u51fa\uff09<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u89e6\u53d1\u6761\u4ef6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6570\u636e\u672a\u8bfb\u53d6\uff0c\u65b0\u6570\u636e\u5230\u8fbe<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc \u5f71\u54cd\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f1a\u5bfc\u81f4\u4e32\u53e3\u5361\u6b7b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5fc5\u987b\uff1a\u8bfb SR\u3001\u8bfb DR<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">9\ufe0f\u20e3 USART_IT_ORE_ER\uff1a<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e5f\u662f\u6ea2\u51fa\u9519\u8bef\uff0c\u4f46\u7531 EIE \u4f4d\u63a7\u5236\u3002StdPeriph \u517c\u5bb9\u4e0d\u540c\u9519\u8bef\u4f7f\u80fd\u65b9\u5f0f\u62c6\u5206\u5b9a\u4e49\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">\ud83d\udd1f USART_IT_ERR\uff1a<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u7efc\u5408\u9519\u8bef\u4e2d\u65ad\uff0c\u5305\u62ec\uff1aFE\u3001NE\u3001ORE\uff0c\u53ea\u8981 CR3 \u7684 EIE \u4f7f\u80fd<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u56db\u3001\u5176\u4ed6\u7279\u6b8a\u4e2d\u65ad<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">1\ufe0f\u20e31\ufe0f\u20e3 USART_IT_LBD\uff1a<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">LIN Break Detection\u3001\u7528\u4e8e LIN \u603b\u7ebf\u901a\u4fe1\u3001\u666e\u901a\u4e32\u53e3\u57fa\u672c\u4e0d\u7528<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">1\ufe0f\u20e32\ufe0f\u20e3 USART_IT_CTS\uff1aClear To Send<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u786c\u4ef6\u6d41\u63a7 RTS\/CTS \u7528\uff0c\u4ec5\u786c\u4ef6\u6d41\u63a7\u6a21\u5f0f\u6709\u6548<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e32\u53e3\u521d\u59cb\u5316\u6a21\u7248\uff1a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>USART_InitTypeDef USART_InitStruct;\nUSART_StructInit(&amp;USART_InitStruct);\nUSART_InitStruct.USART_BaudRate = 115200;\nUSART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;\nUSART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;\nUSART_InitStruct.USART_Parity = USART_Parity_No;\nUSART_InitStruct.USART_StopBits = USART_StopBits_1;\nUSART_InitStruct.USART_WordLength = USART_WordLength_8b;\nUSART_Init(USART1, &amp;USART_InitStruct);\nUSART_ITConfig(USART1, USART_IT_RXNE, ENABLE);\nUSART_Cmd(USART1, ENABLE);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">NVIC\u521d\u59cb\u5316\u6a21\u7248\uff1a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>NVIC_InitTypeDef NVIC_InitStruct;\nNVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;\nNVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 5;\nNVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;\nNVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;\nNVIC_Init(&amp;NVIC_InitStruct);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u56de\u8c03\u51fd\u6570<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c0f\u77e5\u8bc6\uff1a typedef void (*func)(void);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>void (*func)(void);<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u610f\u601d\u662f\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49\u4e00\u4e2a\u201c\u51fd\u6570\u6307\u9488\u201d\uff0c\u6307\u5411 <strong>\u65e0\u53c2\u6570\u3001\u65e0\u8fd4\u56de\u503c\u7684\u51fd\u6570<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u8868\u793a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>func \u662f\u4e00\u4e2a\u6307\u9488<\/li>\n\n\n\n<li>\u6307\u5411\u51fd\u6570<\/li>\n\n\n\n<li>\u51fd\u6570\u8fd4\u56de\u503c\u662f void<\/li>\n\n\n\n<li>\u51fd\u6570\u53c2\u6570\u662f void<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">typedef void (*func)(void);<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8868\u793a\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u7ed9\u8fd9\u79cd\u51fd\u6570\u6307\u9488\u7c7b\u578b\u8d77\u4e2a\u522b\u540d\u53eb <code>func<\/code><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u540e\u5c31\u53ef\u4ee5\u5199\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>func myFunctionPointer;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u800c\u4e0d\u662f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>void (*myFunctionPointer)(void);<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void (*func)(void);\n\nstatic void led1_toggle(void)\n{\n    static bool state = false;\n    led_set(1, state);\n    state = !state;\n}\n\nfunc f;\n\nf = led1_toggle;\n\nf();   \/\/ \u7b49\u4ef7\u4e8e led1_toggle();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u793a\u4f8b\u4ee3\u7801\uff1a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdint.h&gt;\n#include &lt;string.h&gt;\n#include \"stm32f4xx.h\"\n#include \"led.h\"\n#include \"key.h\"\n#include \"usart.h\"\n#include \"cpu_delay.h\"\n\n#define delay(ms) cpu_delay((ms) * 1000)\n\n\nstatic void led1_toggle(void)\n{\n    static bool state = false;\n    led_set(1, state);\n    state = !state;\n}\n\nstatic void led2_toggle(void)\n{\n    static bool state = false;\n    led_set(2, state);\n    state = !state;\n}\n\nstatic void led3_toggle(void)\n{\n    static bool state = false;\n    led_set(3, state);\n    state = !state;\n}\n\nint main(void)\n{\n    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);\n    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);\n    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);\n    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);\n    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);\n    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);\n    \n    led_init();\n    key_init();\n    key_press_callback_register(1, led1_toggle);\n    key_press_callback_register(3, led3_toggle);\n    usart_init();\n    \n    while(1)\n    {\n        ;\n    }\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdbool.h&gt;\n#include &lt;stddef.h&gt;\n#include \"stm32f4xx.h\"\n#include \"key.h\"\n\n\/\/ KEY1: PA0\n\/\/ KEY2: PC4\n\/\/ KEY3: PC5\n\n#define KEY1_PORT               GPIOA\n#define KEY1_PIN                GPIO_Pin_0\n#define KEY1_EXTI_PORT_SOURCE   EXTI_PortSourceGPIOA\n#define KEY1_EXTI_PIN_SOURCE    EXTI_PinSource0\n#define KEY1_EXTI_LINE          EXTI_Line0\n#define KEY1_IRQn               EXTI0_IRQn\n\n#define KEY2_PORT               GPIOC\n#define KEY2_PIN                GPIO_Pin_4\n#define KEY2_EXTI_PORT_SOURCE   EXTI_PortSourceGPIOC\n#define KEY2_EXTI_PIN_SOURCE    EXTI_PinSource4\n#define KEY2_EXTI_LINE          EXTI_Line4\n#define KEY2_IRQn               EXTI4_IRQn\n\n#define KEY3_PORT               GPIOC\n#define KEY3_PIN                GPIO_Pin_5\n#define KEY3_EXTI_PORT_SOURCE   EXTI_PortSourceGPIOC\n#define KEY3_EXTI_PIN_SOURCE    EXTI_PinSource5\n#define KEY3_EXTI_LINE          EXTI_Line5\n#define KEY3_IRQn               EXTI9_5_IRQn\n\nstatic key_func_t key1_func, key2_func, key3_func;\n\nvoid key_init(void)\n{\n    \/\/ GPIO\u521d\u59cb\u5316\u7ed3\u6784\u4f53\u6a21\u677f\n    GPIO_InitTypeDef GPIO_InitStructure;\n    GPIO_StructInit(&amp;GPIO_InitStructure);\n    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\n    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;\n    GPIO_InitStructure.GPIO_Speed = GPIO_Medium_Speed;\n    \n    \/\/ EXTI\u4e2d\u65ad\u521d\u59cb\u5316\u7ed3\u6784\u4f53\u6a21\u677f\n    EXTI_InitTypeDef EXTI_InitStructure;\n    EXTI_StructInit(&amp;EXTI_InitStructure);\n    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;\n    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;\n    EXTI_InitStructure.EXTI_LineCmd = ENABLE;\n    \n    \/\/ EXTI\u4e2d\u65ad\u4f18\u5148\u7ea7\u914d\u7f6e\u7ed3\u6784\u4f53\u6a21\u677f(NVIC)\n    NVIC_InitTypeDef NVIC_InitStructure;\n    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;\n    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;\n    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\n    \n    \/\/ KEY1\u521d\u59cb\u5316\n    GPIO_InitStructure.GPIO_Pin = KEY1_PIN;\n    GPIO_Init(KEY1_PORT, &amp;GPIO_InitStructure);\n    SYSCFG_EXTILineConfig(KEY1_EXTI_PORT_SOURCE, KEY1_EXTI_PIN_SOURCE);\n    EXTI_InitStructure.EXTI_Line = KEY1_EXTI_LINE;\n    EXTI_Init(&amp;EXTI_InitStructure);\n    NVIC_InitStructure.NVIC_IRQChannel = KEY1_IRQn;\n    NVIC_Init(&amp;NVIC_InitStructure);\n    \n    \/\/ KEY2\u521d\u59cb\u5316\n    GPIO_InitStructure.GPIO_Pin = KEY2_PIN;\n    GPIO_Init(KEY2_PORT, &amp;GPIO_InitStructure);\n    SYSCFG_EXTILineConfig(KEY2_EXTI_PORT_SOURCE, KEY2_EXTI_PIN_SOURCE);\n    EXTI_InitStructure.EXTI_Line = KEY2_EXTI_LINE;\n    EXTI_Init(&amp;EXTI_InitStructure);\n    NVIC_InitStructure.NVIC_IRQChannel = KEY2_IRQn;\n    NVIC_Init(&amp;NVIC_InitStructure);\n\n    \/\/ KEY3\u521d\u59cb\u5316\n    GPIO_InitStructure.GPIO_Pin = KEY3_PIN;\n    GPIO_Init(KEY3_PORT, &amp;GPIO_InitStructure);\n    SYSCFG_EXTILineConfig(KEY3_EXTI_PORT_SOURCE, KEY3_EXTI_PIN_SOURCE);\n    EXTI_InitStructure.EXTI_Line = KEY3_EXTI_LINE;\n    EXTI_Init(&amp;EXTI_InitStructure);\n    NVIC_InitStructure.NVIC_IRQChannel = KEY3_IRQn;\n    NVIC_Init(&amp;NVIC_InitStructure);\n}\n\nbool key_read(uint8_t idx)\n{\n    switch (idx)\n    {\n        case 1:  return GPIO_ReadInputDataBit(KEY1_PORT, KEY1_PIN) == Bit_SET;\n        case 2:  return GPIO_ReadInputDataBit(KEY2_PORT, KEY2_PIN) == Bit_SET;\n        case 3:  return GPIO_ReadInputDataBit(KEY3_PORT, KEY3_PIN) == Bit_SET;\n        default: return false;\n    }\n}\n\nvoid key_press_callback_register(uint8_t kidx, key_func_t func)\n{\n    switch (kidx)\n    {\n        case 1: key1_func = func; break;\n        case 2: key2_func = func; break;\n        case 3: key3_func = func; break;\n        default: break;\n    }\n}\n\nvoid EXTI0_IRQHandler(void)\n{\n    EXTI_ClearITPendingBit(KEY1_EXTI_LINE);\n    if (key1_func != NULL) \n    {\n        key1_func();\n    }\n}\n\nvoid EXTI4_IRQHandler(void)\n{\n    EXTI_ClearITPendingBit(KEY2_EXTI_LINE);\n    if (key2_func != NULL) \n    {\n        key2_func();\n    }\n}\n\nvoid EXTI9_5_IRQHandler(void)\n{\n    EXTI_ClearITPendingBit(KEY3_EXTI_LINE);\n    if (key3_func != NULL) \n    {\n        key3_func();\n    }\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#ifndef __KEY_H__\n#define __KEY_H__\n\n#include &lt;stdbool.h&gt;\n#include &lt;stdint.h&gt;\n\ntypedef void (*key_func_t)(void);\ntypedef void (*func)(void);\n\nvoid key_init(void);\nbool key_read(uint8_t idx);\nvoid key_press_callback_register(uint8_t kidx, key_func_t func);\n\n#endif \/* __KEY_H__ *\/\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u9762\u5411\u5bf9\u8c61+\u56de\u8c03\u51fd\u6570<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u77e5\u8bc6\u70b9\uff1a##\u548c#\u7684\u533a\u522b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>\u3010#\u7b26\u53f7\u7684\u529f\u80fd\u548c\u5b9e\u4f8b\u3011<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n\n#define PRINT(NAME) printf(#NAME)\n\nint main()\n{\n    PRINT (Hello world 1);\n    printf(\"\\r\\n\");\n    printf(\"Hello world 2\");\n}\n\nreturn 0;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Hello world 1\nHello world 2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5b8f\u5b9a\u4e49\u4e2d,<code>#<\/code>\u7b26\u53f7\u5c06\u7d27\u968f\u5176\u540e\u7684\u53c2\u6570\u89c6\u4e3a\u5b57\u7b26\u4e32\u5904\u7406,\u5176\u4f5c\u7528\u7c7b\u4f3c\u4e8e\u5bf9\u8be5\u5b8f\u53d8\u91cf\u6dfb\u52a0\u53cc\u5f15\u53f7\u3002\u5177\u4f53\u6765\u8bf4,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>#define PRINT(NAME) printf(#NAME)<\/code>\u8fd9\u4e2a\u5b8f\u7684\u5b9a\u4e49,\u4f7f\u5f97\u5728\u8c03\u7528\u65f6,\u62ec\u53f7\u5185\u7684\u5185\u5bb9\u4f1a\u88ab\u76f4\u63a5\u6253\u5370\u51fa\u6765,\u5c31\u5982\u540c\u88ab\u53cc\u5f15\u53f7\u5305\u88f9\u4e00\u6837\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>\u3010##\u7b26\u53f7\u7684\u529f\u80fd\u548c\u5b9e\u4f8b\u3011<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5b8f\u5b9a\u4e49\u4e2d,<code>##<\/code>\u7b26\u53f7\u88ab\u7528\u4f5c\u8fde\u63a5\u7b26,\u7528\u4e8e\u5c06\u4e24\u4e2a\u5b8f\u53d8\u91cf\u62fc\u63a5\u6210\u4e00\u4e2a\u6574\u4f53\u3002\u8fd9\u79cd\u673a\u5236\u4f7f\u5f97\u6211\u4eec\u80fd\u591f\u8f7b\u677e\u5730\u5c06\u4e0d\u540c\u7684\u5b8f\u53d8\u91cf\u7ec4\u5408\u5728\u4e00\u8d77,\u4ee5\u521b\u5efa\u66f4\u590d\u6742\u7684\u5b8f\u5b9a\u4e49\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Timer\u5b9a\u65f6\u5668<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u57fa\u672c\u6b65\u9aa4<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1.\u5f00\u542f\u65f6\u949fRCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE)\n2.\u521d\u59cb\u5316\u5b9a\u65f6\u5668TIM_TimeBaseInit(TIMx, &amp;TIM_TimeBaseInitStruct)\n3.NVIC\u521d\u59cb\u5316\u914d\u7f6e\u4e2d\u65ad\n4.\u4f7f\u80fd\u5b9a\u65f6\u5668\u4e2d\u65adTIM_Cmd(ENABLE)\n5.\u5f00\u542f\u5b9a\u65f6\u5668TIM_Cmd(ENABLE)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Timer\u521d\u59cb\u5316\u6a21\u7248<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Timer\u57fa\u672c\u521d\u59cb\u5316<strong>\uff1a<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);\n\nTIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;\nTIM_TimeBaseStructInit(&amp;TIM_TimeBaseInitStruct);\nTIM_TimeBaseInitStruct.TIM_Prescaler = 84 - 1;\/\/ \u9884\u5206\u9891\nTIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;\nTIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;\nTIM_TimeBaseInitStruct.TIM_Period = 1000 - 1;\/\/ ARR\u81ea\u52a8\u91cd\u88c5\u8f7d\u503c\nTIM_TimeBaseInit(TIM6, &amp;TIM_TimeBaseInitStruct);\n\nNVIC_InitTypeDef NVIC_InitStruct;\nNVIC_InitStruct.NVIC_IRQChannel = TIM6_DAC_IRQn;\nNVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 5;\nNVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;\nNVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;\nNVIC_Init(&amp;NVIC_InitStruct);\n\nTIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);\nTIM_Cmd(TIM6, ENABLE);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Timer PWM\u8f93\u51fa<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>GPIO\u914d\u7f6e\uff1a<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>GPIO_InitTypeDef GPIO_InitStruct;\nGPIO_StructInit(&amp;GPIO_InitStruct);\nGPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;\nGPIO_InitStruct.GPIO_OType = GPIO_OType_PP;\nGPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;\nGPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;\nGPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;\nGPIO_Init(GPIOE, &amp;GPIO_InitStruct);\nGPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;\nGPIO_Init(GPIOB, &amp;GPIO_InitStruct);\n\nGPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_TIM1);\nGPIO_PinAFConfig(GPIOB, GPIO_PinSource0, GPIO_AF_TIM3);\nGPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_TIM3);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Timer\u914d\u7f6e\uff1a<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4f7f\u7528SDK\u539f\u751f\u65f6\u949f\u9891\u7387\nRCC_ClocksTypeDef RCC_ClocksStruct;\nRCC_GetClocksFreq(&amp;RCC_ClocksStruct);\n\/\/ \u9ad8\u901f APB2 \u57df\u7684\u6700\u5927\u5141\u8bb8\u9891\u7387\u4e3a 84 MHz\nuint32_t apb2_timclk_Mhz = RCC_ClocksStruct.PCLK2_Frequency \/ 1000 \/ 1000 * 2;\n\/\/ \u4f4e\u901f APB1 \u57df\u7684\u6700\u5927\u5141\u8bb8\u9891\u7387\u4e3a 42 MHz\nuint32_t apb1_timclk_Mhz = RCC_ClocksStruct.PCLK1_Frequency \/ 1000 \/ 1000 * 2;\n\nTIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;\nTIM_TimeBaseStructInit(&amp;TIM_TimeBaseInitStruct);\nTIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;\nTIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;\nTIM_TimeBaseInitStruct.TIM_Period = 1000 - 1;\/\/ \u81ea\u52a8\u91cd\u88c5\u8f7d\u5bc4\u5b58\u5668 ARR\uff08Auto-Reload Register\uff09\u7684\u503c,\u5b9a\u65f6\u5668\u8ba1\u6570\u5230\u591a\u5c11\u4ea7\u751f\u4e00\u6b21\u66f4\u65b0\u4e8b\u4ef6\uff08\u6ea2\u51fa\u4e2d\u65ad\uff09\nTIM_TimeBaseInitStruct.TIM_Prescaler = apb2_timclk_Mhz - 1;\/\/ 1Mhz:1us\u8ba1\u6570\u4e00\u6b21\uff0cTIM_Period\u4ece0-999\uff0c\u8ba1\u65701000\u6b21\uff0c\u4ee3\u88681ms\uff0c\u5468\u671f\u4e3a1ms\nTIM_TimeBaseInit(TIM1, &amp;TIM_TimeBaseInitStruct);\nTIM_TimeBaseInitStruct.TIM_Prescaler = apb1_timclk_Mhz - 1;\nTIM_TimeBaseInit(TIM3, &amp;TIM_TimeBaseInitStruct);\n\n\/\/ TIM_Output_Compare_and_PWM_modes\nTIM_OCInitTypeDef TIM_OCInitStruct;\nTIM_OCStructInit(&amp;TIM_OCInitStruct);\nTIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;\nTIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;\nTIM_OCInitStruct.TIM_Pulse = 500 - 1;        \/\/ \u8ba1\u65701000\u6b21\uff0c\u5360\u4e00\u534a\u5468\u671f\uff0c\u5360\u7a7a\u6bd4\u4e3a50%\nTIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;\nTIM_OC1Init(TIM1, &amp;TIM_OCInitStruct);\nTIM_OC3Init(TIM3, &amp;TIM_OCInitStruct);\nTIM_OC4Init(TIM3, &amp;TIM_OCInitStruct);\n\nTIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); \nTIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); \nTIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); \nTIM_CtrlPWMOutputs(TIM1, ENABLE);\n\nTIM_Cmd(TIM1, ENABLE);\nTIM_Cmd(TIM3, ENABLE);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u547c\u5438\u706f\u5faa\u73af\u5b9e\u4f8b\uff1a<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int led_pwm_duty = 500 - 1;\nint led_pwm_duty_cnt = 1;\nwhile(1)\n{\n    cpu_delay(1000);\n    \n    led_pwm_duty += led_pwm_duty_cnt;\n    if (led_pwm_duty &gt;= 1000 - 1 || led_pwm_duty &lt;= 0)\n        led_pwm_duty_cnt = -led_pwm_duty_cnt;\n    \n    TIM_SetCompare1(TIM1, led_pwm_duty);\n    TIM_SetCompare3(TIM3, led_pwm_duty);\n    TIM_SetCompare4(TIM3, led_pwm_duty);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Timer \u8f93\u5165\u8865\u83b7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u8f93\u5165\u8865\u83b7\u57fa\u672c\u914d\u7f6e\uff1a<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u914d\u7f6e\u4e2d\u65ad\u5185\u6838\u5c5e\u6027\nTIM_ICInitTypeDef TIM_ICInitStructure;\nTIM_ICStructInit(&amp;TIM_ICInitStructure);\nTIM_ICInitStructure.TIM_Channel = TIM_Channel_1;\nTIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;\nTIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;\nTIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;\nTIM_ICInitStructure.TIM_ICFilter = 0x0;\n\/\/ \u8fd9\u91cc\u4f7f\u7528\u7684\u662fTIM_PWMIConfig\u800c\u4e0d\u662fTIM_GetCapturex(TIMx)\uff0c\u56e0\u6b64\u8981\u914dTIM_SelectInputTrigger\u3001TIM_SelectSlaveMode\u3001TIM_SelectMasterSlaveMode\nTIM_PWMIConfig(TIM3, &amp;TIM_ICInitStructure);\n\nTIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);\n\nTIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);\nTIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);\n\nTIM_Cmd(TIM3, ENABLE);\n\n\/\/ \u914d\u5236TIM3\u4e2d\u65ad\uff0c\u4f7f\u7528TIM3_IRQHandler\nTIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>TIM3_IRQHandler\u670d\u52a1\u51fd\u6570\uff1a<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>void TIM3_IRQHandler(void)\n{\n    RCC_ClocksTypeDef RCC_Clocks;\n    RCC_GetClocksFreq(&amp;RCC_Clocks);\n    uint32_t tim3_apb1_clk_hz = RCC_Clocks.PCLK1_Frequency * 2ul;\n\n    TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);\n\n    uint32_t ic1 = TIM_GetCapture1(TIM3) + 1;\n    uint32_t ic2 = TIM_GetCapture2(TIM3) + 1;\n\n    if (ic1 != 0)\n    {\n        duty_cycle = (ic2 * 100) \/ ic1;\n        frequency = tim3_apb1_clk_hz \/ ic1;\n    }\n    else\n    {\n        duty_cycle = 0;\n        frequency = 0;\n    }\n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">I2C\u4e0eEEPROM<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">I2C\u8bfb\u5199\u6570\u636e\u6d41\u7a0b\u603b\u89c8\uff1a<\/h2>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/e111471e-0bc1-43f1-b73b-4c6f9f58f924.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1978\" height=\"705\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/e111471e-0bc1-43f1-b73b-4c6f9f58f924.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-83\" style=\"aspect-ratio:2.805845511482255;width:442px;height:auto\"  sizes=\"auto, (max-width: 1978px) 100vw, 1978px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e3b\u673a\u5199\u6a21\u5f0f\uff1a<\/h2>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/a1511c5b-4aa0-4980-8eaa-d99152f6dede.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1895\" height=\"684\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/a1511c5b-4aa0-4980-8eaa-d99152f6dede.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-78\" style=\"aspect-ratio:2.7705627705627704;width:425px;height:auto\"  sizes=\"auto, (max-width: 1895px) 100vw, 1895px\" \/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3b\u673a\u53d1\u51fa\u8d77\u59cb\u4fe1\u53f7\u4f4d\uff0c\u968f\u540e\u53d1\u51fa\u8bfb\u5199\u6807\u5fd7\u4f4d\u4e3a0(Write)\uff0c\u4ece\u673a\u53d1\u9001ACK\u56de\u5e94\uff1b\u4e3b\u673a\u5199\u5165\u4ece\u673a\u7684\u5730\u5740\u4f4d\u7f6e\uff0c\u4ece\u673a\u53d1\u9001ACK\u56de\u5e94\uff1b\u4e3b\u673a\u5f00\u59cb\u53d1\u9001\u6570\u636e\uff0c\u4ece\u673a\u53d1\u9001ACK\u56de\u5e94\uff1b\u4e3b\u673a\u4ea7\u751f\u505c\u6b62\u4fe1\u53f7\uff0c\u7ed3\u675f\u901a\u4fe1\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e3b\u673a\u8bfb\u6a21\u5f0f\uff1a<\/h2>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/e9935c7a-aac1-40af-a8f2-eeb65f3f492f.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1978\" height=\"647\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/e9935c7a-aac1-40af-a8f2-eeb65f3f492f.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-80\" style=\"aspect-ratio:3.0573248407643314;width:465px;height:auto\"  sizes=\"auto, (max-width: 1978px) 100vw, 1978px\" \/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u9996\u5148\u4e3b\u673a\u53d1\u9001\u8d77\u59cb\u4f4d\uff0c\u7136\u540e\u5148\u53d1\u51fa\u5199\u4fe1\u53f7\uff0c\u4e3b\u673a\u53d1\u51fa\u786e\u8ba4\u8981\u8bfb\u7684\u4ece\u8bbe\u5907\u7684\u5730\u5740\u5bc4\u5b58\u5668\u4f4d\u7f6e\uff1b\u4e3b\u673a\u518d\u6b21\u53d1\u9001\u8d77\u4f4d\uff0c\u8fd9\u6b21\u53d1\u51fa\u8bfb\u4fe1\u53f7\uff0c\u4ece\u673a\u56de\u590dACK\uff0c\u4ece\u673a\u5f00\u59cb\u5411\u4e3b\u673a\u53d1\u6570\u636e\uff0c\u4e3b\u673a\u56de\u7b54ACK\uff0c\u6700\u540e\u4e3b\u673a\u4ea7\u751f<code>I2C_GenerateSTOP()<\/code>\uff0c\u4e3b\u673a\u8bfb\u5b8c\u6bd5\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5668\u4ef6\u5730\u5740\uff1a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u533a\u5206\u4e00\u4e2aI2C\u4e0a\u6302\u8f7d\u7684\u4e0d\u540c\u8bbe\u5907\uff0cI2C\u534f\u8bae\u89c4\u5b9a\uff0c\u7b2c\u4e00\u7ec4\u53d1\u9001\u76848\u4f4d\u6570\u636e\uff0c\u524d\u4e03\u4f4d\u4e3a\u5668\u4ef6\u5730\u5740\uff0c\u8303\u56f4\u4e3a<code>000 0000<\/code>~<code>111 1111<\/code>\uff080x00~0x7F\uff09\uff1b\u6700\u540e\u4e00\u4f4d\u4e3a\u8bfb\/\u5199\u4fe1\u53f7\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/164deb9e-2c55-4533-8a43-f8cebd3405c8.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1882\" height=\"678\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/164deb9e-2c55-4533-8a43-f8cebd3405c8.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-77\" style=\"aspect-ratio:2.77599917380977;width:408px;height:auto\"  sizes=\"auto, (max-width: 1882px) 100vw, 1882px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">I\u00b2C\u4e3b\u673a\u901a\u4fe1\u5b8c\u6574\u4e8b\u4ef6\u6d41\u7a0b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e3b\u673a\u53d1\u9001\u6570\u636e\u65f6\uff0c\u4e8b\u4ef6\u987a\u5e8f\u56fa\u5b9a\uff1a<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">EV5 \u2192 EV6 \u2192 EV8 \u2192 EV8_2<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>START-&gt;EV5-&gt;\u53d1\u9001\u5730\u5740-&gt;EV6-&gt;\u53d1\u9001\u6570\u636e-&gt;EV8-&gt;\u53d1\u9001\u5b8c\u6210-&gt;EV8_2-&gt;STOP<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1\ufe0f\u20e3 EV5 \u2014 \u4e3b\u673a\u6a21\u5f0f\u5efa\u7acb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>I2C_EVENT_MASTER_MODE_SELECT<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b8f\u5b9a\u4e49\uff1a<code>((uint32_t)0x00030001)<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SB   Start Bit\nMSL  Master Mode\nBUSY \u603b\u7ebf\u5fd9<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1aSTART \u4fe1\u53f7\u5df2\u7ecf\u53d1\u9001\u6210\u529f,I2C\u8fdb\u5165\u4e3b\u673a\u6a21\u5f0f<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>I2C_GenerateSTART(I2C1, ENABLE);\nwhile(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2\ufe0f\u20e3 EV6 \u2014 \u5730\u5740\u53d1\u9001\u6210\u529f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3b\u673a\u53d1\u9001\u5730\u5740\u540e\u7b49\u5f85\uff1a<code>\u4ece\u673aACK<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6807\u5fd7\u4f4d\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ADDR \u5730\u5740\u5339\u914d\nTRA  \u53d1\u9001\u6a21\u5f0f\nTXE  \u53d1\u9001\u5bc4\u5b58\u5668\u7a7a\nBUSY\nMSL<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a\u4ece\u673a\u5df2\u7ecf\u54cd\u5e94\uff0c\u4e3b\u673a\u8fdb\u5165\u53d1\u9001\u6a21\u5f0f<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>I2C_Send7bitAddress(I2C1, addr,  I2C_Direction_Transmitter);\nwhile(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3\ufe0f\u20e3 EV7 \u2014 \u4e3b\u673a\u63a5\u6536\u6570\u636e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7528\u4e8e <strong>\u4e3b\u673a\u63a5\u6536\u6a21\u5f0f<\/strong>\uff1a<code>I2C_EVENT_MASTER_BYTE_RECEIVED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6807\u5fd7\uff1a<code>RXNE = 1<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a\u63a5\u6536\u52301\u5b57\u8282\u6570\u636e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));\ndata = I2C_ReceiveData(I2C1);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4\ufe0f\u20e3 EV8 \u2014 \u6570\u636e\u53d1\u9001\u4e2d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_MASTER_BYTE_TRANSMITTING<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6807\u5fd7\uff1a<code>TXE = 1<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a\u6570\u636e\u5df2\u7ecf\u5199\u5165DR\uff0c\u6b63\u5728\u53d1\u9001<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>I2C_SendData(I2C1, data);\nwhile(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5\ufe0f\u20e3 EV8_2 \u2014 \u6570\u636e\u53d1\u9001\u5b8c\u6210<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_MASTER_BYTE_TRANSMITTED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6807\u5fd7\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TXE = 1\nBTF = 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a\u6570\u636e\u5df2\u7ecf\u5b8c\u5168\u53d1\u9001\u5230\u603b\u7ebf<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a\u901a\u5e38\u7528\u4e8e\uff1a\u6700\u540e\u4e00\u4e2a\u5b57\u8282\u53d1\u9001\u5b8c\u6210\uff0c\u7136\u540e\u53d1 STOP\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6\ufe0f\u20e3 \u4e3b\u673a\u53d1\u9001\u5b8c\u6574\u6d41\u7a0b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6807\u51c6 STM32 I\u00b2C \u5199\u6d41\u7a0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>I2C_GenerateSTART(I2C1, ENABLE);\nwhile(!I2C_CheckEvent(I2C1, EV5));\n\nI2C_Send7bitAddress(I2C1, addr, I2C_Direction_Transmitter);\nwhile(!I2C_CheckEvent(I2C1, EV6));\n\nI2C_SendData(I2C1, data);\nwhile(!I2C_CheckEvent(I2C1, EV8));\n\nI2C_GenerateSTOP(I2C1, ENABLE);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">I\u00b2C\u4ece\u673a\u901a\u4fe1\u5b8c\u6574\u4e8b\u4ef6\u6d41\u7a0b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e00\u3001\u4ece\u673a\u63a5\u6536\u6a21\u5f0f\uff08Master \u2192 Slave\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u4e3b\u673a\u5411\u4ece\u673a\u5199\u6570\u636e\u65f6\uff0c\u4ece\u673a\u4f1a\u7ecf\u5386\u4ee5\u4e0b\u4e8b\u4ef6\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1\ufe0f\u20e3 EV1\uff1a\u4ece\u673a\u5730\u5740\u5339\u914d<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e3b\u673a\u53d1\u9001 <strong>START + \u5730\u5740<\/strong><\/li>\n\n\n\n<li>\u5730\u5740\u4e0e\u4ece\u673a\u5730\u5740\u5339\u914d<\/li>\n\n\n\n<li>\u4ece\u673a\u8fdb\u5165\u63a5\u6536\u6a21\u5f0f<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bc4\u5b58\u5668\u72b6\u6001\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ADDR = 1\nTRA = 0<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2\ufe0f\u20e3 EV2\uff1a\u63a5\u6536\u5230\u6570\u636e<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_SLAVE_BYTE_RECEIVED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e3b\u673a\u53d1\u9001\u6570\u636e<\/li>\n\n\n\n<li>\u4ece\u673a\u63a5\u6536\u5230\u4e00\u4e2a\u5b57\u8282<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bc4\u5b58\u5668\u72b6\u6001\uff1a<code>RXNE = 1<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5904\u7406\uff1a<code>uint8_t data = I2C_ReceiveData(I2C1);<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a\u4e8b\u4ef6\u4f1a <strong>\u5faa\u73af\u51fa\u73b0<\/strong>\uff0c\u76f4\u5230\u4e3b\u673a\u505c\u6b62\u53d1\u9001\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3\ufe0f\u20e3 EV4\uff1a\u505c\u6b62\u4fe1\u53f7\u68c0\u6d4b<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_SLAVE_STOP_DETECTED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e3b\u673a\u53d1\u9001 <strong>STOP<\/strong><\/li>\n\n\n\n<li>\u4ece\u673a\u901a\u4fe1\u7ed3\u675f<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bc4\u5b58\u5668\u72b6\u6001\uff1a<code>STOPF = 1<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5904\u7406\uff1a<code>I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF);<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e8c\u3001\u4ece\u673a\u53d1\u9001\u6a21\u5f0f\uff08Slave \u2192 Master\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u4e3b\u673a\u8bfb\u53d6\u4ece\u673a\u6570\u636e\u65f6\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1\ufe0f\u20e3 EV1\uff1a\u5730\u5740\u5339\u914d\uff08\u53d1\u9001\u6a21\u5f0f\uff09<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e3b\u673a\u53d1\u9001<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><code>START + \u5730\u5740 + Read<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bc4\u5b58\u5668\u72b6\u6001\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ADDR = 1\nTRA = 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8bf4\u660e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ece\u673a\u88ab\u8bf7\u6c42\u53d1\u9001\u6570\u636e\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">2\ufe0f\u20e3 EV3\uff1a\u6570\u636e\u5bc4\u5b58\u5668\u7a7a<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_SLAVE_BYTE_TRANSMITTING<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u542b\u4e49\uff1a<code>TXE = 1<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8bf4\u660e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6570\u636e\u5bc4\u5b58\u5668\u7a7a\uff0c\u9700\u8981\u53d1\u9001\u6570\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee3\u7801\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>I2C_SendData(I2C1, data);<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3\ufe0f\u20e3 EV3-2\uff1a\u6570\u636e\u53d1\u9001\u5b8c\u6210<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8b\u4ef6\uff1a<code>I2C_EVENT_SLAVE_BYTE_TRANSMITTED<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bc4\u5b58\u5668\u72b6\u6001\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TXE = 1\nBTF = 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8bf4\u660e\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6570\u636e\u5df2\u7ecf\u53d1\u9001<\/li>\n\n\n\n<li>\u53ef\u4ee5\u53d1\u9001\u4e0b\u4e00\u5b57\u8282<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e09\u3001\u5b8c\u6574\u4ece\u673a\u4e8b\u4ef6\u6d41\u7a0b\u56fe<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>START\n  \u2193\nEV1\n\u5730\u5740\u5339\u914d\n  \u2193\nEV2\n\u63a5\u6536\u6570\u636e\n  \u2193\nEV2\n\u63a5\u6536\u6570\u636e\n  \u2193\nEV2\n\u63a5\u6536\u6570\u636e\n  \u2193\nEV4\nSTOP<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>START\n  \u2193\nEV1\n\u5730\u5740\u5339\u914d\n  \u2193\nEV3\n\u53d1\u9001\u6570\u636e\n  \u2193\nEV3\n\u53d1\u9001\u6570\u636e\n  \u2193\nEV3-2\n\u53d1\u9001\u5b8c\u6210\n  \u2193\nSTOP<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u56db\u3001\u5178\u578b\u4ece\u673a\u4ee3\u7801\u6846\u67b6<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>while (1)\n{\n    if(I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED))\n    {\n        \/\/ \u5730\u5740\u5339\u914d\n    }\n\n    if(I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_BYTE_RECEIVED))\n    {\n        data = I2C_ReceiveData(I2C1);\n    }\n\n    if(I2C_CheckEvent(I2C1, I2C_EVENT_SLAVE_STOP_DETECTED))\n    {\n        \/\/ \u901a\u4fe1\u7ed3\u675f\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">I\u00b2C \u8d77\u59cb\u6761\u4ef6\uff1a<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8d77\u59cb\u4f4d\u3001\u5730\u5740\u4f4d:SCL\u4e0d\u52a8,SDA\u8fdb\u51650\u8868\u793a\u5de5\u4f5c\u72b6\u6001<\/li>\n\n\n\n<li>\u5e94\u7b54\u4f4d:SDA\u7684\u63a5\u6536\u65b9\u56de\u5e94\u53d1\u9001\u65b9\u5df2\u6536\u5230\u6570\u636e\u7684\u6807\u5fd7<\/li>\n\n\n\n<li>\u6570\u636e\u4f4d:SDA\u7684\u53d1\u9001\u65b9\u4fee\u6539SDA\u72b6\u6001<\/li>\n\n\n\n<li>\u4e3b\u4ece\u65b9\u3001\u53d1\u9001\u63a5\u6536\u65b9\u5173\u7cfb:SCL\u4e3b\u673a\u63a7\u5236,SDA\u53d1\u9001\u65b9\u63a7\u5236<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">SDA : 1 \u2192 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SCL : 1<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/c8393849-64fb-4ef2-a07b-a0fb50ad7a2d.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1113\" height=\"179\" data-original=\"http:\/\/150.158.139.84\/wp-content\/uploads\/2026\/03\/c8393849-64fb-4ef2-a07b-a0fb50ad7a2d.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-73\" style=\"aspect-ratio:6.217904233171409;width:437px;height:auto\"  sizes=\"auto, (max-width: 1113px) 100vw, 1113px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">I2C\u57fa\u7840\u4ee3\u7801\uff1a<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u6839\u636e\u5b98\u65b9\u6587\u6863\uff1aProgram the Mode, duty cycle , Own address, Ack, Speed and Acknowledged Address using the I2C_Init() function.\nI2C_InitTypeDef I2C_InitStruct;\nI2C_StructInit(&amp;I2C_InitStruct);\nI2C_InitStruct.I2C_Mode = I2C_Mode_I2C;\nI2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;\nI2C_InitStruct.I2C_OwnAddress1 = 0x00;\nI2C_InitStruct.I2C_Ack = I2C_Ack_Enable;\nI2C_InitStruct.I2C_ClockSpeed = 100ul * 1000ul;\nI2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;\nI2C_Init(I2C1, &amp;I2C_InitStruct);\n\n\/\/ STM32 I\u00b2C \u4e3b\u673a\u53d1\u9001\u4e00\u4e2a\u5b57\u8282\u5b8c\u6574\u6d41\u7a0b\nI2C_AcknowledgeConfig (I2C1, ENABLE)\nI2C_GenerateSTART (I2C1, ENABLE)\/\/ \u4ea7\u751f\u8d77\u59cb\u4fe1\u53f7\nwhile (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));\/\/ \u7b49\u5f85\u4e3b\u6a21\u5f0f\u5efa\u7acb\nI2C_Send7bitAddress (I2C1, OXAB, I2C_Direction_Transmitter);\/\/ \u53d1\u9001\u4ece\u673a\u5730\u5740\nwhile (!I2C_CheckEvent (I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))\/\/ \u7b49\u5f85\u5730\u5740\u5e94\u7b54\nI2C_SendData (I2C1, 0x00);\/\/ \u53d1\u9001\u6570\u636e\nwhile (!I2C_CheckEvent (I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING));\/\/ \u7b49\u5f85\u6570\u636e\u53d1\u9001\u5b8c\u6210\nI2C_GenerateSTOP (I2C1, ENABLE);\/\/ \u53d1\u9001 STOP \u4fe1\u53f7<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I2C_AcknowledgedAddress_7bit\u4e3a8\u4f4d\u6570\u636e\u4f4d\uff0c\u524d7\u4f4d\u4e3a1 0 1 0 A2 A1 A1\uff0c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6700\u540e\u4e00\u4f4d0\u4e3aW(write)\uff0c1\u4e3aR(read)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5b8f\u51fd\u6570\uff1a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c <strong>\u786c\u4ef6\u51fa\u9519<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6ca1\u6709\u4ece\u673a<\/li>\n\n\n\n<li>\u603b\u7ebf\u88ab\u62c9\u4f4e<\/li>\n\n\n\n<li>SDA \u88ab\u5360\u7528<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u7a0b\u5e8f\u5c31\u4f1a\uff1a\u6b7b\u5faa\u73af\/CPU\u5361\u6b7b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6240\u4ee5\u8981\u589e\u52a0\u8d85\u65f6\u673a\u5236<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define I2C_CHECK_EVENT(EVENT, TIMEOUT) \\\n    do { \\\n        uint32_t timeout = TIMEOUT; \\\n        while (!I2C_CheckEvent(I2C1, EVENT) &amp;&amp; timeout &gt; 0) { \\\n            cpu_delay(10); \\\n            timeout -= 10; \\\n        } \\\n        if (timeout &lt;= 0) \\\n            return false; \\\n    } while (0)\n\n\/\/ \u628a\u5b8f\u53c2\u6570\u590d\u5236\u5230\u5c40\u90e8\u53d8\u91cf\u3002\nuint32_t timeout = TIMEOUT;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">do {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">} while (0)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u662f <strong>\u5b8f\u7f16\u7a0b\u5e38\u89c1\u6280\u5de7<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f5c\u7528\uff1a<strong>\u4fdd\u8bc1\u5b8f\u50cf\u4e00\u6761\u8bed\u53e5\u4e00\u6837\u4f7f\u7528<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if(x)\n    I2C_CHECK_EVENT(...);\nelse\n    ...<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">SPI\u4e0eLCD<\/h1>\n","protected":false},"excerpt":{"rendered":"<p>\u57fa\u4e8e\u5f00\u6e90\u9879\u76ee:\u57fa\u4e8eFreeRTOS\u7684stm32\u667a\u80fd\u5929\u6c14\u65f6\u949f\u590d\u523b\u8fc7\u7a0b\u4e2d\u7684\u4e00\u4e9b\u5fc3\u5f97\u4ee5\u53ca\u7b14\u8bb0\uff0c\u9879\u76ee\u89c6\u9891\u94fe\u63a5: \u3010\u3010\u5168 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-70","post","type-post","status-publish","format-standard","hentry","category-learning"],"_links":{"self":[{"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/posts\/70","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/comments?post=70"}],"version-history":[{"count":5,"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/posts\/70\/revisions"}],"predecessor-version":[{"id":152,"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/posts\/70\/revisions\/152"}],"wp:attachment":[{"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/media?parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/categories?post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.echoxx.tech\/index.php\/wp-json\/wp\/v2\/tags?post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}