{"id":108014,"date":"2026-09-20T19:32:46","date_gmt":"2026-09-20T11:32:46","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/108014.html"},"modified":"2026-09-20T19:32:46","modified_gmt":"2026-09-20T11:32:46","slug":"stm32f103-pwmdma%e9%a9%b1%e5%8a%a8ws2812b%e7%81%af%e5%b8%a6%e5%ae%9e%e6%88%98%ef%bc%9accr%e6%97%b6%e5%ba%8f%e6%95%b4%e5%ae%9a%e3%80%81%e9%a6%96%e7%81%af%e9%94%99%e4%bd%8d%e6%a0%b9%e5%9b%a0%e4%b8%8e","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/108014.html","title":{"rendered":"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b"},"content":{"rendered":"<\/p>\n<h4>\u6587\u7ae0\u76ee\u5f55<\/h4>\n<ul>\n<li>\n<ul>\n<li>\u6458\u8981<\/li>\n<li>\u4e00\u3001\u524d\u8a00&#xff1a;\u4e3a\u4ec0\u4e48\u706f\u5e26\u65f6\u5e8f\u8fd9\u4e48\u96be\u4f3a\u5019<\/li>\n<li>\u4e8c\u3001\u534f\u8bae\u672c\u8d28&#xff1a;\u9ad8\u7535\u5e73\u7684\u7edd\u5bf9\u65f6\u95f4&#xff0c;\u4e0d\u662f\u5360\u7a7a\u6bd4<\/li>\n<li>\u4e09\u3001\u65b9\u6848\u9009\u578b&#xff1a;\u4e3a\u4ec0\u4e48\u6700\u7ec8\u843d\u5230 PWM&#043;DMA<\/li>\n<li>\u56db\u3001\u786c\u4ef6\u4e0e\u65f6\u5e8f\u8bbe\u8ba1<\/li>\n<li>\n<ul>\n<li>4.1 \u63a5\u7ebf\u4e0e\u7535\u5e73\u95e8\u69db&#xff08;\u6700\u5bb9\u6613\u7ffb\u8f66\u7684\u5730\u65b9&#xff09;<\/li>\n<li>4.2 \u5b9a\u65f6\u5668\u53c2\u6570\u63a8\u5bfc&#xff08;\u914d\u7f6e\u7ea7\u51b3\u7b56&#xff09;<\/li>\n<\/ul>\n<\/li>\n<li>\u4e94\u3001PWM&#043;DMA \u7684\u786c\u4ef6\u6d41\u6c34\u7ebf\u6a21\u578b<\/li>\n<li>\u516d\u3001\u6570\u636e\u7f16\u7801&#xff1a;GRB \u91cd\u6392\u3001\u4f3d\u9a6c\u6821\u6b63\u4e0e\u9650\u6d41<\/li>\n<li>\n<ul>\n<li>6.1 \u4f4d\u7f16\u7801\u4e0e\u590d\u4f4d\u6bb5<\/li>\n<li>6.2 \u5bb9\u6613\u9057\u6f0f\u7684\u6b65\u9aa4&#xff1a;DMA \u542f\u52a8\u524d\u7684&#034;\u9884\u88c5\u8f7d&#034;<\/li>\n<li>6.3 \u4f3d\u9a6c\u6821\u6b63<\/li>\n<li>6.4 \u5168\u5c40\u9650\u6d41&#xff08;\u4fdd\u62a4\u7535\u6e90&#xff09;<\/li>\n<\/ul>\n<\/li>\n<li>\u4e03\u3001\u5931\u8d25\u8def\u5f84&#xff1a;\u9996\u706f\u989c\u8272\u9519\u4e71\u7684\u5b8c\u6574\u6392\u67e5<\/li>\n<li>\u516b\u3001\u6d4b\u8bd5\u9a8c\u8bc1<\/li>\n<li>\n<ul>\n<li>8.1 \u65f6\u5e8f\u7cbe\u5ea6\u5b9e\u6d4b<\/li>\n<li>8.2 \u5237\u65b0\u7387\u4e0e CPU \u5360\u7528<\/li>\n<li>8.3 \u5173\u952e\u53c2\u6570\u626b\u63cf&#xff1a;CCR \u65f6\u5e8f\u5bfb\u4f18<\/li>\n<li>8.4 \u4f3d\u9a6c\u6821\u6b63\u6548\u679c<\/li>\n<\/ul>\n<\/li>\n<li>\u4e5d\u3001\u6545\u969c\u6392\u67e5<\/li>\n<li>\n<ul>\n<li>9.1 \u706f\u5e26\u6574\u4f53\u4e71\u8272\u3001\u5f69\u8679\u4e71\u821e<\/li>\n<li>9.2 \u53ea\u6709\u7b2c\u4e00\u9897\u706f\u989c\u8272\u4e0d\u5bf9<\/li>\n<li>9.3 \u706f\u73e0\u5168\u90e8\u4e0d\u4eae&#xff0c;\u4f46\u6ce2\u5f62\u6b63\u5e38<\/li>\n<li>9.4 \u5076\u53d1\u95ea\u70c1&#xff0c;\u9760\u8fd1\u7535\u673a\/\u7ee7\u7535\u5668\u5c31\u4e71<\/li>\n<li>9.5 \u957f\u706f\u5e26\u672b\u7aef\u989c\u8272\u9519\u8bef<\/li>\n<li>9.6 \u65b0\u7248\u706f\u5e26\u672b\u706f\u968f\u673a\u95ea<\/li>\n<\/ul>\n<\/li>\n<li>\u5341\u3001\u603b\u7ed3<\/li>\n<li>\u53c2\u8003\u8d44\u6599<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>\u6458\u8981<\/h3>\n<p>WS2812B \u7528\u4e00\u6839\u6570\u636e\u7ebf\u4ee5 800kHz \u5f52\u96f6\u7801\u4f20\u8f93\u6bcf\u4e2a\u50cf\u7d20\u7684 24 \u4f4d GRB \u6570\u636e&#xff0c;\u5bf9 T0H\/T1H \u9ad8\u7535\u5e73\u65f6\u95f4\u7684\u5bb9\u5dee\u53ea\u6709 \u00b1150ns&#xff0c;\u7528 GPIO \u5ef6\u65f6\u6216\u666e\u901a\u4e2d\u65ad\u7ffb\u8f6c\u6781\u6613\u56e0\u4e2d\u65ad\u6296\u52a8\u51fa\u73b0\u989c\u8272\u9519\u4e71\u3002\u672c\u6587\u57fa\u4e8e STM32F103C8T6&#xff08;72MHz&#xff09;&#043; TIM2 PWM &#043; DMA1_Channel2&#xff0c;\u628a\u6bcf\u4e2a bit \u9884\u7f16\u7801\u6210 CCR \u6bd4\u8f83\u503c&#xff0c;\u7531\u786c\u4ef6\u5b9a\u65f6\u5668\u8f93\u51fa\u7cbe\u786e\u6ce2\u5f62\u3001DMA \u540e\u53f0\u81ea\u52a8\u642c\u8fd0&#xff0c;\u5b9e\u73b0\u96f6 CPU \u53c2\u4e0e\u7684\u706f\u5e26\u5237\u65b0\u3002\u5b9e\u6d4b&#xff1a;60 \u9897\u706f\u73e0\u5355\u5e27 1868\u00b5s\u3001\u5237\u65b0\u7387 521Hz\u3001T0H\/T1H \u4e0e\u6570\u636e\u624b\u518c\u7406\u8bba\u503c\u504f\u5dee\u5747 &lt;1%&#xff0c;\u903b\u8f91\u5206\u6790\u4eea\u6d4b\u5f97\u65f6\u5e8f\u6296\u52a8 \u2264\u00b140ns&#xff0c;CPU \u5360\u7528\u4ece GPIO \u5ef6\u65f6\u65b9\u6848\u7684 92% \u964d\u5230 1.3%\u3002\u6587\u4e2d\u7ed9\u51fa\u9996\u706f\u9519\u4f4d\u7684\u5b8c\u6574\u6392\u67e5\u94fe\u30013.3V \u9a71\u52a8 5V \u706f\u73e0\u7684\u7535\u5e73\u95e8\u69db\u9677\u9631&#xff0c;\u4ee5\u53ca CCR \u65f6\u5e8f\u5bfb\u4f18\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u7684\u91cf\u5316\u6d4b\u8bd5\u3002<\/p>\n<h3>\u4e00\u3001\u524d\u8a00&#xff1a;\u4e3a\u4ec0\u4e48\u706f\u5e26\u65f6\u5e8f\u8fd9\u4e48\u96be\u4f3a\u5019<\/h3>\n<p>WS2812B \u628a\u63a7\u5236 IC \u548c\u4e09\u8272 LED \u96c6\u6210\u5728\u4e00\u9897 5050 \u5c01\u88c5\u91cc&#xff0c;\u4e00\u6761\u6570\u636e\u7ebf\u4e32\u8d77\u6574\u6761\u706f\u5e26\u3002\u5b83\u7701\u7ebf\u3001\u597d\u7ea7\u8054&#xff0c;\u4f46\u4ee3\u4ef7\u662f\u628a\u65f6\u5e8f\u538b\u529b\u5168\u90e8\u8f6c\u5ac1\u7ed9\u4e86\u4e3b\u63a7\u3002\u6bcf\u4e2a bit \u7531\u4e00\u4e2a\u9ad8\u7535\u5e73\u548c\u4e00\u6bb5\u4f4e\u7535\u5e73\u7ec4\u6210&#xff0c;0 \u7801\u548c 1 \u7801\u7684\u533a\u522b\u53ea\u770b\u9ad8\u7535\u5e73\u6301\u7eed\u4e86\u591a\u4e45&#xff1a;\u7ea6 0.4\u00b5s \u5224 0&#xff0c;\u7ea6 0.8\u00b5s \u5224 1&#xff0c;\u5bb9\u5dee \u00b1150ns\u3002STM32F103 \u4e3b\u9891 72MHz&#xff0c;\u5355\u5468\u671f\u6307\u4ee4 13.89ns&#xff0c;\u7eaf\u7b97\u6570\u4e0a\u5b8c\u5168\u591f\u7528&#xff0c;\u53ef\u4e00\u65e6\u7528\u8f6f\u4ef6\u5ef6\u65f6\u53bb\u51d1\u8fd9\u4e2a\u7a97\u53e3&#xff0c;\u4e2d\u65ad\u54cd\u5e94\u5ef6\u8fdf\u3001\u6d41\u6c34\u7ebf\u51b2\u5237\u3001Flash \u7b49\u5f85\u5468\u671f\u90fd\u4f1a\u6324\u8fdb\u6765\u3002\u6211\u5728\u7b2c\u4e00\u7248\u7528 __NOP() \u5ef6\u65f6\u65f6&#xff0c;\u903b\u8f91\u5206\u6790\u4eea\u4e0a\u770b\u5230\u7684\u8109\u5bbd\u6296\u52a8\u5c31\u6709 \u00b1150ns&#xff0c;\u6b63\u597d\u5361\u5728\u5bb9\u5dee\u8fb9\u7f18&#xff0c;\u706f\u5e26\u5076\u53d1\u5f69\u8679\u4e71\u7801\u3002<\/p>\n<p>\u672c\u6587\u8981\u89e3\u51b3\u7684\u5c31\u662f&#034;\u5982\u4f55\u8ba9\u65f6\u5e8f\u8131\u5f00 CPU&#034;\u3002\u8bfb\u5b8c\u540e\u4f60\u53ef\u4ee5\u638c\u63e1&#xff1a;WS2812B \u5f52\u96f6\u7801\u7684\u7edd\u5bf9\u65f6\u95f4\u672c\u8d28\u3001PWM&#043;DMA \u7684\u786c\u4ef6\u6d41\u6c34\u7ebf\u6a21\u578b\u3001CCR \u503c\u7684\u6574\u5b9a\u65b9\u6cd5\u3001\u4f3d\u9a6c\u6821\u6b63\u4e0e\u9650\u6d41\u7684\u5de5\u7a0b\u5b9e\u73b0&#xff0c;\u4ee5\u53ca\u51e0\u4e2a\u4e0d\u8e29\u4e00\u6b21\u5c31\u4e0d\u77e5\u9053\u7684\u5751\u3002<\/p>\n<p>\u524d\u7f6e\u6761\u4ef6&#xff1a;\u4f1a\u7528 STM32CubeMX \u751f\u6210 F1 \u5de5\u7a0b&#xff0c;\u4e86\u89e3\u5b9a\u65f6\u5668 PWM \u4e0e DMA \u57fa\u672c\u6982\u5ff5&#xff1b;\u786c\u4ef6\u4e3a STM32F103C8T6 \u6700\u5c0f\u7cfb\u7edf\u677f &#043; 5V \u7535\u6e90 &#043; WS2812B \u706f\u5e26\u3002\u672c\u6587\u5b8c\u6574\u5de5\u7a0b\u4ee3\u7801\u53ef\u5728 CSDN \u4e0b\u8f7d\u9891\u9053 \u83b7\u53d6&#xff08;VIP \u514d\u8d39&#xff09;\u3002<\/p>\n<h3>\u4e8c\u3001\u534f\u8bae\u672c\u8d28&#xff1a;\u9ad8\u7535\u5e73\u7684\u7edd\u5bf9\u65f6\u95f4&#xff0c;\u4e0d\u662f\u5360\u7a7a\u6bd4<\/h3>\n<p>\u5f88\u591a\u4eba\u7b2c\u4e00\u53cd\u5e94\u662f&#034;\u7528\u5360\u7a7a\u6bd4 1\/3 \u8868\u793a 0\u30012\/3 \u8868\u793a 1&#034;&#xff0c;\u8fd9\u4e2a\u7406\u89e3\u5728\u56fa\u5b9a\u5468\u671f\u4e0b\u52c9\u5f3a\u80fd\u7528&#xff0c;\u4f46\u4e00\u65e6\u6362\u4e3b\u9891\u5c31\u4f1a\u5d29\u2014\u2014\u56e0\u4e3a\u51b3\u5b9a 0\/1 \u7684\u662f\u9ad8\u7535\u5e73\u7684\u7edd\u5bf9\u65f6\u95f4&#xff0c;\u800c\u4e0d\u662f\u5360\u7a7a\u6bd4\u3002WS2812B \u5185\u90e8\u6709\u4e00\u4e2a\u5355\u7a33\u6001\u7535\u8def&#xff1a;\u68c0\u6d4b\u5230\u4e0a\u5347\u6cbf\u540e\u542f\u52a8\u4e00\u4e2a\u5b9a\u65f6\u5668&#xff0c;\u5982\u679c\u5728\u7ea6 0.35\u00b5s \u5185\u4e0b\u964d\u5c31\u5224 0&#xff0c;\u6491\u5230\u7ea6 0.7\u00b5s \u624d\u4e0b\u964d\u5c31\u5224 1\u3002<\/p>\n<p>\u6211\u628a\u6570\u636e\u624b\u518c\u7684\u65f6\u5e8f\u53c2\u6570\u6574\u7406\u5982\u4e0b&#xff08;\u5e8f\u53f7\u5bf9\u5e94 WORLDSEMI \u5b98\u65b9 Datasheet \u7684 Switching characteristics \u8868&#xff09;&#xff1a;<\/p>\n<table>\n<tr>\u53c2\u6570\u542b\u4e49\u6700\u5c0f\u503c\u5178\u578b\u503c\u6700\u5927\u503c\u5355\u4f4d<\/tr>\n<tbody>\n<tr>\n<td>T0H<\/td>\n<td>0 \u7801\u9ad8\u7535\u5e73<\/td>\n<td align=\"center\">0.22<\/td>\n<td align=\"center\">0.40<\/td>\n<td align=\"center\">0.58<\/td>\n<td align=\"center\">\u00b5s<\/td>\n<\/tr>\n<tr>\n<td>T0L<\/td>\n<td>0 \u7801\u4f4e\u7535\u5e73<\/td>\n<td align=\"center\">0.58<\/td>\n<td align=\"center\">0.85<\/td>\n<td align=\"center\">1.00<\/td>\n<td align=\"center\">\u00b5s<\/td>\n<\/tr>\n<tr>\n<td>T1H<\/td>\n<td>1 \u7801\u9ad8\u7535\u5e73<\/td>\n<td align=\"center\">0.58<\/td>\n<td align=\"center\">0.80<\/td>\n<td align=\"center\">1.00<\/td>\n<td align=\"center\">\u00b5s<\/td>\n<\/tr>\n<tr>\n<td>T1L<\/td>\n<td>1 \u7801\u4f4e\u7535\u5e73<\/td>\n<td align=\"center\">0.58<\/td>\n<td align=\"center\">0.45<\/td>\n<td align=\"center\">1.00<\/td>\n<td align=\"center\">\u00b5s<\/td>\n<\/tr>\n<tr>\n<td>T0H&#043;T0L \/ T1H&#043;T1L<\/td>\n<td>\u4f4d\u5468\u671f<\/td>\n<td align=\"center\">0.65<\/td>\n<td align=\"center\">1.25<\/td>\n<td align=\"center\">1.85<\/td>\n<td align=\"center\">\u00b5s<\/td>\n<\/tr>\n<tr>\n<td>RES<\/td>\n<td>\u590d\u4f4d\u4f4e\u7535\u5e73<\/td>\n<td align=\"center\">50<\/td>\n<td align=\"center\">\u2014<\/td>\n<td align=\"center\">\u2014<\/td>\n<td align=\"center\">\u00b5s<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4e24\u4e2a\u5173\u952e\u7ed3\u8bba&#xff1a;\u4e00\u662f\u4f4d\u5468\u671f\u56fa\u5b9a 1.25\u00b5s&#xff08;\u5bf9\u5e94 800kHz&#xff09;&#xff0c;0 \u7801\u548c 1 \u7801\u53ea\u662f\u628a\u9ad8\u7535\u5e73\u5728\u5468\u671f\u5185&#034;\u632a&#034;\u4e86\u4f4d\u7f6e&#xff1b;\u4e8c\u662f\u590d\u4f4d\u4f4e\u7535\u5e73\u81f3\u5c11\u8981 50\u00b5s\u2014\u2014\u8fd9\u662f\u5f88\u591a\u6559\u7a0b\u4e00\u7b14\u5e26\u8fc7\u3001\u5374\u8ba9\u65b0\u624b\u5361\u4f4f\u7684\u5730\u65b9&#xff0c;\u7a0d\u540e\u7b2c\u516d\u8282\u4f1a\u8bb2\u5230\u65b0\u578b\u53f7\u706f\u73e0\u628a\u5b83\u62ac\u5230\u4e86 280\u00b5s\u3002<\/p>\n<p>\u6570\u636e\u5728\u706f\u5e26\u4e0a\u7684\u6d41\u52a8\u65b9\u5f0f\u5982\u4e0b&#xff1a;\u4e3b\u63a7\u53d1\u51fa\u7684\u4e00\u957f\u4e32\u4f4d\u6d41&#xff0c;\u6bcf\u9897\u706f\u73e0&#034;\u622a\u7559&#034;\u81ea\u5df1\u7684\u524d 24 \u4f4d&#xff08;\u987a\u5e8f\u662f G\u2192R\u2192B&#xff0c;\u6ce8\u610f\u4e0d\u662f RGB&#xff09;&#xff0c;\u628a\u591a\u4f59\u7684\u4f4d\u6574\u5f62\u540e\u4ece DOUT \u8f6c\u53d1\u7ed9\u4e0b\u4e00\u9897\u3002\u6240\u4ee5\u53ea\u8981\u7b2c\u4e00\u9897\u6536\u5230\u7684\u4f4d\u6d41\u9519\u4e86&#xff0c;\u540e\u9762\u6240\u6709\u706f\u73e0\u7684\u989c\u8272\u90fd\u4f1a\u8ddf\u7740\u9519\u4f4d\u2014\u2014\u8fd9\u4e5f\u662f&#034;\u53ea\u9519\u7b2c\u4e00\u9897&#034;\u73b0\u8c61\u503c\u5f97\u5355\u72ec\u6392\u67e5\u7684\u539f\u56e0\u3002<\/p>\n<p>  #mermaid-svg-28QoL8aHPGDaKQ0b{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-28QoL8aHPGDaKQ0b .error-icon{fill:#552222;}#mermaid-svg-28QoL8aHPGDaKQ0b .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-28QoL8aHPGDaKQ0b .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-28QoL8aHPGDaKQ0b .marker{fill:#333333;stroke:#333333;}#mermaid-svg-28QoL8aHPGDaKQ0b .marker.cross{stroke:#333333;}#mermaid-svg-28QoL8aHPGDaKQ0b svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-28QoL8aHPGDaKQ0b p{margin:0;}#mermaid-svg-28QoL8aHPGDaKQ0b .label{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;color:#333;}#mermaid-svg-28QoL8aHPGDaKQ0b .cluster-label text{fill:#333;}#mermaid-svg-28QoL8aHPGDaKQ0b .cluster-label span{color:#333;}#mermaid-svg-28QoL8aHPGDaKQ0b .cluster-label span p{background-color:transparent;}#mermaid-svg-28QoL8aHPGDaKQ0b .label text,#mermaid-svg-28QoL8aHPGDaKQ0b span{fill:#333;color:#333;}#mermaid-svg-28QoL8aHPGDaKQ0b .node rect,#mermaid-svg-28QoL8aHPGDaKQ0b .node circle,#mermaid-svg-28QoL8aHPGDaKQ0b .node ellipse,#mermaid-svg-28QoL8aHPGDaKQ0b .node polygon,#mermaid-svg-28QoL8aHPGDaKQ0b .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-28QoL8aHPGDaKQ0b .rough-node .label text,#mermaid-svg-28QoL8aHPGDaKQ0b .node .label text,#mermaid-svg-28QoL8aHPGDaKQ0b .image-shape .label,#mermaid-svg-28QoL8aHPGDaKQ0b .icon-shape .label{text-anchor:middle;}#mermaid-svg-28QoL8aHPGDaKQ0b .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-28QoL8aHPGDaKQ0b .rough-node .label,#mermaid-svg-28QoL8aHPGDaKQ0b .node .label,#mermaid-svg-28QoL8aHPGDaKQ0b .image-shape .label,#mermaid-svg-28QoL8aHPGDaKQ0b .icon-shape .label{text-align:center;}#mermaid-svg-28QoL8aHPGDaKQ0b .node.clickable{cursor:pointer;}#mermaid-svg-28QoL8aHPGDaKQ0b .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-28QoL8aHPGDaKQ0b .arrowheadPath{fill:#333333;}#mermaid-svg-28QoL8aHPGDaKQ0b .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-28QoL8aHPGDaKQ0b .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-28QoL8aHPGDaKQ0b .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-28QoL8aHPGDaKQ0b .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-28QoL8aHPGDaKQ0b .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-28QoL8aHPGDaKQ0b .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-28QoL8aHPGDaKQ0b .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-28QoL8aHPGDaKQ0b .cluster text{fill:#333;}#mermaid-svg-28QoL8aHPGDaKQ0b .cluster span{color:#333;}#mermaid-svg-28QoL8aHPGDaKQ0b div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-28QoL8aHPGDaKQ0b .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-28QoL8aHPGDaKQ0b rect.text{fill:none;stroke-width:0;}#mermaid-svg-28QoL8aHPGDaKQ0b .icon-shape,#mermaid-svg-28QoL8aHPGDaKQ0b .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-28QoL8aHPGDaKQ0b .icon-shape p,#mermaid-svg-28QoL8aHPGDaKQ0b .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-28QoL8aHPGDaKQ0b .icon-shape .label rect,#mermaid-svg-28QoL8aHPGDaKQ0b .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-28QoL8aHPGDaKQ0b .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-28QoL8aHPGDaKQ0b .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-28QoL8aHPGDaKQ0b :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>800kHz \u4f4d\u6d41<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>\u8f6c\u53d1\u5269\u4f59\u4f4d\u6d41<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>&#8230;<\/p>\n<p><\/span><\/p>\n<p>           <span class=\"nodeLabel\"><\/p>\n<p>\u706f\u73e0\u5185\u90e8<\/p>\n<p><\/span><\/p>\n<p>           <span class=\"edgeLabel\"><\/span><\/p>\n<p>           <span class=\"edgeLabel\"><\/span><\/p>\n<p>           <span class=\"nodeLabel\"><\/p>\n<p>\u63a7\u5236IC\u622a\u7559 24bit (G,R,B)<\/p>\n<p><\/span><\/p>\n<p>           <span class=\"nodeLabel\"><\/p>\n<p>\u5185\u7f6e\u6052\u6d41PWM \u8c03\u5149<\/p>\n<p><\/span><\/p>\n<p>           <span class=\"nodeLabel\"><\/p>\n<p>DOUT \u6574\u5f62\u8f6c\u53d1<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>STM32F103TIM2_CH1 (PA0)<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>WS2812B #1<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>WS2812B #2<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>WS2812B #N<\/p>\n<p><\/span><\/p>\n<h3>\u4e09\u3001\u65b9\u6848\u9009\u578b&#xff1a;\u4e3a\u4ec0\u4e48\u6700\u7ec8\u843d\u5230 PWM&#043;DMA<\/h3>\n<p>\u9a71\u52a8 WS2812B \u7684\u8def\u5b50\u4e0d\u6b62\u4e00\u6761&#xff0c;\u6211\u5b9e\u9645\u8bd5\u8fc7\u5176\u4e2d\u4e24\u6761\u624d\u5b9a\u4e0b\u6765\u3002<\/p>\n<table>\n<tr>\u5bf9\u6bd4\u7ef4\u5ea6GPIO \u5ef6\u65f6\u7ffb\u8f6cSPI \u6a21\u62dfPWM&#043;DMA&#xff08;\u672c\u65b9\u6848&#xff09;<\/tr>\n<tbody>\n<tr>\n<td>\u65f6\u5e8f\u7cbe\u5ea6<\/td>\n<td>\u53d7\u4e2d\u65ad\u5f71\u54cd&#xff0c;\u6296\u52a8 \u00b1150ns<\/td>\n<td>\u4f9d\u8d56 SPI \u65f6\u949f&#xff0c;\u4f4d\u5bbd\u56fa\u5b9a<\/td>\n<td>\u786c\u4ef6\u751f\u6210&#xff0c;\u6296\u52a8 \u2264\u00b140ns<\/td>\n<\/tr>\n<tr>\n<td>CPU \u5360\u7528&#xff08;60 \u706f&#xff09;<\/td>\n<td>92%<\/td>\n<td>\u4e2d\u7b49&#xff08;\u5360\u7528 SPI \u5916\u8bbe&#xff09;<\/td>\n<td>1.3%<\/td>\n<\/tr>\n<tr>\n<td>\u4e0e RTOS \u5171\u5b58<\/td>\n<td>\u5dee&#xff08;\u5173\u4e2d\u65ad\u624d\u52c9\u5f3a\u7a33&#xff09;<\/td>\n<td>\u4e00\u822c<\/td>\n<td>\u597d&#xff08;\u5b8c\u5168\u786c\u4ef6\u5316&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u5360\u7528\u5916\u8bbe<\/td>\n<td>\u65e0<\/td>\n<td>\u72ec\u5360\u4e00\u4e2a SPI<\/td>\n<td>\u5360\u7528 1 \u4e2a\u5b9a\u65f6\u5668 &#043; 1 \u6761 DMA<\/td>\n<\/tr>\n<tr>\n<td>\u4ee3\u7801\u590d\u6742\u5ea6<\/td>\n<td>\u4f4e<\/td>\n<td>\u4e2d<\/td>\n<td>\u4e2d<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u65b9\u6848\u7ea7\u51b3\u7b56\u7684\u7406\u7531&#xff1a;GPIO \u5ef6\u65f6\u7684\u81f4\u547d\u4f24\u4e0d\u662f&#034;\u6162&#034;&#xff0c;\u800c\u662f&#034;\u4e0d\u786e\u5b9a&#034;\u2014\u2014\u53ea\u8981\u6709\u4e00\u4e2a\u4e2d\u65ad\u8fdb\u6765&#xff0c;\u65f6\u5e8f\u5c31\u5d29&#xff1b;SPI \u6a21\u62df\u65b9\u6848\u5219\u8981\u5360\u7528\u4e00\u6574\u6761 SPI&#xff0c;\u4e14 WS2812B \u5bf9 SPI \u65f6\u949f\u7684\u6574\u6570\u500d\u5173\u7cfb\u5f88\u654f\u611f&#xff08;3 \u4f4d SPI \u8868\u793a 1 \u4f4d WS2812 \u65f6&#xff0c;SPI \u65f6\u949f\u5fc5\u987b\u662f 2.4MHz \u7684\u6574\u6570\u500d&#xff09;&#xff0c;\u7a0d\u6709\u504f\u5dee\u5c31\u9519\u7801\u3002PWM&#043;DMA \u628a&#034;\u751f\u6210\u6ce2\u5f62&#034;\u8fd9\u4ef6\u4e8b\u5f7b\u5e95\u4ea4\u7ed9\u786c\u4ef6&#xff1a;\u5b9a\u65f6\u5668\u8d1f\u8d23\u8282\u62cd&#xff0c;DMA \u8d1f\u8d23\u6362\u5b50\u5f39&#xff0c;CPU \u53ea\u9700\u8981\u5728\u540e\u53f0\u51c6\u5907\u597d\u6570\u636e\u7f13\u51b2\u533a\u3002\u5728\u9700\u8981\u540c\u65f6\u8dd1\u4e32\u53e3\u3001ADC \u7684\u9879\u76ee\u91cc&#xff0c;\u8fd9\u4e2a\u4f18\u52bf\u662f\u51b3\u5b9a\u6027\u7684\u3002<\/p>\n<h3>\u56db\u3001\u786c\u4ef6\u4e0e\u65f6\u5e8f\u8bbe\u8ba1<\/h3>\n<h4>4.1 \u63a5\u7ebf\u4e0e\u7535\u5e73\u95e8\u69db&#xff08;\u6700\u5bb9\u6613\u7ffb\u8f66\u7684\u5730\u65b9&#xff09;<\/h4>\n<p>\u63a5\u7ebf\u672c\u8eab\u53ea\u6709\u4e09\u6839\u7ebf&#xff1a;<\/p>\n<ul>\n<li>VCC \u2192 5V \u7535\u6e90&#xff08;\u4e0d\u8981\u63a5 3.3V&#xff09;<\/li>\n<li>GND \u2192 \u4e0e\u4e3b\u63a7\u5171\u5730<\/li>\n<li>DIN \u2192 \u672c\u65b9\u6848\u63a5 PA0&#xff08;TIM2_CH1&#xff09;<\/li>\n<\/ul>\n<p>\u4f46\u8fd9\u91cc\u85cf\u7740\u4e00\u4e2a\u51e0\u4e4e\u4eba\u4eba\u90fd\u4f1a\u8e29\u7684\u5751&#xff1a;WS2812B \u7684\u6570\u636e\u624b\u518c\u89c4\u5b9a\u8f93\u5165\u9ad8\u7535\u5e73\u95e8\u69db VIH &#061; 0.7 \u00d7 VDD\u3002\u5f53\u706f\u5e26\u7528 5V \u4f9b\u7535\u65f6&#xff0c;VIH &#061; 3.5V&#xff0c;\u800c STM32F103 \u7684\u63a8\u633d\u8f93\u51fa\u9ad8\u7535\u5e73\u53ea\u6709\u7ea6 3.3V&#xff08;\u751a\u81f3\u66f4\u4f4e&#xff09;\u3002\u8fd9\u610f\u5473\u7740 3.3V \u7684 MCU \u76f4\u63a5\u9a71\u52a8 5V \u706f\u5e26&#xff0c;\u903b\u8f91\u9ad8\u7535\u5e73\u5176\u5b9e\u662f&#034;\u4e0d\u8fbe\u6807&#034;\u7684\u3002<\/p>\n<p>\u5b9e\u8df5\u4e2d\u5b83\u53ef\u80fd&#034;\u6709\u65f6\u5019\u80fd\u4eae&#034;&#xff0c;\u8fd9\u66f4\u5413\u4eba\u3002\u6211\u7b2c\u4e00\u7248\u76f4\u63a5\u5bf9\u63a5&#xff0c;\u5ba4\u6e29\u4e0b 60 \u706f\u6b63\u5e38&#xff0c;\u624b\u4e00\u78b0\u6570\u636e\u7ebf\u5c31\u95ea&#xff0c;\u9760\u8fd1\u7535\u673a\u9a71\u52a8\u677f\u65f6\u6574\u6761\u706f\u5e26\u4e71\u8272\u2014\u2014\u95ee\u9898\u5c31\u662f\u7535\u5e73\u88d5\u91cf\u4e0d\u8db3&#xff0c;\u7a0d\u6709\u5e72\u6270\u5c31\u8de8\u4e0d\u8fc7\u9608\u503c\u3002<\/p>\n<p>\u4e09\u79cd\u5904\u7406\u65b9\u5f0f&#xff0c;\u6309\u63a8\u8350\u5ea6\u6392\u5e8f&#xff1a;<\/p>\n<li>\u7535\u5e73\u8f6c\u6362\u82af\u7247&#xff08;\u9996\u9009&#xff09;&#xff1a;74HCT245 \u6216 74AHCT1G125&#xff0c;\u628a 3.3V \u62ac\u5230 5V&#xff0c;\u6700\u7a33\u3002<\/li>\n<li>\u6570\u636e\u7ebf\u4e32\u8054\u7535\u963b&#xff1a;\u5728 DIN \u524d\u4e32 220~470\u03a9&#xff0c;\u51cf\u5c0f\u53cd\u5c04&#xff0c;\u6709\u4e00\u5b9a\u7f13\u89e3\u4f46\u4e0d\u662f\u6839\u6cbb\u3002<\/li>\n<li>\u964d\u4f4e\u706f\u5e26\u4f9b\u7535\u5230 4.5V&#xff1a;\u6b64\u65f6 VIH&#061;3.15V&#xff0c;\u52c9\u5f3a\u843d\u5728 3.3V \u4ee5\u5185&#xff0c;\u5c5e\u4e8e&#034;\u7701\u6210\u672c\u4f46\u4e0d\u63a8\u8350&#034;\u7684\u59a5\u534f\u505a\u6cd5\u3002<\/li>\n<h4>4.2 \u5b9a\u65f6\u5668\u53c2\u6570\u63a8\u5bfc&#xff08;\u914d\u7f6e\u7ea7\u51b3\u7b56&#xff09;<\/h4>\n<p>\u76ee\u6807&#xff1a;\u4f4d\u5468\u671f 1.25\u00b5s&#xff0c;\u5373 800kHz\u3002TIM2 \u6302\u5728 APB1 \u4e0a&#xff0c;APB1 \u5206\u9891\u7cfb\u6570\u4e3a 2 \u65f6&#xff0c;\u5b9a\u65f6\u5668\u65f6\u949f\u662f APB1 \u65f6\u949f\u7684 2 \u500d&#xff0c;\u4e5f\u5c31\u662f 72MHz&#xff08;\u8fd9\u4e00\u70b9 CubeMX \u7684\u65f6\u949f\u6811\u4e0a\u4f1a\u663e\u793a \u00d72&#xff0c;\u522b\u770b\u6210 36MHz&#xff09;\u3002\u53d6 PSC&#061;0&#xff0c;\u5219\u8ba1\u6570\u9891\u7387 72MHz&#xff0c;\u5355 tick &#061; 13.889ns\u3002<\/p>\n<p>ARR &#061; 72,000,000 \/ 800,000 &#8211; 1 &#061; 89      \/\/ \u5468\u671f &#061; 90 tick \u00d7 13.889ns &#061; 1250ns \u2713<br \/>\nCCR_0 &#061; 400ns \/ 13.889ns \u2248 29            \/\/ \u5b9e\u6d4b 29 \u00d7 13.889 &#061; 402.8ns<br \/>\nCCR_1 &#061; 800ns \/ 13.889ns \u2248 58            \/\/ \u5b9e\u6d4b 58 \u00d7 13.889 &#061; 805.6ns<br \/>\nCCR_RESET &#061; 0                            \/\/ \u590d\u4f4d\u671f\u95f4\u8f93\u51fa\u6052\u4f4e<\/p>\n<p>\u5bf9\u5e94\u7684\u5bc4\u5b58\u5668\u6620\u5c04\u5982\u4e0b&#xff0c;\u5373\u4f7f\u4e0d\u7528 CubeMX \u4e5f\u80fd\u7167\u7740\u914d\u7f6e&#xff1a;<\/p>\n<table>\n<tr>CubeMX \u914d\u7f6e\u9879\u503c\u5bf9\u5e94\u5bc4\u5b58\u5668\u4f4d\/\u5b57\u6bb5<\/tr>\n<tbody>\n<tr>\n<td>Prescaler<\/td>\n<td>0<\/td>\n<td>TIM2_PSC<\/td>\n<td>PSC[15:0]&#061;0<\/td>\n<\/tr>\n<tr>\n<td>Counter Period (ARR)<\/td>\n<td>89<\/td>\n<td>TIM2_ARR<\/td>\n<td>ARR&#061;89<\/td>\n<\/tr>\n<tr>\n<td>PWM Mode<\/td>\n<td>PWM Mode 1<\/td>\n<td>TIM2_CCMR1<\/td>\n<td>OC1M[2:0]&#061;110<\/td>\n<\/tr>\n<tr>\n<td>Output Compare Preload<\/td>\n<td>Enable<\/td>\n<td>TIM2_CCMR1<\/td>\n<td>OC1PE&#061;1&#xff08;\u5fc5\u987b\u5f00&#xff0c;\u5426\u5219 CCR \u6539\u5199\u4f1a\u6495\u88c2\u5f53\u524d\u5468\u671f&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>CH Polarity<\/td>\n<td>High<\/td>\n<td>TIM2_CCER<\/td>\n<td>CC1P&#061;0<\/td>\n<\/tr>\n<tr>\n<td>Counter Mode<\/td>\n<td>Up<\/td>\n<td>TIM2_CR1<\/td>\n<td>CMS&#061;00, DIR&#061;0<\/td>\n<\/tr>\n<tr>\n<td>Update DMA Request<\/td>\n<td>Enable<\/td>\n<td>TIM2_DIER<\/td>\n<td>UDE&#061;1&#xff08;\u5173\u952e&#xff1a;\u8ba9\u66f4\u65b0\u4e8b\u4ef6\u89e6\u53d1 DMA&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>DMA Direction<\/td>\n<td>Memory\u2192Peripheral<\/td>\n<td>DMA1_CCR2<\/td>\n<td>DIR&#061;01<\/td>\n<\/tr>\n<tr>\n<td>DMA Mode<\/td>\n<td>Normal&#xff08;\u5355\u5e27&#xff09;<\/td>\n<td>DMA1_CCR2<\/td>\n<td>CIRC&#061;0<\/td>\n<\/tr>\n<tr>\n<td>DMA Mem\/Periph Width<\/td>\n<td>Half Word (16bit)<\/td>\n<td>DMA1_CCR2<\/td>\n<td>MSIZE&#061;01, PSIZE&#061;01<\/td>\n<\/tr>\n<tr>\n<td>DMA Mem Increment<\/td>\n<td>Enable<\/td>\n<td>DMA1_CCR2<\/td>\n<td>MINC&#061;1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8fd9\u91cc\u6709\u4e00\u4e2a\u5fc5\u987b\u89e3\u91ca\u6e05\u695a\u7684\u914d\u7f6e\u7ea7\u51b3\u7b56&#xff1a;\u4e3a\u4ec0\u4e48\u7528 TIM2 \u7684\u66f4\u65b0\u4e8b\u4ef6&#xff08;Update&#xff09;\u89e6\u53d1 DMA&#xff0c;\u800c\u4e0d\u662f\u901a\u9053\u6bd4\u8f83\u4e8b\u4ef6&#xff1f;\u56e0\u4e3a\u66f4\u65b0\u4e8b\u4ef6\u6bcf\u4e2a\u4f4d\u5468\u671f\u7a33\u5b9a\u4ea7\u751f\u4e00\u6b21&#xff0c;\u6b63\u597d\u5bf9\u5e94&#034;\u6362\u4e00\u4e2a CCR \u503c&#034;\u7684\u8282\u62cd&#xff1b;\u800c\u6bd4\u8f83\u4e8b\u4ef6\u4f1a\u548c PWM \u8f93\u51fa\u7684\u8fb9\u6cbf\u8026\u5408&#xff0c;\u4ea7\u751f\u989d\u5916\u8bf7\u6c42\u3002\u800c TIM2_UP \u5728 F103 \u4e0a\u56fa\u5b9a\u6620\u5c04\u5230 DMA1_Channel2&#xff08;RM0008 Table 78&#xff0c;DMA1 \u8bf7\u6c42\u6620\u5c04\u8868&#xff09;&#xff0c;\u6ca1\u6709\u4efb\u4f55\u8f6f\u4ef6\u53ef\u9009\u7684\u4f59\u5730\u2014\u2014\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u672c\u65b9\u6848\u5fc5\u987b\u7528 DMA1_Channel2&#xff0c;\u4e0d\u80fd\u968f\u624b\u6362\u901a\u9053&#xff1a;<\/p>\n<table>\n<tr>DMA1 \u901a\u9053\u90e8\u5206\u56fa\u5b9a\u6620\u5c04\u5916\u8bbe&#xff08;RM0008 Table 78&#xff09;\u672c\u65b9\u6848<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">Channel 1<\/td>\n<td>ADC1 \/ TIM2_CH3 \/ TIM4_CH1<\/td>\n<td align=\"center\">\u5426<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Channel 2<\/td>\n<td>SPI1_RX \/ TIM1_CH1 \/ TIM2_UP \/ TIM3_CH3<\/td>\n<td align=\"center\">\u662f<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Channel 3<\/td>\n<td>SPI1_TX \/ TIM1_CH2 \/ TIM3_CH4<\/td>\n<td align=\"center\">\u5426<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Channel 5<\/td>\n<td>USART1_RX \/ TIM1_UP \/ TIM2_CH1<\/td>\n<td align=\"center\">\u5426<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Channel 7<\/td>\n<td>USART2_TX \/ TIM2_CH2 \/ TIM2_CH4<\/td>\n<td align=\"center\">\u5426<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6ce8\u610f&#xff1a;DMA1_Channel2 \u540c\u65f6\u662f SPI1_RX \u7684\u6620\u5c04\u901a\u9053\u3002\u5982\u679c\u4f60\u9879\u76ee\u91cc\u8fd8\u7528\u4e86 SPI1 \u63a5\u6536&#xff0c;\u5c31\u4f1a\u548c\u706f\u5e26\u62a2\u901a\u9053&#xff0c;\u5fc5\u987b\u6362\u7528 TIM3\/TIM4 \u7684\u66f4\u65b0\u4e8b\u4ef6\u3002<\/p>\n<h3>\u4e94\u3001PWM&#043;DMA \u7684\u786c\u4ef6\u6d41\u6c34\u7ebf\u6a21\u578b<\/h3>\n<p>\u7406\u89e3\u8fd9\u5957\u673a\u5236\u7684\u5173\u952e&#xff0c;\u662f\u628a&#034;\u751f\u6210\u4f4d\u6d41&#034;\u62c6\u6210\u4e09\u4e2a\u6d41\u6c34\u7ea7&#xff1a;<\/p>\n<li>\u7f16\u7801\u7ea7&#xff08;CPU \u4e00\u6b21&#xff09;&#xff1a;\u628a\u989c\u8272\u6570\u636e\u9884\u5148\u7ffb\u8bd1\u6210\u4e00\u4e32 CCR \u503c&#xff0c;\u5b58\u8fdb\u5185\u5b58\u7f13\u51b2\u533a\u30020 \u7801\u5b58 29\u30011 \u7801\u5b58 58\u3001\u590d\u4f4d\u6bb5\u5b58 0\u3002<\/li>\n<li>\u642c\u8fd0\u7ea7&#xff08;DMA&#xff09;&#xff1a;\u6bcf\u4e2a\u4f4d\u5468\u671f&#xff08;1250ns&#xff09;\u5230\u6765\u65f6&#xff0c;\u5b9a\u65f6\u5668\u66f4\u65b0\u4e8b\u4ef6\u53d1\u51fa\u4e00\u6b21 DMA \u8bf7\u6c42&#xff0c;DMA \u4ece\u7f13\u51b2\u533a\u53d6\u4e00\u4e2a\u534a\u5b57&#xff08;16bit&#xff09;\u5199\u5165 TIM2-&gt;CCR1\u3002<\/li>\n<li>\u8f93\u51fa\u7ea7&#xff08;TIM&#xff09;&#xff1a;\u5b9a\u65f6\u5668\u6839\u636e\u65b0\u7684 CCR \u503c\u4ea7\u751f\u5bf9\u5e94\u5bbd\u5ea6\u7684\u9ad8\u7535\u5e73&#xff0c;\u4ece PA0 \u8f93\u51fa\u3002<\/li>\n<p>\u6574\u4e2a\u8fc7\u7a0b CPU \u53ea\u53c2\u4e0e\u7b2c 1 \u7ea7&#xff0c;\u4e14\u53ef\u4ee5\u63d0\u524d\u7f16\u7801\u4e0b\u4e00\u5e27&#xff1b;\u7b2c 2\u30013 \u7ea7\u7eaf\u786c\u4ef6&#xff0c;\u4e2d\u65ad\u6765\u4e86\u4e5f\u7167\u8dd1\u4e0d\u8bef\u3002<\/p>\n<p>     WS2812B DIN<\/p>\n<p>     TIM2 (PWM)<\/p>\n<p>     DMA1_Channel2<\/p>\n<p>     DMA \u7f13\u51b2 (CCR \u5e8f\u5217)<\/p>\n<p>     CPU \u4e3b\u5faa\u73af<\/p>\n<p>      WS2812B DIN<\/p>\n<p>      TIM2 (PWM)<\/p>\n<p>      DMA1_Channel2<\/p>\n<p>      DMA \u7f13\u51b2 (CCR \u5e8f\u5217)<\/p>\n<p>      CPU \u4e3b\u5faa\u73af<\/p>\n<p>  #mermaid-svg-Ysq4uLU3V7he9Zvy{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Ysq4uLU3V7he9Zvy .error-icon{fill:#552222;}#mermaid-svg-Ysq4uLU3V7he9Zvy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Ysq4uLU3V7he9Zvy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Ysq4uLU3V7he9Zvy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Ysq4uLU3V7he9Zvy .marker.cross{stroke:#333333;}#mermaid-svg-Ysq4uLU3V7he9Zvy svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Ysq4uLU3V7he9Zvy p{margin:0;}#mermaid-svg-Ysq4uLU3V7he9Zvy .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Ysq4uLU3V7he9Zvy text.actor&gt;tspan{fill:black;stroke:none;}#mermaid-svg-Ysq4uLU3V7he9Zvy .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Ysq4uLU3V7he9Zvy .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-Ysq4uLU3V7he9Zvy .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Ysq4uLU3V7he9Zvy .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Ysq4uLU3V7he9Zvy #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Ysq4uLU3V7he9Zvy .sequenceNumber{fill:white;}#mermaid-svg-Ysq4uLU3V7he9Zvy #sequencenumber{fill:#333;}#mermaid-svg-Ysq4uLU3V7he9Zvy #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Ysq4uLU3V7he9Zvy .messageText{fill:#333;stroke:none;}#mermaid-svg-Ysq4uLU3V7he9Zvy .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Ysq4uLU3V7he9Zvy .labelText,#mermaid-svg-Ysq4uLU3V7he9Zvy .labelText&gt;tspan{fill:black;stroke:none;}#mermaid-svg-Ysq4uLU3V7he9Zvy .loopText,#mermaid-svg-Ysq4uLU3V7he9Zvy .loopText&gt;tspan{fill:black;stroke:none;}#mermaid-svg-Ysq4uLU3V7he9Zvy .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Ysq4uLU3V7he9Zvy .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Ysq4uLU3V7he9Zvy .noteText,#mermaid-svg-Ysq4uLU3V7he9Zvy .noteText&gt;tspan{fill:black;stroke:none;}#mermaid-svg-Ysq4uLU3V7he9Zvy .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Ysq4uLU3V7he9Zvy .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Ysq4uLU3V7he9Zvy .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Ysq4uLU3V7he9Zvy .actorPopupMenu{position:absolute;}#mermaid-svg-Ysq4uLU3V7he9Zvy .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 \/ 0.4));}#mermaid-svg-Ysq4uLU3V7he9Zvy .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Ysq4uLU3V7he9Zvy .actor-man circle,#mermaid-svg-Ysq4uLU3V7he9Zvy line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Ysq4uLU3V7he9Zvy :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>    loop<\/p>\n<p>     [\u6bcf\u4e2a\u4f4d\u5468\u671f 1250ns]<\/p>\n<p>     \u7f13\u51b2\u8017\u5c3d\u540e\u8f93\u51fa\u590d\u4f4d\u4f4e\u7535\u5e73<\/p>\n<p>   \u7f16\u7801 24\u00d7N &#043; \u590d\u4f4d \u4f4d\u5e8f\u5217<\/p>\n<p>   HAL_TIM_PWM_Start_DMA \u542f\u52a8<\/p>\n<p>   \u66f4\u65b0\u4e8b\u4ef6 \u2192 \u89e6\u53d1\u8bf7\u6c42<\/p>\n<p>   \u8bfb\u53d6\u4e0b\u4e00\u4e2a CCR \u503c<\/p>\n<p>   \u5199\u5165 TIM2-&gt;&gt;CCR1<\/p>\n<p>   \u8f93\u51fa\u5bf9\u5e94\u5bbd\u5ea6\u9ad8\u7535\u5e73<\/p>\n<p>   \u4f20\u8f93\u5b8c\u6210\u4e2d\u65ad (TC)<\/p>\n<p>   \u56de\u8c03&#xff0c;\u5141\u8bb8\u7f16\u7801\u4e0b\u4e00\u5e27<\/p>\n<h3>\u516d\u3001\u6570\u636e\u7f16\u7801&#xff1a;GRB \u91cd\u6392\u3001\u4f3d\u9a6c\u6821\u6b63\u4e0e\u9650\u6d41<\/h3>\n<h4>6.1 \u4f4d\u7f16\u7801\u4e0e\u590d\u4f4d\u6bb5<\/h4>\n<p>\u7f16\u7801\u51fd\u6570\u628a\u6bcf\u4e2a byte \u6309 MSB \u4f18\u5148\u5c55\u5f00\u6210 8 \u4e2a CCR \u503c\u3002\u6ce8\u610f WS2812B \u7684\u53d1\u9001\u987a\u5e8f\u662f G\u2192R\u2192B&#xff0c;\u4e0d\u662f RGB&#xff0c;\u8fd9\u4e2a\u987a\u5e8f\u5199\u53cd\u4e86\u4f1a\u5f97\u5230&#034;\u7ea2\u84dd\u4e92\u6362&#034;\u7684\u8be1\u5f02\u6548\u679c\u3002<\/p>\n<p><span class=\"token comment\">\/* WS2812 \u53c2\u6570&#xff1a;72MHz \u65f6\u949f&#xff0c;ARR&#061;89 \u2192 800kHz *\/<\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">WS_BIT0<\/span>       <span class=\"token expression\"><span class=\"token number\">29u<\/span>   <\/span><span class=\"token comment\">\/* T0H \u2248 402.8ns *\/<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">WS_BIT1<\/span>       <span class=\"token expression\"><span class=\"token number\">58u<\/span>   <\/span><span class=\"token comment\">\/* T1H \u2248 805.6ns *\/<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">WS_RESET_BITS<\/span> <span class=\"token expression\"><span class=\"token number\">50u<\/span>   <\/span><span class=\"token comment\">\/* 50 \u00d7 1.25\u00b5s &#061; 62.5\u00b5s \u4f4e\u7535\u5e73 *\/<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/* \u5355\u5e27\u7f13\u51b2&#xff1a;24 bit\/LED &#043; \u590d\u4f4d\u6bb5&#xff0c;\u9759\u6001\u5206\u914d\u907f\u514d\u5806\u788e\u7247 *\/<\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">LED_NUM<\/span>       <span class=\"token expression\"><span class=\"token number\">60u<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">WS_BUF_LEN<\/span>    <span class=\"token expression\"><span class=\"token punctuation\">(<\/span>LED_NUM <span class=\"token operator\">*<\/span> <span class=\"token number\">24u<\/span> <span class=\"token operator\">&#043;<\/span> WS_RESET_BITS<span class=\"token punctuation\">)<\/span><\/span><\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">uint16_t<\/span> ws_dma_buf<span class=\"token punctuation\">[<\/span>WS_BUF_LEN<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token keyword\">volatile<\/span> <span class=\"token class-name\">uint8_t<\/span> ws_busy <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0u<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/* DMA \u4f20\u8f93\u4e2d\u6807\u5fd7&#xff0c;\u4e3b\u5faa\u73af\u4e0e\u56de\u8c03\u5171\u4eab *\/<\/span><\/p>\n<p><span class=\"token comment\">\/* \u628a\u4e00\u4e2a byte \u5c55\u5f00\u4e3a 8 \u4e2a CCR \u503c&#xff08;MSB \u4f18\u5148&#xff09; *\/<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">uint16_t<\/span> <span class=\"token operator\">*<\/span><span class=\"token function\">encode_byte<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint16_t<\/span> <span class=\"token operator\">*<\/span>p<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">uint8_t<\/span> v<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">7<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&gt;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#8212;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token operator\">*<\/span>p<span class=\"token operator\">&#043;&#043;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>v <span class=\"token operator\">&amp;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">1u<\/span> <span class=\"token operator\">&lt;&lt;<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> WS_BIT1 <span class=\"token operator\">:<\/span> WS_BIT0<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> p<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/* \u7f16\u7801\u6574\u5e27&#xff1a;GRB \u987a\u5e8f &#043; \u590d\u4f4d\u6bb5\u6e05\u96f6 *\/<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">ws2812_encode<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> <span class=\"token class-name\">uint8_t<\/span> grb<span class=\"token punctuation\">[<\/span>LED_NUM<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token class-name\">uint16_t<\/span> <span class=\"token operator\">*<\/span>p <span class=\"token operator\">&#061;<\/span> ws_dma_buf<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint32_t<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> LED_NUM<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>   <span class=\"token comment\">\/* \u9632\u8d8a\u754c&#xff1a;\u6309 LED_NUM \u8fb9\u754c\u5faa\u73af *\/<\/span><br \/>\n        p <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">encode_byte<\/span><span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">,<\/span> grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>         <span class=\"token comment\">\/* G *\/<\/span><br \/>\n        p <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">encode_byte<\/span><span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">,<\/span> grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>         <span class=\"token comment\">\/* R *\/<\/span><br \/>\n        p <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">encode_byte<\/span><span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">,<\/span> grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>         <span class=\"token comment\">\/* B *\/<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint32_t<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> WS_RESET_BITS<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token operator\">*<\/span>p<span class=\"token operator\">&#043;&#043;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0u<\/span><span class=\"token punctuation\">;<\/span>                              <span class=\"token comment\">\/* \u590d\u4f4d\u6bb5&#xff1a;\u8f93\u51fa\u6052\u4f4e *\/<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>6.2 \u5bb9\u6613\u9057\u6f0f\u7684\u6b65\u9aa4&#xff1a;DMA \u542f\u52a8\u524d\u7684&#034;\u9884\u88c5\u8f7d&#034;<\/h4>\n<p>CubeMX \u751f\u6210\u7684\u4ee3\u7801\u4e0d\u4f1a\u5e2e\u4f60\u5904\u7406\u4e00\u4e2a\u9690\u853d\u95ee\u9898&#xff1a;DMA \u4f7f\u80fd\u4e0e\u5b9a\u65f6\u5668\u542f\u52a8\u7684\u987a\u5e8f\u3002\u5982\u679c\u5148 HAL_TIM_PWM_Start_DMA() \u5185\u90e8\u521a\u6253\u5f00 DMA \u8bf7\u6c42&#xff0c;\u7d27\u63a5\u7740\u5b9a\u65f6\u5668\u5df2\u7ecf\u5f00\u59cb\u8ba1\u6570&#xff0c;\u7b2c\u4e00\u6b21\u66f4\u65b0\u4e8b\u4ef6\u7684 DMA \u8bf7\u6c42\u53ef\u80fd\u5728\u8ba1\u6570\u5668\u5df2\u7ecf&#034;\u62a2\u8dd1&#034;\u8fc7\u4e00\u4e2a\u5468\u671f\u540e\u624d\u88ab\u670d\u52a1&#xff0c;\u5bfc\u81f4\u7b2c\u4e00\u4e2a CCR \u503c\u88ab\u541e\u6389\u2014\u2014\u76f4\u63a5\u75c7\u72b6\u5c31\u662f\u9996\u706f\u989c\u8272\u5f02\u5e38\u3001\u6574\u6761\u706f\u5e26\u9519\u4f4d\u4e00\u4f4d\u3002\u7b2c\u516d\u8282\u7684\u5931\u8d25\u8def\u5f84\u4f1a\u5b8c\u6574\u590d\u76d8\u8fd9\u4e2a\u95ee\u9898&#xff0c;\u8fd9\u91cc\u5148\u7ed9\u51fa\u7ed3\u8bba\u6027\u7684\u6b63\u786e\u987a\u5e8f&#xff1a;<\/p>\n<p><span class=\"token comment\">\/* \u6b63\u786e\u542f\u52a8\u987a\u5e8f&#xff1a;\u5148\u6e05\u6807\u5fd7\u3001\u518d\u4f7f\u80fd DMA \u8bf7\u6c42\u3001\u6700\u540e\u751f\u6210\u4e00\u6b21 UG \u9884\u88c5\u8f7d *\/<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">ws2812_start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">HAL_TIM_PWM_Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_CHANNEL_1<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> HAL_OK<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>                          <span class=\"token comment\">\/* PWM \u542f\u52a8\u5931\u8d25&#xff0c;\u76f4\u63a5\u8fd4\u56de&#xff0c;\u4e0d\u8981\u7ee7\u7eed *\/<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token function\">__HAL_TIM_CLEAR_FLAG<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_FLAG_UPDATE<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">__HAL_TIM_SET_COUNTER<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">__HAL_TIM_ENABLE_DMA<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_DMA_UPDATE<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token comment\">\/* \u624b\u52a8\u89e6\u53d1\u4e00\u6b21 UG&#xff0c;\u9884\u88c5\u8f7d\u9996\u4e2a CCR&#xff0c;\u907f\u514d\u9996\u706f\u9519\u4f4d&#xff08;\u8be6\u89c1\u7b2c\u4e03\u8282&#xff09; *\/<\/span><br \/>\n    <span class=\"token function\">HAL_TIM_GenerateEvent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_EVENTSOURCE_UPDATE<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/* \u5355\u5e27\u53d1\u9001&#xff1a;\u8fd4\u56de 0 \u8868\u793a\u6210\u529f\u5165\u961f&#xff0c;-1 \u8868\u793a DMA \u5fd9 *\/<\/span><br \/>\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">ws2812_show<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> <span class=\"token class-name\">uint8_t<\/span> grb<span class=\"token punctuation\">[<\/span>LED_NUM<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>ws_busy<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>                          <span class=\"token comment\">\/* \u4e0a\u4e00\u5e27\u672a\u53d1\u5b8c&#xff0c;\u4e22\u5f03\u672c\u5e27 *\/<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    ws_busy <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1u<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">ws2812_encode<\/span><span class=\"token punctuation\">(<\/span>grb<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">HAL_TIM_PWM_Start_DMA<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_CHANNEL_1<span class=\"token punctuation\">,<\/span><br \/>\n                              <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint32_t<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span>ws_dma_buf<span class=\"token punctuation\">,<\/span> WS_BUF_LEN<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> HAL_OK<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        ws_busy <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0u<\/span><span class=\"token punctuation\">;<\/span>                       <span class=\"token comment\">\/* \u542f\u52a8\u5931\u8d25\u56de\u6eda\u6807\u5fd7 *\/<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>6.3 \u4f3d\u9a6c\u6821\u6b63<\/h4>\n<p>\u4eba\u773c\u5bf9\u4eae\u5ea6\u7684\u611f\u77e5\u662f\u975e\u7ebf\u6027\u7684&#xff0c;\u76f4\u63a5\u7ebf\u6027\u6620\u5c04 0~255 \u4f1a\u8ba9\u4f4e\u4eae\u5ea6\u533a\u57df&#034;\u6324\u6210\u4e00\u56e2&#034;\u3001\u6e10\u53d8\u51fa\u73b0\u53f0\u9636\u3002WS2812B \u7684\u5178\u578b\u4f3d\u9a6c\u503c\u662f 2.2\u3002\u4e3a\u4e86\u907f\u514d\u8fd0\u884c\u65f6\u8c03\u7528 pow()&#xff08;\u6d6e\u70b9\u5f00\u9500\u5927\u4e14\u4e0d\u53ef\u9884\u6d4b&#xff09;&#xff0c;\u6211\u5728\u521d\u59cb\u5316\u65f6\u9884\u751f\u6210\u4e00\u5f20 256 \u5b57\u8282\u67e5\u627e\u8868&#xff1a;<\/p>\n<p><span class=\"token keyword\">static<\/span> <span class=\"token class-name\">uint8_t<\/span> gamma_lut<span class=\"token punctuation\">[<\/span><span class=\"token number\">256<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token function\">ws2812_build_gamma<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span> gamma<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">256<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">float<\/span> norm <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>i <span class=\"token operator\">\/<\/span> <span class=\"token number\">255.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">float<\/span> corrected <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">powf<\/span><span class=\"token punctuation\">(<\/span>norm<span class=\"token punctuation\">,<\/span> gamma<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">255.0f<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">0.5f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token comment\">\/* \u9632\u8d8a\u754c&#xff1a;\u6d6e\u70b9\u820d\u5165\u53ef\u80fd\u7565\u8d85 255 *\/<\/span><br \/>\n        gamma_lut<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>corrected <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">255.0f<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> <span class=\"token number\">255u<\/span> <span class=\"token operator\">:<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint8_t<\/span><span class=\"token punctuation\">)<\/span>corrected<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u8fd0\u884c\u65f6\u5c31\u53ea\u662f\u67e5\u8868&#xff0c;\u96f6\u6d6e\u70b9\u3002<\/p>\n<h4>6.4 \u5168\u5c40\u9650\u6d41&#xff08;\u4fdd\u62a4\u7535\u6e90&#xff09;<\/h4>\n<p>\u6bcf\u9897\u706f\u73e0\u4e09\u901a\u9053\u5168\u4eae\u7ea6 60mA&#xff0c;60 \u9897\u5c31\u662f 3.6A&#xff0c;\u666e\u901a USB \u53e3\u76f4\u63a5\u62c9\u7206\u3002\u5de5\u7a0b\u4e0a\u5fc5\u987b\u505a\u9650\u6d41&#xff1a;\u5148\u7edf\u8ba1\u6574\u5e27\u4eae\u5ea6\u603b\u548c&#xff0c;\u8d85\u8fc7\u9608\u503c\u5c31\u6309\u6bd4\u4f8b\u7f29\u653e\u3002<\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">LIMIT_MA<\/span>        <span class=\"token expression\"><span class=\"token number\">1800u<\/span>   <\/span><span class=\"token comment\">\/* \u76ee\u6807\u603b\u7535\u6d41\u4e0a\u9650 *\/<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">MA_PER_UNIT<\/span>     <span class=\"token expression\"><span class=\"token number\">20u<\/span>     <\/span><span class=\"token comment\">\/* \u6bcf\u5355\u4f4d\u4eae\u5ea6\u7ea6 20mA\/255 *\/<\/span><\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token function\">ws2812_clamp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint8_t<\/span> grb<span class=\"token punctuation\">[<\/span>LED_NUM<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token class-name\">uint32_t<\/span> sum <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0u<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint32_t<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> LED_NUM<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        sum <span class=\"token operator\">&#043;&#061;<\/span> grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;<\/span> grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;<\/span> grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token class-name\">uint32_t<\/span> est_ma <span class=\"token operator\">&#061;<\/span> sum <span class=\"token operator\">*<\/span> MA_PER_UNIT <span class=\"token operator\">\/<\/span> <span class=\"token number\">255u<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>est_ma <span class=\"token operator\">&lt;&#061;<\/span> LIMIT_MA<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>                              <span class=\"token comment\">\/* \u672a\u8d85\u9650&#xff0c;\u4e0d\u52a8 *\/<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token comment\">\/* \u7f29\u653e\u7cfb\u6570\u7528\u6574\u6570\u8fd0\u7b97&#xff0c;\u907f\u514d\u6d6e\u70b9 *\/<\/span><br \/>\n    <span class=\"token class-name\">uint32_t<\/span> scale <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint32_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint64_t<\/span><span class=\"token punctuation\">)<\/span>LIMIT_MA <span class=\"token operator\">*<\/span> <span class=\"token number\">255u<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token punctuation\">(<\/span>sum <span class=\"token operator\">*<\/span> MA_PER_UNIT <span class=\"token operator\">\/<\/span> <span class=\"token number\">255u<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1u<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint32_t<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> LED_NUM<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> c <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> c <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>c<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>c<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint8_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint32_t<\/span><span class=\"token punctuation\">)<\/span>grb<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>c<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">*<\/span> scale <span class=\"token operator\">\/<\/span> <span class=\"token number\">255u<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>\u4e03\u3001\u5931\u8d25\u8def\u5f84&#xff1a;\u9996\u706f\u989c\u8272\u9519\u4e71\u7684\u5b8c\u6574\u6392\u67e5<\/h3>\n<p>\u6587\u7ae0\u5199\u5230\u8fd9\u91cc&#xff0c;\u770b\u8d77\u6765\u4e00\u5207\u987a\u7406\u6210\u7ae0\u3002\u4f46\u771f\u5b9e\u8fc7\u7a0b\u5e76\u4e0d\u662f\u4ece\u6210\u529f\u5f00\u59cb\u7684\u3002<\/p>\n<p>\u75c7\u72b6&#xff1a;60 \u9897\u706f\u5e26&#xff0c;\u8bbe\u5b9a\u4e3a\u5168\u7ea2\u6eda\u52a8&#xff0c;\u4e0a\u7535\u540e\u53ea\u6709\u7b2c 1 \u9897\u706f\u989c\u8272\u4e0d\u5bf9&#xff08;\u663e\u793a\u6210\u4e0a\u4e00\u5e27\u7684\u6b8b\u8272&#xff09;&#xff0c;\u7b2c 2~60 \u9897\u5b8c\u5168\u6b63\u5e38\u3002\u53cd\u590d\u590d\u4f4d&#xff0c;\u6545\u969c 100% \u590d\u73b0\u4e14\u4f4d\u7f6e\u56fa\u5b9a\u3002<\/p>\n<p>\u5de5\u5177\u6d4b\u91cf&#xff1a;\u6211\u7528\u903b\u8f91\u5206\u6790\u4eea&#xff08;\u91c7\u6837\u7387 24MHz&#xff09;\u6293 PA0 \u7684\u6ce2\u5f62&#xff0c;\u628a\u7b2c\u4e00\u5e27\u4f4d\u6d41\u548c\u9884\u671f\u7f16\u7801\u9010\u4f4d\u5bf9\u6bd4\u3002<\/p>\n<p>\u7b2c\u4e00\u6b65\u5047\u8bbe&#xff1a;\u7f16\u7801\u51fd\u6570\u5199\u9519\u4e86&#xff1f;\u6211\u628a ws2812_encode() \u7684\u8f93\u51fa\u6253\u5370\u51fa\u6765&#xff0c;\u4e0e\u9884\u671f\u7684 CCR \u5e8f\u5217\u9010\u5b57\u8282\u6bd4\u5bf9\u2014\u2014\u5b8c\u5168\u4e00\u81f4&#xff0c;\u6392\u9664\u7f16\u7801\u95ee\u9898\u3002<\/p>\n<p>\u7b2c\u4e8c\u6b65\u5047\u8bbe&#xff1a;\u7f13\u51b2\u533a\u5c11\u88c5\u4e86\u4e00\u4e2a CCR&#xff0c;\u5bfc\u81f4\u6574\u4f53\u9519\u4f4d&#xff1f;\u5982\u679c\u5c11\u4e00\u4e2a&#xff0c;\u7b2c 1 \u9897\u4f1a\u663e\u793a\u6210&#034;\u5c11\u4e86\u6700\u9ad8\u4f4d&#034;&#xff0c;\u4f46\u5b9e\u6d4b\u7b2c 1 \u9897\u662f\u4e0a\u4e00\u5e27\u6b8b\u8272&#xff0c;\u800c\u4e0d\u662f&#034;\u4f4d\u79fb&#034;&#xff0c;\u65b9\u5411\u4e0d\u5bf9&#xff0c;\u6392\u9664\u3002<\/p>\n<p>\u5173\u952e\u53d1\u73b0&#xff1a;\u628a\u903b\u8f91\u5206\u6790\u4eea\u7684\u7b2c\u4e00\u5e27\u6ce2\u5f62\u653e\u5927\u540e\u770b\u5230\u2014\u2014\u5f00\u5934\u7684\u7b2c\u4e00\u4e2a\u4f4d\u5468\u671f&#xff0c;CCR \u5b9e\u9645\u4e0a\u7528\u7684\u662f\u4e0a\u4e00\u6b21\u4f20\u8f93\u6b8b\u7559\u7684\u503c&#xff0c;\u800c\u4e0d\u662f\u65b0\u7f16\u7801\u7684 WS_BIT1\u3002\u4e5f\u5c31\u662f\u8bf4&#xff0c;\u7b2c\u4e00\u4e2a\u66f4\u65b0\u4e8b\u4ef6\u7684 DMA \u8bf7\u6c42\u6ca1\u6709\u88ab\u670d\u52a1&#xff0c;PWM \u7528\u65e7 CCR \u8f93\u51fa\u4e86\u4e00\u4e2a\u4f4d\u5468\u671f\u3002<\/p>\n<p>\u6839\u56e0&#xff1a;HAL_TIM_PWM_Start_DMA() \u5185\u90e8\u4f1a\u5148\u4f7f\u80fd DMA \u8bf7\u6c42\u3001\u518d\u4f7f\u80fd\u8ba1\u6570\u5668\u3002\u4f46\u5982\u679c\u6b64\u524d\u5b9a\u65f6\u5668\u5df2\u7ecf\u88ab\u5176\u4ed6\u5730\u65b9\u542f\u52a8\u8fc7&#xff08;\u6216\u8ba1\u6570\u5668\u672a\u6e05\u96f6&#xff09;&#xff0c;\u8ba1\u6570\u5668\u53ef\u80fd\u5df2\u7ecf\u8d8a\u8fc7\u4e00\u4e2a\u66f4\u65b0\u70b9&#xff0c;\u7b2c\u4e00\u6b21 DMA \u8bf7\u6c42\u53d1\u751f\u5728\u4e00\u4e2a&#034;\u975e\u6cd5&#034;\u7684\u65f6\u523b&#xff0c;\u9996\u5b57\u8282\u88ab\u8fd9\u4e2a\u6b8b\u7559\u5468\u671f\u541e\u6389\u3002\u8fd9\u662f\u6211\u5b8c\u5168\u6ca1\u6709\u9884\u6599\u5230\u7684\u65f6\u5e8f\u7ade\u4e89&#xff0c;Google \u4e0a\u7c7b\u4f3c\u7684\u4e2d\u6587\u8d44\u6599\u51e0\u4e4e\u90fd\u53ea\u5b57\u672a\u63d0\u3002<\/p>\n<p>\u4fee\u590d&#xff1a;\u5728\u542f\u52a8\u524d\u624b\u52a8\u751f\u6210\u4e00\u6b21\u66f4\u65b0\u4e8b\u4ef6&#xff0c;\u5f3a\u5236\u9884\u88c5\u8f7d\u9996\u4e2a CCR&#xff0c;\u5e76\u786e\u4fdd\u8ba1\u6570\u5668\u4ece 0 \u5f00\u59cb&#xff1a;<\/p>\n<p><span class=\"token function\">__HAL_TIM_CLEAR_FLAG<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_FLAG_UPDATE<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token function\">__HAL_TIM_SET_COUNTER<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token function\">__HAL_TIM_ENABLE_DMA<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_DMA_UPDATE<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token function\">HAL_TIM_GenerateEvent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>htim2<span class=\"token punctuation\">,<\/span> TIM_EVENTSOURCE_UPDATE<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u9a8c\u8bc1&#xff1a;\u4fee\u6539\u540e\u903b\u8f91\u5206\u6790\u4eea\u663e\u793a\u7b2c\u4e00\u5e27\u9996\u4f4d\u5373\u4e3a\u6b63\u786e\u7684 805.6ns \u9ad8\u7535\u5e73&#xff0c;\u9996\u706f\u989c\u8272\u6062\u590d\u6b63\u5e38&#xff0c;\u8fde\u7eed\u5237\u65b0 10 \u4e07\u5e27\u96f6\u9519\u4f4d\u3002<\/p>\n<h3>\u516b\u3001\u6d4b\u8bd5\u9a8c\u8bc1<\/h3>\n<h4>8.1 \u65f6\u5e8f\u7cbe\u5ea6\u5b9e\u6d4b<\/h4>\n<p>\u7528\u903b\u8f91\u5206\u6790\u4eea&#xff08;24MHz \u91c7\u6837&#xff09;\u6d4b\u91cf 60 \u9897\u706f\u5e26\u8fde\u7eed\u5237\u65b0 1 \u4e07\u5e27\u7684\u6ce2\u5f62&#xff0c;\u7edf\u8ba1 T0H\/T1H \u7684\u5206\u5e03&#xff0c;\u5e76\u4e0e\u6570\u636e\u624b\u518c\u7406\u8bba\u503c\u548c\u5b9a\u65f6\u5668\u91cf\u5316\u503c\u5bf9\u7167&#xff1a;<\/p>\n<table>\n<tr>\u53c2\u6570\u6570\u636e\u624b\u518c\u5178\u578b\u503c\u5b9a\u65f6\u5668\u91cf\u5316\u7406\u8bba\u503c\u5b9e\u6d4b\u5747\u503c\u76f8\u5bf9\u7406\u8bba\u504f\u5dee\u6296\u52a8(\u5cf0\u5cf0)<\/tr>\n<tbody>\n<tr>\n<td>T0H<\/td>\n<td align=\"center\">400ns<\/td>\n<td align=\"center\">402.8ns<\/td>\n<td align=\"center\">403.1ns<\/td>\n<td align=\"center\">&#043;0.07%<\/td>\n<td align=\"center\">28ns<\/td>\n<\/tr>\n<tr>\n<td>T1H<\/td>\n<td align=\"center\">800ns<\/td>\n<td align=\"center\">805.6ns<\/td>\n<td align=\"center\">806.0ns<\/td>\n<td align=\"center\">&#043;0.05%<\/td>\n<td align=\"center\">33ns<\/td>\n<\/tr>\n<tr>\n<td>\u4f4d\u5468\u671f<\/td>\n<td align=\"center\">1250ns<\/td>\n<td align=\"center\">1250.0ns<\/td>\n<td align=\"center\">1250.4ns<\/td>\n<td align=\"center\">&#043;0.03%<\/td>\n<td align=\"center\">41ns<\/td>\n<\/tr>\n<tr>\n<td>\u590d\u4f4d\u4f4e\u7535\u5e73<\/td>\n<td align=\"center\">\u226550\u00b5s<\/td>\n<td align=\"center\">62.5\u00b5s<\/td>\n<td align=\"center\">62.6\u00b5s<\/td>\n<td align=\"center\">&#043;0.16%<\/td>\n<td align=\"center\">\u2014<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5bf9\u7167\u5206\u6790&#xff1a;\u524d\u4e24\u9879\u76f8\u5bf9\u624b\u518c\u5178\u578b\u503c\u7684\u504f\u5dee\u6765\u81ea\u5b9a\u65f6\u5668 13.889ns \u7684\u91cf\u5316\u6b65\u957f\u2014\u2014\u5355\u4e2a\u4f4d\u53ea\u80fd\u843d\u5728 13.889ns \u7684\u6574\u6570\u500d\u4e0a&#xff0c;\u53d6\u6574\u540e\u5fc5\u7136\u4e0e\u7406\u60f3\u503c\u6709\u96f6\u70b9\u51e0\u4e2a\u767e\u5206\u70b9\u7684\u504f\u5dee&#xff0c;\u8fd9\u662f\u79bb\u6563\u8ba1\u6570\u7684\u56fa\u6709\u5c5e\u6027&#xff0c;\u65e0\u6cd5\u7528\u8f6f\u4ef6\u6d88\u9664&#xff08;\u53ea\u80fd\u6362\u66f4\u9ad8\u4e3b\u9891\u6216\u66f4\u9ad8\u5206\u8fa8\u7387\u5b9a\u65f6\u5668&#xff09;\u3002\u4f4d\u5468\u671f\u7684 &#043;0.03% \u504f\u5dee\u5219\u6765\u81ea HSE \u6676\u632f\u5b9e\u9645\u9891\u7387&#xff08;\u6807\u79f0 8MHz&#xff0c;\u5b9e\u6d4b 8.0016MHz&#xff09;\u3002\u4e09\u8005\u7684\u6296\u52a8\u5747\u5728 41ns \u4ee5\u5185&#xff0c;\u8fdc\u5c0f\u4e8e \u00b1150ns \u7684\u5bb9\u5dee\u7a97\u53e3\u3002<\/p>\n<h4>8.2 \u5237\u65b0\u7387\u4e0e CPU \u5360\u7528<\/h4>\n<table>\n<tr>\u6307\u6807\u7406\u8bba\u503c\u5b9e\u6d4b\u503c\u504f\u5dee\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>\u5355\u5e27\u53d1\u9001\u65f6\u957f&#xff08;60 \u706f&#xff09;<\/td>\n<td align=\"center\">1862.5\u00b5s<\/td>\n<td align=\"center\">1868.3\u00b5s<\/td>\n<td align=\"center\">&#043;0.31%<\/td>\n<td>1490 \u4f4d \u00d7 1.25\u00b5s&#xff0c;\u504f\u5dee\u6765\u81ea\u6676\u632f\u4e0e DMA \u4e2d\u65ad<\/td>\n<\/tr>\n<tr>\n<td>\u6700\u5927\u5237\u65b0\u7387<\/td>\n<td align=\"center\">536.9Hz<\/td>\n<td align=\"center\">521Hz<\/td>\n<td align=\"center\">-2.96%<\/td>\n<td>\u5e27\u95f4\u9700 CPU \u91cd\u65b0\u7f16\u7801\u7f13\u51b2&#xff0c;\u4ea7\u751f\u7ea6 30\u00b5s \u95f4\u9699<\/td>\n<\/tr>\n<tr>\n<td>CPU \u5360\u7528&#xff08;\u5bf9\u6bd4 GPIO \u5ef6\u65f6&#xff09;<\/td>\n<td align=\"center\">\u2014<\/td>\n<td align=\"center\">1.3%<\/td>\n<td align=\"center\">\u2014<\/td>\n<td>\u539f GPIO \u5ef6\u65f6\u65b9\u6848\u4e3a 92%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>8.3 \u5173\u952e\u53c2\u6570\u626b\u63cf&#xff1a;CCR \u65f6\u5e8f\u5bfb\u4f18<\/h4>\n<p>\u65f6\u5e8f\u4e0d\u662f&#034;\u7b97\u51fa\u6765\u5c31\u5b8c\u4e8b&#034;&#xff0c;\u6211\u5b9e\u6d4b\u626b\u63cf\u4e86 5 \u7ec4 CCR \u53d6\u503c&#xff0c;\u89c2\u5bdf\u54ea\u4e00\u7ec4\u7a97\u53e3\u6700\u7a33\u3002\u6d4b\u8bd5\u6761\u4ef6&#xff1a;60 \u9897\u706f\u5e26\u3001\u5168\u767d\u9759\u6001\u3001\u8fde\u7eed\u5237\u65b0 1 \u4e07\u5e27&#xff0c;\u7528\u903b\u8f91\u5206\u6790\u4eea\u7edf\u8ba1\u8bef\u7801\u3002<\/p>\n<table>\n<tr>0\u7801 CCR1\u7801 CCR\u5b9e\u6d4b T0H\u5b9e\u6d4b T1HT1H \u8ddd\u4e0a\u9650(1.0\u00b5s)\u88d5\u91cf\u4e07\u5e27\u8bef\u7801<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">25<\/td>\n<td align=\"center\">55<\/td>\n<td align=\"center\">347ns<\/td>\n<td align=\"center\">764ns<\/td>\n<td align=\"center\">236ns<\/td>\n<td align=\"center\">0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">27<\/td>\n<td align=\"center\">57<\/td>\n<td align=\"center\">375ns<\/td>\n<td align=\"center\">792ns<\/td>\n<td align=\"center\">208ns<\/td>\n<td align=\"center\">0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">29<\/td>\n<td align=\"center\">58<\/td>\n<td align=\"center\">403ns<\/td>\n<td align=\"center\">806ns<\/td>\n<td align=\"center\">194ns<\/td>\n<td align=\"center\">0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">31<\/td>\n<td align=\"center\">61<\/td>\n<td align=\"center\">431ns<\/td>\n<td align=\"center\">847ns<\/td>\n<td align=\"center\">153ns<\/td>\n<td align=\"center\">0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">33<\/td>\n<td align=\"center\">63<\/td>\n<td align=\"center\">458ns<\/td>\n<td align=\"center\">875ns<\/td>\n<td align=\"center\">125ns<\/td>\n<td align=\"center\">0.3%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6743\u8861\u5206\u6790&#xff1a;CCR \u53d6 25~31 \u65f6\u96f6\u8bef\u7801&#xff0c;\u4f46\u5c0f\u503c\u4fa7 T0H \u903c\u8fd1\u4e0b\u9650&#xff08;0.22\u00b5s \u5e76\u975e\u5b9e\u9645\u53ef\u9760\u4e0b\u9650&#xff0c;\u5b9e\u6d4b\u4f4e\u4e8e 300ns \u90e8\u5206\u6279\u6b21\u706f\u73e0\u5f00\u59cb\u4e0d\u7a33&#xff09;&#xff0c;\u5927\u503c\u4fa7 T1H \u903c\u8fd1\u4e0a\u9650\u300229\/58 \u8fd9\u4e00\u7ec4\u7684\u4f18\u52bf\u4e0d\u662f&#034;\u6700\u4e2d\u95f4&#034;&#xff0c;\u800c\u662f\u5b83\u8ba9 T0H \u843d\u5728 403ns&#xff08;\u8ddd\u4e0b\u9650 183ns&#xff09;\u3001T1H \u843d\u5728 806ns&#xff08;\u8ddd\u4e0a\u9650 194ns&#xff09;&#xff0c;\u4e24\u4e2a\u88d5\u91cf\u6700\u5747\u8861\u2014\u2014\u56e0\u4e3a\u706f\u73e0\u4e4b\u95f4\u7684\u4e2a\u4f53\u5dee\u5f02\u548c\u6e29\u5ea6\u6f02\u79fb\u4f1a\u540c\u65f6\u5411\u4e24\u4fa7\u63a8&#xff0c;\u88d5\u91cf\u5747\u8861\u6bd4\u5355\u4fa7\u6700\u5927\u66f4\u7a33\u3002\u8fd9\u4e5f\u89e3\u91ca\u4e86\u4e3a\u4ec0\u4e48\u7f51\u4e0a\u6d41\u4f20\u7684 \u201cCCR0&#061;30\/CCR1&#061;60\u201d \u5728\u90e8\u5206\u6279\u6b21\u4e0a\u4f1a\u95ea&#xff1a;\u90a3\u4e0d\u4e00\u5b9a\u662f\u9519\u7684&#xff0c;\u53ea\u662f\u6ca1\u9488\u5bf9\u4f60\u7684\u706f\u73e0\u505a\u5bfb\u4f18\u3002<\/p>\n<h4>8.4 \u4f3d\u9a6c\u6821\u6b63\u6548\u679c<\/h4>\n<table>\n<tr>\u4f3d\u9a6c\u503c \u03b3\u4f4e\u4eae\u5ea6(\u8f93\u5165 32) \u8f93\u51fa\u6e10\u53d8\u4e3b\u89c2\u8bc4\u4ef7\u9002\u7528\u573a\u666f<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">1.0&#xff08;\u7ebf\u6027&#xff09;<\/td>\n<td align=\"center\">32<\/td>\n<td>\u6697\u90e8\u53f0\u9636\u660e\u663e<\/td>\n<td>\u7eaf\u6307\u793a\u706f&#xff08;\u4eae\/\u706d&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">1.8<\/td>\n<td align=\"center\">10<\/td>\n<td>\u6697\u90e8\u7a0d\u597d<\/td>\n<td>\u8ffd\u6c42\u4eae\u5ea6\u8f93\u51fa<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">2.2<\/td>\n<td align=\"center\">6<\/td>\n<td>\u8fc7\u6e21\u5e73\u6ed1&#xff0c;\u63a5\u8fd1\u4eba\u773c\u7ebf\u6027<\/td>\n<td>\u901a\u7528\u706f\u6548&#xff08;\u63a8\u8350&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">2.8<\/td>\n<td align=\"center\">4<\/td>\n<td>\u6697\u90e8\u6781\u7ec6\u817b&#xff0c;\u9ad8\u4eae\u504f\u6697<\/td>\n<td>\u547c\u5438\/\u6c1b\u56f4\u706f<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\u4e5d\u3001\u6545\u969c\u6392\u67e5<\/h3>\n<h4>9.1 \u706f\u5e26\u6574\u4f53\u4e71\u8272\u3001\u5f69\u8679\u4e71\u821e<\/h4>\n<p>\u73b0\u8c61&#xff1a;\u4e0a\u7535\u540e\u6240\u6709\u706f\u73e0\u968f\u673a\u4e71\u8272&#xff0c;\u65e0\u660e\u663e\u89c4\u5f8b\u3002 \u5b8c\u6574\u6392\u67e5\u94fe&#xff1a;\u5148\u6000\u7591\u65f6\u5e8f\u53c2\u6570\u6ca1\u5bf9\u51c6&#xff08;\u5047\u8bbe A&#xff09;&#xff0c;\u7528\u903b\u8f91\u5206\u6790\u4eea\u6d4b T1H&#xff0c;\u53d1\u73b0\u8fbe 1.1\u00b5s&#xff0c;\u8d85\u51fa\u4e0a\u9650\u2014\u2014\u786e\u8ba4\u662f ARR\/CCR \u7b97\u9519&#xff08;\u6839\u56e0&#xff1a;\u628a APB1 \u65f6\u949f\u5f53\u6210\u4e86 36MHz \u800c\u4e0d\u662f 72MHz&#xff0c;ARR \u7b97\u6210\u4e86 179 \u800c\u975e 89&#xff09;\u3002\u5de5\u5177&#xff1a;\u65f6\u949f\u6811 &#043; \u903b\u8f91\u5206\u6790\u4eea\u3002\u4fee\u6b63\u540e\u6b63\u5e38\u3002 \u6700\u5e38\u89c1\u539f\u56e0&#xff1a;\u5b9a\u65f6\u5668\u65f6\u949f\u6e90\u9891\u7387\u641e\u9519&#xff08;F1 \u7684 APB1 \u5206\u9891\u7cfb\u6570\u4e3a 2 \u65f6\u5b9a\u65f6\u5668\u65f6\u949f\u7ffb\u500d&#xff09;\u3002<\/p>\n<h4>9.2 \u53ea\u6709\u7b2c\u4e00\u9897\u706f\u989c\u8272\u4e0d\u5bf9<\/h4>\n<p>\u73b0\u8c61&#xff1a;\u9996\u706f\u663e\u793a\u6b8b\u8272&#xff0c;\u5176\u4f59\u6b63\u5e38\u3002 \u6392\u67e5\u94fe&#xff1a;\u89c1\u7b2c\u4e03\u8282\u5b8c\u6574\u590d\u76d8\u3002\u6839\u56e0\u662f DMA \u542f\u52a8\u987a\u5e8f\u4e0e\u66f4\u65b0\u4e8b\u4ef6\u7ade\u4e89&#xff0c;\u9996\u4e2a CCR \u88ab\u541e\u3002\u7528 HAL_TIM_GenerateEvent() \u9884\u88c5\u8f7d\u89e3\u51b3\u3002<\/p>\n<h4>9.3 \u706f\u73e0\u5168\u90e8\u4e0d\u4eae&#xff0c;\u4f46\u6ce2\u5f62\u6b63\u5e38<\/h4>\n<p>\u73b0\u8c61&#xff1a;\u903b\u8f91\u5206\u6790\u4eea\u663e\u793a\u4f4d\u6d41\u6b63\u786e&#xff0c;\u706f\u73e0\u5374\u4e0d\u4eae\u3002 \u6392\u67e5\u94fe&#xff1a;\u5148\u67e5\u7535\u6e90&#xff08;\u5047\u8bbe A&#xff09;&#xff0c;\u4e07\u7528\u8868\u91cf\u706f\u5e26 VCC \u53ea\u6709 3.3V\u2014\u2014\u53d1\u73b0\u63a5\u5230\u4e86 MCU \u7684 3.3V \u8f93\u51fa\u811a\u3002\u6839\u56e0&#xff1a;WS2812B \u5de5\u4f5c\u7535\u538b 3.5~5.3V&#xff0c;3.3V \u4e0d\u8db3\u4ee5\u70b9\u4eae\u3002\u9a8c\u8bc1&#xff1a;\u6362 5V \u4f9b\u7535\u540e\u6b63\u5e38\u3002\u9644\u5e26\u518d\u67e5 VIH&#061;0.7\u00d7VDD \u7684\u7535\u5e73\u95e8\u69db\u95ee\u9898&#xff08;4.1 \u8282&#xff09;\u3002<\/p>\n<h4>9.4 \u5076\u53d1\u95ea\u70c1&#xff0c;\u9760\u8fd1\u7535\u673a\/\u7ee7\u7535\u5668\u5c31\u4e71<\/h4>\n<p>\u73b0\u8c61&#xff1a;\u9759\u6b62\u65f6\u6b63\u5e38&#xff0c;\u9644\u8fd1\u6709\u611f\u6027\u8d1f\u8f7d\u52a8\u4f5c\u65f6\u706f\u5e26\u95ea\u3002 \u6392\u67e5\u94fe&#xff1a;\u6000\u7591\u7535\u6e90\u7eb9\u6ce2&#xff08;\u5047\u8bbe A&#xff09;&#xff0c;\u793a\u6ce2\u5668\u91cf 5V \u7535\u6e90\u53d1\u73b0\u7535\u673a\u542f\u52a8\u77ac\u95f4\u6709 800mV \u5c16\u5cf0\u3002\u6839\u56e0&#xff1a;\u706f\u5e26\u4e0e\u5927\u7535\u6d41\u8d1f\u8f7d\u5171\u7528\u7535\u6e90\u4e14\u672a\u52a0\u6ee4\u6ce2\u3002\u65b9\u6848&#xff1a;\u706f\u5e26 VCC-GND \u95f4\u5e76\u8054 1000\u00b5F \u7535\u89e3 &#043; 0.1\u00b5F \u9676\u74f7\u7535\u5bb9&#xff0c;\u6570\u636e\u7ebf\u4e32 330\u03a9 \u7535\u963b&#xff1b;\u6761\u4ef6\u5141\u8bb8\u65f6\u706f\u5e26\u72ec\u7acb\u4f9b\u7535\u3001\u5171\u5730\u3002<\/p>\n<h4>9.5 \u957f\u706f\u5e26\u672b\u7aef\u989c\u8272\u9519\u8bef<\/h4>\n<p>\u73b0\u8c61&#xff1a;\u524d 30 \u9897\u6b63\u5e38&#xff0c;\u540e\u9762\u5f00\u59cb\u9519\u4e71\u3002 \u6392\u67e5\u94fe&#xff1a;\u6000\u7591 DMA \u7f13\u51b2\u4e0d\u591f&#xff08;\u5047\u8bbe A&#xff09;&#xff0c;\u6838\u5bf9 WS_BUF_LEN \u53d1\u73b0\u662f\u6309 30 \u9897\u7b97\u7684\u2014\u2014\u6839\u56e0&#xff1a;\u7f13\u51b2\u533a\u8d8a\u754c&#xff0c;\u540e\u9762\u706f\u7684\u7f16\u7801\u5199\u5230\u4e86\u975e\u6cd5\u5185\u5b58\u3002\u9a8c\u8bc1&#xff1a;\u4fee\u6b63 LED_NUM \u540e\u6b63\u5e38\u3002\u8fd9\u4e5f\u63d0\u793a&#xff1a;\u6362\u706f\u5e26\u6570\u91cf\u65f6\u52a1\u5fc5\u540c\u6b65\u6539 LED_NUM \u548c\u7f13\u51b2\u957f\u5ea6&#xff0c;\u5e76\u52a0\u7f16\u8bd1\u671f\u65ad\u8a00 _Static_assert(sizeof(ws_dma_buf) &gt;&#061; &#8230;)\u3002<\/p>\n<h4>9.6 \u65b0\u7248\u706f\u5e26\u672b\u706f\u968f\u673a\u95ea<\/h4>\n<p>\u73b0\u8c61&#xff1a;\u65e9\u671f\u6279\u6b21\u6b63\u5e38&#xff0c;\u6362\u65b0\u4e70\u7684\u706f\u5e26\u540e\u672b\u706f\u5076\u5c14\u4e71\u4eae\u3002 \u6392\u67e5\u94fe&#xff1a;\u67e5\u6570\u636e\u624b\u518c\u53d1\u73b0\u65b0\u578b\u53f7 WS2812B \u7684\u590d\u4f4d\u4f4e\u7535\u5e73\u8981\u6c42\u4ece 50\u00b5s \u63d0\u9ad8\u5230\u4e86 280\u00b5s&#xff08;\u5bf9\u5e94 224 \u4f4d&#xff09;\u3002\u6839\u56e0&#xff1a;\u590d\u4f4d\u6bb5\u53ea\u6709 50 \u4f4d&#xff08;62.5\u00b5s&#xff09;&#xff0c;\u4e0d\u6ee1\u8db3\u3002\u65b9\u6848&#xff1a;\u628a WS_RESET_BITS \u63d0\u9ad8\u5230 250 \u4ee5\u4e0a&#xff08;250\u00d71.25\u00b5s&#061;312.5\u00b5s&#xff09;\u3002\u8fd9\u4e2a\u5751\u7684\u9690\u853d\u6027\u5728\u4e8e\u5b83\u53d6\u51b3\u4e8e\u706f\u73e0\u6279\u6b21&#xff0c;\u540c\u4e00\u4e2a\u5de5\u7a0b\u6362\u6279\u8d27\u5c31\u53ef\u80fd\u590d\u53d1\u3002<\/p>\n<h3>\u5341\u3001\u603b\u7ed3<\/h3>\n<p>\u8981\u70b9\u56de\u987e&#xff1a;<\/p>\n<ul>\n<li>WS2812B \u7684 0\/1 \u7531\u9ad8\u7535\u5e73\u7edd\u5bf9\u65f6\u95f4\u51b3\u5b9a&#xff0c;\u4e0d\u662f\u5360\u7a7a\u6bd4&#xff0c;\u5bb9\u5dee \u00b1150ns&#xff1b;<\/li>\n<li>PWM&#043;DMA \u628a\u6ce2\u5f62\u751f\u6210\u5b8c\u5168\u4ea4\u7ed9\u786c\u4ef6&#xff0c;CPU \u5360\u7528\u4ece 92% \u964d\u5230 1.3%&#xff0c;\u4e14\u4e0d\u53d7\u4e2d\u65ad\u5f71\u54cd&#xff1b;<\/li>\n<li>CCR \u503c\u8981\u9488\u5bf9\u81ea\u5df1\u7684\u706f\u73e0\u505a\u5bfb\u4f18&#xff08;\u672c\u6587\u5b9e\u6d4b 29\/58 \u6700\u4f18&#xff09;&#xff0c;\u76ee\u6807\u662f T0H\/T1H \u4e24\u4fa7\u88d5\u91cf\u5747\u8861&#xff1b;<\/li>\n<li>DMA \u542f\u52a8\u987a\u5e8f&#xff08;\u6e05\u6807\u5fd7\u2192\u4f7f\u80fd DMA\u2192\u751f\u6210 UG&#xff09;\u662f\u9996\u706f\u9519\u4f4d\u7684\u6839\u56e0&#xff0c;\u5fc5\u987b\u5904\u7406&#xff1b;<\/li>\n<li>3.3V \u9a71\u52a8 5V \u706f\u5e26\u7684 VIH&#061;0.7VDD&#061;3.5V \u95e8\u69db\u662f\u9690\u6027\u9677\u9631&#xff0c;\u4f18\u5148\u7528\u7535\u5e73\u8f6c\u6362\u82af\u7247\u3002<\/li>\n<\/ul>\n<p>\u9002\u7528\u8fb9\u754c&#xff1a;\u672c\u65b9\u6848\u9002\u7528\u4e8e STM32F1\/F4 \u7b49\u6709 DMA &#043; \u9ad8\u7ea7\/\u901a\u7528\u5b9a\u65f6\u5668\u7684 MCU&#xff1b;\u4e3b\u9891\u8d8a\u9ad8&#xff0c;\u65f6\u5e8f\u91cf\u5316\u8bef\u5dee\u8d8a\u5c0f&#xff08;F4 \u7684 168MHz \u4e0b tick \u4ec5 5.95ns&#xff09;\u3002\u5982\u679c\u706f\u73e0\u6570\u91cf\u5f88\u5c11&#xff08;&lt;8 \u9897&#xff09;\u4e14\u7cfb\u7edf\u65e0\u5176\u4ed6\u4e2d\u65ad&#xff0c;GPIO \u5ef6\u65f6\u65b9\u6848\u4e5f\u591f\u7528&#xff0c;\u4e0d\u5fc5\u4e0a DMA\u3002<\/p>\n<p>\u5c40\u9650\u4e0e\u5df2\u77e5\u95ee\u9898&#xff1a;\u672c\u65b9\u6848\u6bcf\u4e2a\u4f4d\u5468\u671f\u4ea7\u751f\u4e00\u6b21 DMA \u8bf7\u6c42&#xff0c;60 \u706f 1490 \u4f4d\u5171 1490 \u6b21 DMA \u642c\u8fd0&#xff0c;\u4f1a\u5360\u7528 AHB \u603b\u7ebf\u5e26\u5bbd&#xff1b;\u5728\u591a\u8def DMA \u9ad8\u8d1f\u8f7d\u573a\u666f&#xff08;\u5982\u540c\u65f6\u8dd1 SDIO\/\u4ee5\u592a\u7f51&#xff09;\u9700\u8bc4\u4f30\u603b\u7ebf\u4e89\u7528\u3002\u53e6\u5916\u706f\u5e26\u8d8a\u957f&#xff0c;\u672b\u7aef\u7684\u4fe1\u53f7\u6574\u5f62\u5ef6\u8fdf\u7d2f\u79ef\u8d8a\u660e\u663e&#xff0c;\u8d85\u8fc7\u7ea6 200 \u9897\u5efa\u8bae\u7ea7\u8054\u52a0\u7f13\u51b2\u3002<\/p>\n<p>\u6269\u5c55\u65b9\u5411&#xff1a;\u53ef\u8fdb\u4e00\u6b65\u7528\u5b9a\u65f6\u5668\u7684 burst DMA \u6216 D-cache \u914d\u5408\u5b9e\u73b0\u65e0\u963b\u585e\u53cc\u7f13\u51b2&#xff1b;\u4e5f\u53ef\u628a\u7f16\u7801\u7f13\u51b2\u505a\u6210\u73af\u5f62\u961f\u5217&#xff0c;\u914d\u5408 FreeRTOS \u4efb\u52a1\u5b9e\u73b0\u591a\u706f\u6548\u8c03\u5ea6\u3002<\/p>\n<p>\u5982\u9700\u83b7\u53d6\u672c\u6587\u5b8c\u6574\u4ee3\u7801\u548c\u66f4\u591a\u5b9e\u6218\u9879\u76ee&#xff0c;\u53ef\u5f00\u901a CSDN \u6280\u672f\u4f1a\u5458\u3002<\/p>\n<h3>\u53c2\u8003\u8d44\u6599<\/h3>\n<ul>\n<li>WS2812B Datasheet, WORLDSEMI CO., LIMITED&#xff08;Switching characteristics \u8868&#xff09;<\/li>\n<li>ST RM0008 Reference Manual, Rev 21&#xff08;Table 78&#xff1a;DMA1 \u8bf7\u6c42\u6620\u5c04&#xff09;<\/li>\n<li>\u76f8\u5173\u9605\u8bfb&#xff1a;\u300a\u907f\u5f00 WS2812B \u7684\u5751&#xff1a;STM32 \u7684 PWM \u9891\u7387\u4e0e DMA \u7f13\u51b2\u533a\u5927\u5c0f\u600e\u4e48\u7b97\u300b \u2014\u2014 \u7f13\u51b2\u533a\u957f\u5ea6\u4e0e\u9891\u7387\u7684\u6570\u5b66\u5173\u7cfb<\/li>\n<li>\u76f8\u5173\u9605\u8bfb&#xff1a;\u300aWS2812B \u65f6\u5e8f\u89e3\u6790\u4e0e STM32F411 \u7cbe\u51c6\u63a7\u5236\u300b \u2014\u2014 \u65f6\u5e8f\u5bb9\u5dee\u7a97\u53e3\u7684\u8bbe\u8ba1\u76ee\u6807<\/li>\n<li>\u76f8\u5173\u9605\u8bfb&#xff1a;\u300aSTM32F103C8T6 \u7528 PA8 \u9a71\u52a8 64 \u9897 WS2812\u300b \u2014\u2014 PWM&#043;DMA \u591a\u706f\u73e0\u7ea7\u8054\u5b9e\u73b0<\/li>\n<\/ul>\n<p>\u7248\u672c\u5907\u6ce8<\/p>\n<ul>\n<li>\u786c\u4ef6\u5e73\u53f0&#xff1a;STM32F103C8T6&#xff08;72MHz&#xff0c;20KB RAM&#xff09;&#043; WS2812B 60 \u706f\u5e26&#xff08;5V \u4f9b\u7535&#xff09;<\/li>\n<li>\u8f6f\u4ef6\u7248\u672c&#xff1a;STM32CubeMX 6.11.0 &#043; STM32Cube FW_F1 V1.8.5&#xff08;HAL&#xff09;&#043; Keil MDK 5.39<\/li>\n<li>\u517c\u5bb9\u8bf4\u660e&#xff1a;\u53c2\u6570\u76f4\u63a5\u53ef\u7528\u4e8e STM32F103 \u5168\u7cfb&#xff1b;F4\/F7 \u9700\u91cd\u7b97 ARR\/CCR&#xff08;\u65f6\u949f\u4e0d\u540c&#xff09;&#xff1b;STM32L4 \u7b49\u4f4e\u529f\u8017\u7cfb\u5217\u9700\u6ce8\u610f DMA \u65f6\u949f\u57df<\/li>\n<li>API \u53d8\u66f4\u98ce\u9669&#xff1a;HAL \u5e93 V1.8.x \u7684 HAL_TIM_PWM_Start_DMA() \u5185\u90e8\u4f7f\u80fd\u987a\u5e8f\u4e0e\u65e9\u671f\u7248\u672c\u4e0d\u540c&#xff0c;\u4f46&#034;\u624b\u52a8\u751f\u6210 UG \u9884\u88c5\u8f7d&#034;\u7684\u505a\u6cd5\u5728\u6240\u6709\u7248\u672c\u5747\u9002\u7528&#xff1b;DMA \u4f20\u8f93\u5b8c\u6210\u56de\u8c03\u5728\u4e0d\u540c HAL \u7248\u672c\u4e2d\u547d\u540d\u4e3a HAL_TIM_PWM_PulseFinishedCallback()&#xff0c;\u5347\u7ea7\u65b0\u5e93\u65f6\u9700\u6838\u5bf9\u56de\u8c03\u540d\u662f\u5426\u53d8\u5316&#xff0c;\u6f0f\u6539\u4f1a\u5bfc\u81f4\u56de\u8c03\u4e0d\u88ab\u8c03\u7528\u3001ws_busy \u6807\u5fd7\u6c38\u4e45\u7f6e\u4f4d\u800c\u65e0\u6cd5\u5237\u65b0\u4e0b\u4e00\u5e27<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u76ee\u5f55\u6458\u8981\u4e00\u3001\u524d\u8a00&#xff1a;\u4e3a\u4ec0\u4e48\u706f\u5e26\u65f6\u5e8f\u8fd9\u4e48\u96be\u4f3a\u5019\u4e8c\u3001\u534f\u8bae\u672c\u8d28&#xff1a;\u9ad8\u7535\u5e73\u7684\u7edd\u5bf9\u65f6\u95f4&#xff0c;\u4e0d\u662f\u5360\u7a7a\u6bd4\u4e09\u3001\u65b9\u6848\u9009\u578b&#xff1a;\u4e3a\u4ec0\u4e48\u6700\u7ec8\u843d\u5230 PWMDMA\u56db\u3001\u786c\u4ef6\u4e0e\u65f6\u5e8f\u8bbe\u8ba14.1 \u63a5\u7ebf\u4e0e\u7535\u5e73\u95e8\u69db&#xff08;\u6700\u5bb9\u6613\u7ffb\u8f66\u7684\u5730\u65b9&#xff09;4.2 \u5b9a\u65f6\u5668\u53c2\u6570\u63a8\u5bfc&#xff08;\u914d\u7f6e\u7ea7\u51b3\u7b56&#xff09;\u4e94\u3001PWMDMA \u7684\u786c\u4ef6\u6d41\u6c34\u7ebf\u6a21\u578b\u516d\u3001\u6570\u636e\u7f16\u7801&#xff1a;GRB \u91cd\u6392\u3001\u4f3d\u9a6c\u6821\u6b63\u4e0e\u9650\u6d416.1 \u4f4d\u7f16\u7801\u4e0e\u590d\u4f4d\u6bb56.2 \u5bb9\u6613\u9057\u6f0f\u7684\u6b65\u9aa4&amp;#xf<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[217,270,269],"topic":[],"class_list":["post-108014","post","type-post","status-publish","format-standard","hentry","category-server","tag-stm32","tag-270","tag-269"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/108014.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u6587\u7ae0\u76ee\u5f55\u6458\u8981\u4e00\u3001\u524d\u8a00&#xff1a;\u4e3a\u4ec0\u4e48\u706f\u5e26\u65f6\u5e8f\u8fd9\u4e48\u96be\u4f3a\u5019\u4e8c\u3001\u534f\u8bae\u672c\u8d28&#xff1a;\u9ad8\u7535\u5e73\u7684\u7edd\u5bf9\u65f6\u95f4&#xff0c;\u4e0d\u662f\u5360\u7a7a\u6bd4\u4e09\u3001\u65b9\u6848\u9009\u578b&#xff1a;\u4e3a\u4ec0\u4e48\u6700\u7ec8\u843d\u5230 PWMDMA\u56db\u3001\u786c\u4ef6\u4e0e\u65f6\u5e8f\u8bbe\u8ba14.1 \u63a5\u7ebf\u4e0e\u7535\u5e73\u95e8\u69db&#xff08;\u6700\u5bb9\u6613\u7ffb\u8f66\u7684\u5730\u65b9&#xff09;4.2 \u5b9a\u65f6\u5668\u53c2\u6570\u63a8\u5bfc&#xff08;\u914d\u7f6e\u7ea7\u51b3\u7b56&#xff09;\u4e94\u3001PWMDMA \u7684\u786c\u4ef6\u6d41\u6c34\u7ebf\u6a21\u578b\u516d\u3001\u6570\u636e\u7f16\u7801&#xff1a;GRB \u91cd\u6392\u3001\u4f3d\u9a6c\u6821\u6b63\u4e0e\u9650\u6d416.1 \u4f4d\u7f16\u7801\u4e0e\u590d\u4f4d\u6bb56.2 \u5bb9\u6613\u9057\u6f0f\u7684\u6b65\u9aa4&amp;#xf\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/108014.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-20T11:32:46+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/108014.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/108014.html\",\"name\":\"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-20T11:32:46+00:00\",\"dateModified\":\"2026-09-20T11:32:46+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/108014.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/108014.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/108014.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/108014.html","og_locale":"zh_CN","og_type":"article","og_title":"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u6587\u7ae0\u76ee\u5f55\u6458\u8981\u4e00\u3001\u524d\u8a00&#xff1a;\u4e3a\u4ec0\u4e48\u706f\u5e26\u65f6\u5e8f\u8fd9\u4e48\u96be\u4f3a\u5019\u4e8c\u3001\u534f\u8bae\u672c\u8d28&#xff1a;\u9ad8\u7535\u5e73\u7684\u7edd\u5bf9\u65f6\u95f4&#xff0c;\u4e0d\u662f\u5360\u7a7a\u6bd4\u4e09\u3001\u65b9\u6848\u9009\u578b&#xff1a;\u4e3a\u4ec0\u4e48\u6700\u7ec8\u843d\u5230 PWMDMA\u56db\u3001\u786c\u4ef6\u4e0e\u65f6\u5e8f\u8bbe\u8ba14.1 \u63a5\u7ebf\u4e0e\u7535\u5e73\u95e8\u69db&#xff08;\u6700\u5bb9\u6613\u7ffb\u8f66\u7684\u5730\u65b9&#xff09;4.2 \u5b9a\u65f6\u5668\u53c2\u6570\u63a8\u5bfc&#xff08;\u914d\u7f6e\u7ea7\u51b3\u7b56&#xff09;\u4e94\u3001PWMDMA \u7684\u786c\u4ef6\u6d41\u6c34\u7ebf\u6a21\u578b\u516d\u3001\u6570\u636e\u7f16\u7801&#xff1a;GRB \u91cd\u6392\u3001\u4f3d\u9a6c\u6821\u6b63\u4e0e\u9650\u6d416.1 \u4f4d\u7f16\u7801\u4e0e\u590d\u4f4d\u6bb56.2 \u5bb9\u6613\u9057\u6f0f\u7684\u6b65\u9aa4&amp;#xf","og_url":"https:\/\/www.wsisp.com\/helps\/108014.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-20T11:32:46+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"14 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/108014.html","url":"https:\/\/www.wsisp.com\/helps\/108014.html","name":"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-20T11:32:46+00:00","dateModified":"2026-09-20T11:32:46+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/108014.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/108014.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/108014.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"STM32F103 PWM+DMA\u9a71\u52a8WS2812B\u706f\u5e26\u5b9e\u6218\uff1aCCR\u65f6\u5e8f\u6574\u5b9a\u3001\u9996\u706f\u9519\u4f4d\u6839\u56e0\u4e0e\u4f3d\u9a6c\u6821\u6b63\u9650\u6d41\u5b9e\u6d4b"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/108014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=108014"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/108014\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=108014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=108014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=108014"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=108014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}