<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>帆登小站</title><link>https://blog.simgor.cn/</link><description>嵌入式工具箱与开发笔记</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://blog.simgor.cn/index.xml" rel="self" type="application/rss+xml"/><item><title>CRC 校验</title><link>https://blog.simgor.cn/tools/crc/</link><guid>https://blog.simgor.cn/tools/crc/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="crc" aria-label="CRC 校验"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="参数约定"&gt;参数约定&lt;span class="hx:absolute hx:-mt-20" id="参数约定"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e6%95%b0%e7%ba%a6%e5%ae%9a" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Poly 使用最高项省略的常规表示，例如 CRC-16/MODBUS 为 &lt;code&gt;8005&lt;/code&gt;；RefIn / RefOut 控制位反射，Init 为初值，XorOut 为最终异或值。&lt;/p&gt;
&lt;p&gt;ASCII 文本 &lt;code&gt;123456789&lt;/code&gt; 是常用检查向量：MODBUS 得到 &lt;code&gt;4B37&lt;/code&gt;，CRC-32/ISO-HDLC 得到 &lt;code&gt;CBF43926&lt;/code&gt;。MODBUS 线上按低字节在前发送，为 &lt;code&gt;37 4B&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;HEX 输入直接按字节计算；UTF-8 输入按编码后的字节计算。字节序只改变校验值的发送顺序。&lt;/p&gt;</description></item><item><title>OpenSSL rand</title><link>https://blog.simgor.cn/tools/openssl-rand/</link><guid>https://blog.simgor.cn/tools/openssl-rand/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="openssl-rand" aria-label="OpenSSL rand"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="字节数与编码长度"&gt;字节数与编码长度&lt;span class="hx:absolute hx:-mt-20" id="字节数与编码长度"&gt;&lt;/span&gt;
&lt;a href="#%e5%ad%97%e8%8a%82%e6%95%b0%e4%b8%8e%e7%bc%96%e7%a0%81%e9%95%bf%e5%ba%a6" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;openssl rand -hex 32&lt;/code&gt; 生成 32 字节，HEX 输出为 64 字符。Base64 长度为原始字节数除以 3 后向上取整，再乘 4，末尾按需补 &lt;code&gt;=&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;页面使用浏览器安全随机源，并显示对应的 OpenSSL 命令；两者格式相同，每次生成的数据各自独立。下载 &lt;code&gt;.bin&lt;/code&gt; 得到编码前的原始字节。&lt;/p&gt;</description></item><item><title>随机密码</title><link>https://blog.simgor.cn/tools/password/</link><guid>https://blog.simgor.cn/tools/password/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="password" aria-label="随机密码"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="字符组"&gt;字符组&lt;span class="hx:absolute hx:-mt-20" id="字符组"&gt;&lt;/span&gt;
&lt;a href="#%e5%ad%97%e7%ac%a6%e7%bb%84" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;每条密码包含所选的各组字符。排除易混淆字符后，去掉 &lt;code&gt;0 O 1 I l&lt;/code&gt;。重新生成会取得一组新随机数。&lt;/p&gt;
&lt;p&gt;随机数由系统安全随机源提供，字符选择采用拒绝采样。分享仅保存生成设置。&lt;/p&gt;</description></item><item><title>AES-CMAC</title><link>https://blog.simgor.cn/tools/aes-cmac/</link><guid>https://blog.simgor.cn/tools/aes-cmac/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="aes-cmac" aria-label="AES-CMAC"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="消息认证码"&gt;消息认证码&lt;span class="hx:absolute hx:-mt-20" id="消息认证码"&gt;&lt;/span&gt;
&lt;a href="#%e6%b6%88%e6%81%af%e8%ae%a4%e8%af%81%e7%a0%81" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;AES-CMAC 按 NIST SP 800-38B 计算，完整 Tag 为 16 字节；截断时取左侧字节。空消息也是有效输入。&lt;/p&gt;
&lt;p&gt;RFC 4493 算例：密钥 &lt;code&gt;2B7E151628AED2A6ABF7158809CF4F3C&lt;/code&gt;，消息 &lt;code&gt;6BC1BEE22E409F96E93D7E117393172A&lt;/code&gt;，Tag 为 &lt;code&gt;070A16B46B4D4144F79BDD9DD04A287C&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;密钥按 HEX 输入，消息可选 HEX 或 UTF-8。数据与密钥参与 CMAC 运算，分享链接只携带格式和长度设置。&lt;/p&gt;</description></item><item><title>ASCII 转换</title><link>https://blog.simgor.cn/tools/ascii/</link><guid>https://blog.simgor.cn/tools/ascii/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="ascii" aria-label="ASCII 转换"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;section class="reference-table"&gt;&lt;h2&gt;ASCII 对照&lt;/h2&gt;&lt;div class="reference-scroll" role="region" aria-label="ASCII 0到127对照表" tabindex="0"&gt;&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;DEC&lt;/th&gt;&lt;th scope="col"&gt;HEX&lt;/th&gt;&lt;th scope="col"&gt;字符&lt;/th&gt;&lt;th scope="col"&gt;DEC&lt;/th&gt;&lt;th scope="col"&gt;HEX&lt;/th&gt;&lt;th scope="col"&gt;字符&lt;/th&gt;&lt;th scope="col"&gt;DEC&lt;/th&gt;&lt;th scope="col"&gt;HEX&lt;/th&gt;&lt;th scope="col"&gt;字符&lt;/th&gt;&lt;th scope="col"&gt;DEC&lt;/th&gt;&lt;th scope="col"&gt;HEX&lt;/th&gt;&lt;th scope="col"&gt;字符&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;00&lt;/td&gt;&lt;td&gt;NUL&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;SP&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;@&lt;/td&gt;&lt;td&gt;96&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;`&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;01&lt;/td&gt;&lt;td&gt;SOH&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;!&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;97&lt;/td&gt;&lt;td&gt;61&lt;/td&gt;&lt;td&gt;a&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;02&lt;/td&gt;&lt;td&gt;STX&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;&amp;#34;&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;B&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;b&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;03&lt;/td&gt;&lt;td&gt;ETX&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;#&lt;/td&gt;&lt;td&gt;67&lt;/td&gt;&lt;td&gt;43&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;63&lt;/td&gt;&lt;td&gt;c&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;04&lt;/td&gt;&lt;td&gt;EOT&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;$&lt;/td&gt;&lt;td&gt;68&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;d&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;05&lt;/td&gt;&lt;td&gt;ENQ&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;%&lt;/td&gt;&lt;td&gt;69&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;E&lt;/td&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;e&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;06&lt;/td&gt;&lt;td&gt;ACK&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;&amp;amp;&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;46&lt;/td&gt;&lt;td&gt;F&lt;/td&gt;&lt;td&gt;102&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;f&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;07&lt;/td&gt;&lt;td&gt;BEL&lt;/td&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;&amp;#39;&lt;/td&gt;&lt;td&gt;71&lt;/td&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;G&lt;/td&gt;&lt;td&gt;103&lt;/td&gt;&lt;td&gt;67&lt;/td&gt;&lt;td&gt;g&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;08&lt;/td&gt;&lt;td&gt;BS&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;(&lt;/td&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;H&lt;/td&gt;&lt;td&gt;104&lt;/td&gt;&lt;td&gt;68&lt;/td&gt;&lt;td&gt;h&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;09&lt;/td&gt;&lt;td&gt;HT&lt;/td&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;)&lt;/td&gt;&lt;td&gt;73&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;I&lt;/td&gt;&lt;td&gt;105&lt;/td&gt;&lt;td&gt;69&lt;/td&gt;&lt;td&gt;i&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;0A&lt;/td&gt;&lt;td&gt;LF&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;2A&lt;/td&gt;&lt;td&gt;*&lt;/td&gt;&lt;td&gt;74&lt;/td&gt;&lt;td&gt;4A&lt;/td&gt;&lt;td&gt;J&lt;/td&gt;&lt;td&gt;106&lt;/td&gt;&lt;td&gt;6A&lt;/td&gt;&lt;td&gt;j&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;0B&lt;/td&gt;&lt;td&gt;VT&lt;/td&gt;&lt;td&gt;43&lt;/td&gt;&lt;td&gt;2B&lt;/td&gt;&lt;td&gt;&amp;#43;&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;td&gt;4B&lt;/td&gt;&lt;td&gt;K&lt;/td&gt;&lt;td&gt;107&lt;/td&gt;&lt;td&gt;6B&lt;/td&gt;&lt;td&gt;k&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;0C&lt;/td&gt;&lt;td&gt;FF&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;2C&lt;/td&gt;&lt;td&gt;,&lt;/td&gt;&lt;td&gt;76&lt;/td&gt;&lt;td&gt;4C&lt;/td&gt;&lt;td&gt;L&lt;/td&gt;&lt;td&gt;108&lt;/td&gt;&lt;td&gt;6C&lt;/td&gt;&lt;td&gt;l&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;0D&lt;/td&gt;&lt;td&gt;CR&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;2D&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;77&lt;/td&gt;&lt;td&gt;4D&lt;/td&gt;&lt;td&gt;M&lt;/td&gt;&lt;td&gt;109&lt;/td&gt;&lt;td&gt;6D&lt;/td&gt;&lt;td&gt;m&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;0E&lt;/td&gt;&lt;td&gt;SO&lt;/td&gt;&lt;td&gt;46&lt;/td&gt;&lt;td&gt;2E&lt;/td&gt;&lt;td&gt;.&lt;/td&gt;&lt;td&gt;78&lt;/td&gt;&lt;td&gt;4E&lt;/td&gt;&lt;td&gt;N&lt;/td&gt;&lt;td&gt;110&lt;/td&gt;&lt;td&gt;6E&lt;/td&gt;&lt;td&gt;n&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;0F&lt;/td&gt;&lt;td&gt;SI&lt;/td&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;2F&lt;/td&gt;&lt;td&gt;/&lt;/td&gt;&lt;td&gt;79&lt;/td&gt;&lt;td&gt;4F&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;111&lt;/td&gt;&lt;td&gt;6F&lt;/td&gt;&lt;td&gt;o&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;DLE&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;P&lt;/td&gt;&lt;td&gt;112&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;p&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;DC1&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;81&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;Q&lt;/td&gt;&lt;td&gt;113&lt;/td&gt;&lt;td&gt;71&lt;/td&gt;&lt;td&gt;q&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;DC2&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;82&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;R&lt;/td&gt;&lt;td&gt;114&lt;/td&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;r&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;DC3&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;83&lt;/td&gt;&lt;td&gt;53&lt;/td&gt;&lt;td&gt;S&lt;/td&gt;&lt;td&gt;115&lt;/td&gt;&lt;td&gt;73&lt;/td&gt;&lt;td&gt;s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;DC4&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;54&lt;/td&gt;&lt;td&gt;T&lt;/td&gt;&lt;td&gt;116&lt;/td&gt;&lt;td&gt;74&lt;/td&gt;&lt;td&gt;t&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;NAK&lt;/td&gt;&lt;td&gt;53&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;U&lt;/td&gt;&lt;td&gt;117&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;td&gt;u&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;SYN&lt;/td&gt;&lt;td&gt;54&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;V&lt;/td&gt;&lt;td&gt;118&lt;/td&gt;&lt;td&gt;76&lt;/td&gt;&lt;td&gt;v&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;ETB&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;87&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;W&lt;/td&gt;&lt;td&gt;119&lt;/td&gt;&lt;td&gt;77&lt;/td&gt;&lt;td&gt;w&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;CAN&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;88&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;78&lt;/td&gt;&lt;td&gt;x&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;EM&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;89&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;td&gt;121&lt;/td&gt;&lt;td&gt;79&lt;/td&gt;&lt;td&gt;y&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;1A&lt;/td&gt;&lt;td&gt;SUB&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;3A&lt;/td&gt;&lt;td&gt;:&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;5A&lt;/td&gt;&lt;td&gt;Z&lt;/td&gt;&lt;td&gt;122&lt;/td&gt;&lt;td&gt;7A&lt;/td&gt;&lt;td&gt;z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;1B&lt;/td&gt;&lt;td&gt;ESC&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;3B&lt;/td&gt;&lt;td&gt;;&lt;/td&gt;&lt;td&gt;91&lt;/td&gt;&lt;td&gt;5B&lt;/td&gt;&lt;td&gt;[&lt;/td&gt;&lt;td&gt;123&lt;/td&gt;&lt;td&gt;7B&lt;/td&gt;&lt;td&gt;{&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;1C&lt;/td&gt;&lt;td&gt;FS&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;3C&lt;/td&gt;&lt;td&gt;&amp;lt;&lt;/td&gt;&lt;td&gt;92&lt;/td&gt;&lt;td&gt;5C&lt;/td&gt;&lt;td&gt;\&lt;/td&gt;&lt;td&gt;124&lt;/td&gt;&lt;td&gt;7C&lt;/td&gt;&lt;td&gt;|&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;1D&lt;/td&gt;&lt;td&gt;GS&lt;/td&gt;&lt;td&gt;61&lt;/td&gt;&lt;td&gt;3D&lt;/td&gt;&lt;td&gt;=&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;5D&lt;/td&gt;&lt;td&gt;]&lt;/td&gt;&lt;td&gt;125&lt;/td&gt;&lt;td&gt;7D&lt;/td&gt;&lt;td&gt;}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;1E&lt;/td&gt;&lt;td&gt;RS&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;3E&lt;/td&gt;&lt;td&gt;&amp;gt;&lt;/td&gt;&lt;td&gt;94&lt;/td&gt;&lt;td&gt;5E&lt;/td&gt;&lt;td&gt;^&lt;/td&gt;&lt;td&gt;126&lt;/td&gt;&lt;td&gt;7E&lt;/td&gt;&lt;td&gt;~&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;1F&lt;/td&gt;&lt;td&gt;US&lt;/td&gt;&lt;td&gt;63&lt;/td&gt;&lt;td&gt;3F&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;5F&lt;/td&gt;&lt;td&gt;_&lt;/td&gt;&lt;td&gt;127&lt;/td&gt;&lt;td&gt;7F&lt;/td&gt;&lt;td&gt;DEL&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/section&gt;
&lt;h2 data-hextra-search-id="编码与字节"&gt;编码与字节&lt;span class="hx:absolute hx:-mt-20" id="编码与字节"&gt;&lt;/span&gt;
&lt;a href="#%e7%bc%96%e7%a0%81%e4%b8%8e%e5%ad%97%e8%8a%82" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;ASCII 使用 0–127。UTF-8 可表示中文等 Unicode 字符，一个字符可占多个字节。HEX、十进制和二进制是同一组字节的不同写法。&lt;/p&gt;
&lt;p&gt;例：&lt;code&gt;A&lt;/code&gt; → &lt;code&gt;41&lt;/code&gt;（HEX）→ &lt;code&gt;65&lt;/code&gt;（DEC）→ &lt;code&gt;01000001&lt;/code&gt;（BIN）。LF 为 &lt;code&gt;0A&lt;/code&gt;，CR 为 &lt;code&gt;0D&lt;/code&gt;，Windows 换行为 &lt;code&gt;0D 0A&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>二阶数字滤波器</title><link>https://blog.simgor.cn/tools/biquad-filter/</link><guid>https://blog.simgor.cn/tools/biquad-filter/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="biquad-filter" aria-label="二阶数字滤波器"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="f0-与-q"&gt;f0 与 Q&lt;span class="hx:absolute hx:-mt-20" id="f0-与-q"&gt;&lt;/span&gt;
&lt;a href="#f0-%e4%b8%8e-q" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;低通、高通在 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;msqrt&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msqrt&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Q=1/\sqrt{2}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8778em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.1572em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1/&lt;/span&gt;&lt;span class="mord sqrt"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.9072em;"&gt;&lt;span class="svg-align" style="top:-3em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord" style="padding-left:0.833em;"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.8672em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="hide-tail" style="min-width:0.853em;height:1.08em;"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"&gt;&lt;path d="M95,702
c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
c69,-144,104.5,-217.7,106.5,-221
l0 -0
c5.3,-9.3,12,-14,20,-14
H400000v40H845.2724
s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
M834 80h400000v40h-400000z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1328em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 时为 Butterworth 响应，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;f_0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 是 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;B&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-3\,\mathrm{dB}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7778em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;3&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;dB&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 点。Q 增大，过渡区峰值升高。带通的中心增益为 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;B&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;0\,\mathrm{dB}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6944em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;dB&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;；陷波中心为 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;f_0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;系数采用 &lt;a href="https://www.w3.org/TR/audio-eq-cookbook/" target="_blank" rel="noopener"&gt;Audio EQ Cookbook&lt;/a&gt; 的 RBJ 公式，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;f_0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 为数字频率，范围 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;0&amp;lt;f_0&amp;lt;f_{\mathrm s}/2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6835em;vertical-align:-0.0391em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;/2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;H&lt;/mi&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; H(z)=\frac{b_0+b_1z^{-1}+b_2z^{-2}}{1+a_1z^{-1}+a_2z^{-2}} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0813em;"&gt;H&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.044em;"&gt;z&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.3271em;vertical-align:-0.836em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.4911em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.044em;"&gt;z&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.7401em;"&gt;&lt;span style="top:-2.989em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.044em;"&gt;z&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.7401em;"&gt;&lt;span style="top:-2.989em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.044em;"&gt;z&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.044em;"&gt;z&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.836em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;h2 data-hextra-search-id="系数与实现"&gt;系数与实现&lt;span class="hx:absolute hx:-mt-20" id="系数与实现"&gt;&lt;/span&gt;
&lt;a href="#%e7%b3%bb%e6%95%b0%e4%b8%8e%e5%ae%9e%e7%8e%b0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;归一化 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;a_0=1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.5806em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。浮点版使用转置直接 II 型（DF2T），Q 定点版使用直接 I 型（DFI）。反馈项为 &lt;code&gt;-a1*y&lt;/code&gt;、&lt;code&gt;-a2*y&lt;/code&gt;；接入加反馈形式的库时，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;a_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.5806em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;、&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;a_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.5806em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 取反。&lt;/p&gt;
&lt;p&gt;float、double、Q 定点可选，曲线与代码使用相同精度的系数。低频、高 Q 和深陷波对系数精度更敏感。&lt;/p&gt;
&lt;p&gt;定点版逐项舍入乘积，以 int64_t 累加，最后饱和为 16 / 32 位样本；四个历史样本保持相同格式。系数量化后检查极点稳定性与通带增益。&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;a_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.5806em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 可能接近 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7278em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，此时 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mn&gt;1.15&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Q1.15&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8778em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord"&gt;1.15&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; / &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mn&gt;1.31&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Q1.31&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8778em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord"&gt;1.31&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 装不下，可选 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mn&gt;2.14&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Q2.14&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8778em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord"&gt;2.14&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; / &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mn&gt;2.30&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Q2.30&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8778em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord"&gt;2.30&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，或减少小数位换取幅值余量。&lt;/p&gt;
&lt;p&gt;定点导出共用 &lt;code&gt;fl_q.h&lt;/code&gt;，完整源码、下载和编译示例见&lt;a href="https://blog.simgor.cn/blog/c-libraries/#q-%e5%ae%9a%e7%82%b9"&gt;Q定点数C库&lt;/a&gt;。频响表示量化后的线性模型；饱和及极限环用时域模拟检查。&lt;/p&gt;
&lt;h2 data-hextra-search-id="c-接口"&gt;C 接口&lt;span class="hx:absolute hx:-mt-20" id="c-接口"&gt;&lt;/span&gt;
&lt;a href="#c-%e6%8e%a5%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;每通道一个 &lt;code&gt;Filter&lt;/code&gt;，以 fs 调用 &lt;code&gt;filter_step()&lt;/code&gt;。&lt;code&gt;filter_reset(&amp;amp;state, 0)&lt;/code&gt; 从零开始；传入首个样本值则初始化到对应直流稳态。&lt;/p&gt;
&lt;p&gt;头文件实现单个二阶节。多节级联时，各节独立保存系数和状态。本站 EMA、滑动平均与 Biquad 使用同名 API，分别选用。&lt;/p&gt;</description></item><item><title>EMA / 滑动平均</title><link>https://blog.simgor.cn/tools/digital-filter/</link><guid>https://blog.simgor.cn/tools/digital-filter/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="digital-filter" aria-label="EMA / 滑动平均"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="ema"&gt;EMA&lt;span class="hx:absolute hx:-mt-20" id="ema"&gt;&lt;/span&gt;
&lt;a href="#ema" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;y_n=y_{n-1}+\alpha(x_n-y_{n-1})&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.625em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0359em;"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7917em;vertical-align:-0.2083em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0359em;"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;span class="mbin mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.2083em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0037em;"&gt;α&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0359em;"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;span class="mbin mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.2083em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，保存一个历史输出。α 越小，平滑越强、响应越慢。&lt;/p&gt;
&lt;p&gt;按离散 −3 dB 截止频率求系数，令 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;sin&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;π&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;/msub&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;s=\sin(\pi f_{\mathrm c}/f_{\mathrm s})&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;s&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mop"&gt;sin&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0359em;"&gt;π&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msqrt&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/msqrt&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; \alpha=\frac{2s}{\sqrt{1+s^2}+s} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0037em;"&gt;α&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.2514em;vertical-align:-0.93em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3214em;"&gt;&lt;span style="top:-2.1966em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord sqrt"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.9134em;"&gt;&lt;span class="svg-align" style="top:-3em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord" style="padding-left:0.833em;"&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;s&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.7401em;"&gt;&lt;span style="top:-2.989em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.8734em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="hide-tail" style="min-width:0.853em;height:1.08em;"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"&gt;&lt;path d="M95,702
c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
c69,-144,104.5,-217.7,106.5,-221
l0 -0
c5.3,-9.3,12,-14,20,-14
H400000v40H845.2724
s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
M834 80h400000v40h-400000z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1266em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord mathnormal"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.93em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mtable rowspacing="0.25em" columnalign="center" columnspacing="0em"&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1000&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;z&lt;/mi&gt;&lt;/mrow&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mspace width="1em"/&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;z&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mo&gt;≈&lt;/mo&gt;&lt;mn&gt;0.0608792&lt;/mn&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;annotation encoding="application/x-tex"&gt; \begin{gathered} f_{\mathrm s}=1000\,\mathrm{Hz},\quad f_{\mathrm c}=10\,\mathrm{Hz}\\ \alpha\approx0.0608792 \end{gathered} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.7em;vertical-align:-1.1em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mtable"&gt;&lt;span class="col-align-c"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.6em;"&gt;&lt;span style="top:-3.76em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1000&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Hz&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:1em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;10&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Hz&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.26em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0037em;"&gt;α&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≈&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0.0608792&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.1em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;低频群延迟为 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;(1-\alpha)/(\alpha f_{\mathrm s})&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0037em;"&gt;α&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0037em;"&gt;α&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，随频率变化。&lt;/p&gt;
&lt;h2 data-hextra-search-id="滑动平均"&gt;滑动平均&lt;span class="hx:absolute hx:-mt-20" id="滑动平均"&gt;&lt;/span&gt;
&lt;a href="#%e6%bb%91%e5%8a%a8%e5%b9%b3%e5%9d%87" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;最近 N 个样本取均值，群延迟为 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;(N-1)/(2f_{\mathrm s})&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;N&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;；N ≥ 2 时，第一个零点为 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;f_{\mathrm s}/N&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;N&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。−3 dB 截止频率由离散频响求解。&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mtable rowspacing="0.25em" columnalign="center" columnspacing="0em"&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1000&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;z&lt;/mi&gt;&lt;/mrow&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mspace width="1em"/&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;16&lt;/mn&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;τ&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;g&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;7.5&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mspace width="1em"/&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;z&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;62.5&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;z&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;annotation encoding="application/x-tex"&gt; \begin{gathered} f_{\mathrm s}=1000\,\mathrm{Hz},\quad N=16\\ \tau_{\mathrm g}=7.5\,\mathrm{ms},\quad f_{\mathrm{zero}}=62.5\,\mathrm{Hz} \end{gathered} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.7em;vertical-align:-1.1em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mtable"&gt;&lt;span class="col-align-c"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.6em;"&gt;&lt;span style="top:-3.76em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1000&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Hz&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:1em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;N&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.26em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1132em;"&gt;τ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1132em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight" style="margin-right:0.0139em;"&gt;g&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.2861em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;7.5&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ms&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:1em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;zero&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;62.5&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Hz&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.1em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;N=1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6833em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;N&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 为直通。滑动平均有旁瓣，适合平滑及抑制与窗口对齐的周期干扰。&lt;/p&gt;
&lt;h2 data-hextra-search-id="c-接口"&gt;C 接口&lt;span class="hx:absolute hx:-mt-20" id="c-接口"&gt;&lt;/span&gt;
&lt;a href="#c-%e6%8e%a5%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;每通道一个 &lt;code&gt;Filter&lt;/code&gt;，以 fs 调用 &lt;code&gt;filter_step()&lt;/code&gt;。&lt;code&gt;filter_reset(&amp;amp;state, 0)&lt;/code&gt; 从零开始；传入首个样本值则从该直流值开始。&lt;/p&gt;
&lt;p&gt;滑动平均采用固定环形缓冲区；浮点版使用 double 累加器，定点版使用 int64_t 累加器。16 点 float 缓冲区占 64 字节，另加累加器和索引。两种头文件使用同名 API，按所需算法选用。&lt;/p&gt;
&lt;h2 data-hextra-search-id="q-定点"&gt;Q 定点&lt;span class="hx:absolute hx:-mt-20" id="q-定点"&gt;&lt;/span&gt;
&lt;a href="#q-%e5%ae%9a%e7%82%b9" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;在“数值格式”中选 Q 定点，可设 16 / 32 位与小数位数。&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;.&lt;/mi&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Qm.f&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord mathnormal"&gt;m&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 的 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 包含符号位，原始整数 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;r&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0278em;"&gt;r&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 表示 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;r/2^f&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.0991em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0278em;"&gt;r&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8491em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。默认 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mn&gt;4.28&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Q4.28&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8778em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord"&gt;4.28&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，范围 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-8\le x&amp;lt;8&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7804em;vertical-align:-0.136em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≤&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.5782em;vertical-align:-0.0391em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，分辨率 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;28&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;2^{-28}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8141em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;28&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;下载 &lt;code&gt;fl_filter.h&lt;/code&gt; 和公共 &lt;code&gt;fl_q.h&lt;/code&gt;，放在同一包含路径。公共头的完整源码、下载和编译示例见&lt;a href="https://blog.simgor.cn/blog/c-libraries/#q-%e5%ae%9a%e7%82%b9"&gt;Q定点数C库&lt;/a&gt;。&lt;code&gt;FilterSample&lt;/code&gt; 是原始定点整数；&lt;code&gt;fl_q_from_double(x, filter_q)&lt;/code&gt; / &lt;code&gt;fl_q_to_double(y, filter_q)&lt;/code&gt; 用于单位转换，采样循环只做整数运算。&lt;/p&gt;
&lt;p&gt;乘积最近舍入，半值远离零；宽累加后饱和。EMA 使用两项加权和，滑动平均保留精确整数和后除以 N。模拟器执行同一整数递推，超限时显示累计饱和次数。频响是量化系数的线性响应，限幅和极限环在时域波形中观察。&lt;/p&gt;
&lt;p&gt;二阶低通、高通、带通和陷波见 &lt;a href="https://blog.simgor.cn/tools/biquad-filter/"&gt;二阶数字滤波器&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>RC 滤波器</title><link>https://blog.simgor.cn/tools/rc-filter/</link><guid>https://blog.simgor.cn/tools/rc-filter/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="rc-filter" aria-label="RC 滤波器"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="接法与截止频率"&gt;接法与截止频率&lt;span class="hx:absolute hx:-mt-20" id="接法与截止频率"&gt;&lt;/span&gt;
&lt;a href="#%e6%8e%a5%e6%b3%95%e4%b8%8e%e6%88%aa%e6%ad%a2%e9%a2%91%e7%8e%87" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;低通：R 串联，C 对地，输出取 C 两端。&lt;/li&gt;
&lt;li&gt;高通：C 串联，R 对地，输出取 R 两端。&lt;/li&gt;
&lt;/ul&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;τ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mspace width="2em"/&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;π&lt;/mi&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; \tau=RC,\qquad f_{\mathrm c}=\frac{1}{2\pi RC} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1132em;"&gt;τ&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0077em;"&gt;R&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:2em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.0074em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3214em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0359em;"&gt;π&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0077em;"&gt;R&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mtable rowspacing="0.25em" columnalign="center" columnspacing="0em"&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;k&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;Ω&lt;/mi&gt;&lt;/mrow&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mspace width="1em"/&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;n&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;F&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;mi&gt;τ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;100&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;≈&lt;/mo&gt;&lt;mn&gt;1591.55&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;z&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;annotation encoding="application/x-tex"&gt; \begin{gathered} R=10\,\mathrm{k\Omega},\quad C=10\,\mathrm{nF}\\ \tau=100\,\mathrm{\mu s}\\ f_{\mathrm c}\approx1591.55\,\mathrm{Hz} \end{gathered} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:4.2em;vertical-align:-1.85em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mtable"&gt;&lt;span class="col-align-c"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:2.35em;"&gt;&lt;span style="top:-4.51em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0077em;"&gt;R&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;10&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;kΩ&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:1em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;10&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;nF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.01em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1132em;"&gt;τ&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;100&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;μ&lt;/span&gt;&lt;span class="mord mathrm"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-1.51em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≈&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1591.55&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Hz&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.85em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;截止点增益 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;3.0103&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;B&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-3.0103\,\mathrm{dB}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7778em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;3.0103&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;dB&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;；低通相位 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;45&lt;/mn&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-45^\circ&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7574em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;5&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.6741em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mbin mtight"&gt;∘&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，高通 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;45&lt;/mn&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;+45^\circ&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7574em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;+&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;5&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.6741em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mbin mtight"&gt;∘&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;h2 data-hextra-search-id="幅频响应"&gt;幅频响应&lt;span class="hx:absolute hx:-mt-20" id="幅频响应"&gt;&lt;/span&gt;
&lt;a href="#%e5%b9%85%e9%a2%91%e5%93%8d%e5%ba%94" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;令 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;x=f/f_{\mathrm c}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，低通幅度为 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;msqrt&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/msqrt&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;1/\sqrt{1+x^2}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.1634em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1/&lt;/span&gt;&lt;span class="mord sqrt"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.9134em;"&gt;&lt;span class="svg-align" style="top:-3em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord" style="padding-left:0.833em;"&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.7401em;"&gt;&lt;span style="top:-2.989em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.8734em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="hide-tail" style="min-width:0.853em;height:1.08em;"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"&gt;&lt;path d="M95,702
c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
c69,-144,104.5,-217.7,106.5,-221
l0 -0
c5.3,-9.3,12,-14,20,-14
H400000v40H845.2724
s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
M834 80h400000v40h-400000z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1266em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，高通为 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;msqrt&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/msqrt&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;x/\sqrt{1+x^2}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.1634em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord sqrt"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.9134em;"&gt;&lt;span class="svg-align" style="top:-3em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord" style="padding-left:0.833em;"&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.7401em;"&gt;&lt;span style="top:-2.989em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.8734em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="hide-tail" style="min-width:0.853em;height:1.08em;"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"&gt;&lt;path d="M95,702
c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
c69,-144,104.5,-217.7,106.5,-221
l0 -0
c5.3,-9.3,12,-14,20,-14
H400000v40H845.2724
s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
M834 80h400000v40h-400000z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1266em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，阻带斜率 20 dB/dec。&lt;/p&gt;
&lt;p&gt;模型采用理想电压源、空载输出。实际选用标准阻容值后，代回求 fc；带负载时将源阻抗与后级输入阻抗一起计入。&lt;/p&gt;
&lt;p&gt;采样数据平滑见 &lt;a href="https://blog.simgor.cn/tools/digital-filter/"&gt;EMA / 滑动平均&lt;/a&gt;。&lt;/p&gt;
&lt;h2 data-hextra-search-id="时域模拟"&gt;时域模拟&lt;span class="hx:absolute hx:-mt-20" id="时域模拟"&gt;&lt;/span&gt;
&lt;a href="#%e6%97%b6%e5%9f%9f%e6%a8%a1%e6%8b%9f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;RC 模型按分段恒定输入进行指数积分。静态显示完整时间窗；动态连续推进，可暂停、重播。阶跃和单点脉冲位于初始时间窗的四分之一处。&lt;/p&gt;</description></item><item><title>LIN 帧解析</title><link>https://blog.simgor.cn/tools/lin-frame/</link><guid>https://blog.simgor.cn/tools/lin-frame/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="lin-frame" aria-label="LIN 帧解析"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="输入格式"&gt;输入格式&lt;span class="hx:absolute hx:-mt-20" id="输入格式"&gt;&lt;/span&gt;
&lt;a href="#%e8%be%93%e5%85%a5%e6%a0%bc%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;单帧：&lt;code&gt;55 PID DATA… CHECKSUM&lt;/code&gt;。数据 1–8 字节，诊断帧固定 8 字节。Break 为独立的总线低电平段，字节输入从同步字节 &lt;code&gt;55&lt;/code&gt; 开始。&lt;/p&gt;
&lt;p&gt;例：&lt;code&gt;55 92 01 02 03 04 05 06 07 08 49&lt;/code&gt; → ID &lt;code&gt;0x12&lt;/code&gt;，8 字节数据，增强校验和 &lt;code&gt;0x49&lt;/code&gt;。&lt;/p&gt;
&lt;h2 data-hextra-search-id="最短帧时长"&gt;最短帧时长&lt;span class="hx:absolute hx:-mt-20" id="最短帧时长"&gt;&lt;/span&gt;
&lt;a href="#%e6%9c%80%e7%9f%ad%e5%b8%a7%e6%97%b6%e9%95%bf" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;帧头：13 bit Break + 1 bit delimiter + 10 bit SYNC + 10 bit PID = 34 bit。数据与校验和按 8N1，每字节 10 bit。&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi&gt;min&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;34&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;b&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;u&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; t_{\min} = \frac{34 + 10(N+1)}{\mathrm{baud}} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7651em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3175em;"&gt;&lt;span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mop mtight"&gt;&lt;span class="mtight"&gt;m&lt;/span&gt;&lt;span class="mtight"&gt;i&lt;/span&gt;&lt;span class="mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.113em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.427em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;baud&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;34&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;10&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;N&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;19200 baud、8 字节数据 → 6.458 ms。调度槽在此基础上增加响应间隔、字节间隔和余量。&lt;/p&gt;</description></item><item><title>LIN 校验和</title><link>https://blog.simgor.cn/tools/lin-checksum/</link><guid>https://blog.simgor.cn/tools/lin-checksum/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="lin-checksum" aria-label="LIN 校验和"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="累加规则"&gt;累加规则&lt;span class="hx:absolute hx:-mt-20" id="累加规则"&gt;&lt;/span&gt;
&lt;a href="#%e7%b4%af%e5%8a%a0%e8%a7%84%e5%88%99" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;逐字节累加；和大于 255 时减去 255，将进位回卷到最低位；最后按位取反。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;参与累加的字节&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;经典&lt;/td&gt;
&lt;td&gt;DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;增强&lt;/td&gt;
&lt;td&gt;PID + DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;诊断 ID &lt;code&gt;0x3C&lt;/code&gt;、&lt;code&gt;0x3D&lt;/code&gt; 固定使用经典模型，数据区为 8 字节。其他帧的模型和长度按 LDF 配置。&lt;/p&gt;
&lt;h2 data-hextra-search-id="算例"&gt;算例&lt;span class="hx:absolute hx:-mt-20" id="算例"&gt;&lt;/span&gt;
&lt;a href="#%e7%ae%97%e4%be%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;ID &lt;code&gt;0x12&lt;/code&gt;，PID &lt;code&gt;0x92&lt;/code&gt;，数据 &lt;code&gt;01 02 03 04 05 06 07 08&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;经典：数据和 &lt;code&gt;0x24&lt;/code&gt; → 校验和 &lt;code&gt;0xDB&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;增强：PID + 数据和 &lt;code&gt;0xB6&lt;/code&gt; → 校验和 &lt;code&gt;0x49&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;生成字节串采用 &lt;code&gt;55 PID DATA CHECKSUM&lt;/code&gt; 格式，可交给 &lt;a href="https://blog.simgor.cn/tools/lin-frame/"&gt;LIN 帧解析&lt;/a&gt; 复核。&lt;/p&gt;</description></item><item><title>LIN ID / PID</title><link>https://blog.simgor.cn/tools/lin-pid/</link><guid>https://blog.simgor.cn/tools/lin-pid/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="lin-pid" aria-label="LIN ID / PID"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;section class="reference-table"&gt;&lt;h2&gt;ID / PID 对照&lt;/h2&gt;&lt;div class="reference-scroll" role="region" aria-label="LIN 全部 ID/PID 对照表" tabindex="0"&gt;&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;ID HEX&lt;/th&gt;&lt;th scope="col"&gt;PID HEX&lt;/th&gt;&lt;th scope="col"&gt;ID HEX&lt;/th&gt;&lt;th scope="col"&gt;PID HEX&lt;/th&gt;&lt;th scope="col"&gt;ID HEX&lt;/th&gt;&lt;th scope="col"&gt;PID HEX&lt;/th&gt;&lt;th scope="col"&gt;ID HEX&lt;/th&gt;&lt;th scope="col"&gt;PID HEX&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;00&lt;/td&gt;&lt;td title="信号帧"&gt;80&lt;/td&gt;&lt;td title="信号帧"&gt;10&lt;/td&gt;&lt;td title="信号帧"&gt;50&lt;/td&gt;&lt;td title="信号帧"&gt;20&lt;/td&gt;&lt;td title="信号帧"&gt;20&lt;/td&gt;&lt;td title="信号帧"&gt;30&lt;/td&gt;&lt;td title="信号帧"&gt;F0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;01&lt;/td&gt;&lt;td title="信号帧"&gt;C1&lt;/td&gt;&lt;td title="信号帧"&gt;11&lt;/td&gt;&lt;td title="信号帧"&gt;11&lt;/td&gt;&lt;td title="信号帧"&gt;21&lt;/td&gt;&lt;td title="信号帧"&gt;61&lt;/td&gt;&lt;td title="信号帧"&gt;31&lt;/td&gt;&lt;td title="信号帧"&gt;B1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;02&lt;/td&gt;&lt;td title="信号帧"&gt;42&lt;/td&gt;&lt;td title="信号帧"&gt;12&lt;/td&gt;&lt;td title="信号帧"&gt;92&lt;/td&gt;&lt;td title="信号帧"&gt;22&lt;/td&gt;&lt;td title="信号帧"&gt;E2&lt;/td&gt;&lt;td title="信号帧"&gt;32&lt;/td&gt;&lt;td title="信号帧"&gt;32&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;03&lt;/td&gt;&lt;td title="信号帧"&gt;03&lt;/td&gt;&lt;td title="信号帧"&gt;13&lt;/td&gt;&lt;td title="信号帧"&gt;D3&lt;/td&gt;&lt;td title="信号帧"&gt;23&lt;/td&gt;&lt;td title="信号帧"&gt;A3&lt;/td&gt;&lt;td title="信号帧"&gt;33&lt;/td&gt;&lt;td title="信号帧"&gt;73&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;04&lt;/td&gt;&lt;td title="信号帧"&gt;C4&lt;/td&gt;&lt;td title="信号帧"&gt;14&lt;/td&gt;&lt;td title="信号帧"&gt;14&lt;/td&gt;&lt;td title="信号帧"&gt;24&lt;/td&gt;&lt;td title="信号帧"&gt;64&lt;/td&gt;&lt;td title="信号帧"&gt;34&lt;/td&gt;&lt;td title="信号帧"&gt;B4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;05&lt;/td&gt;&lt;td title="信号帧"&gt;85&lt;/td&gt;&lt;td title="信号帧"&gt;15&lt;/td&gt;&lt;td title="信号帧"&gt;55&lt;/td&gt;&lt;td title="信号帧"&gt;25&lt;/td&gt;&lt;td title="信号帧"&gt;25&lt;/td&gt;&lt;td title="信号帧"&gt;35&lt;/td&gt;&lt;td title="信号帧"&gt;F5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;06&lt;/td&gt;&lt;td title="信号帧"&gt;06&lt;/td&gt;&lt;td title="信号帧"&gt;16&lt;/td&gt;&lt;td title="信号帧"&gt;D6&lt;/td&gt;&lt;td title="信号帧"&gt;26&lt;/td&gt;&lt;td title="信号帧"&gt;A6&lt;/td&gt;&lt;td title="信号帧"&gt;36&lt;/td&gt;&lt;td title="信号帧"&gt;76&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;07&lt;/td&gt;&lt;td title="信号帧"&gt;47&lt;/td&gt;&lt;td title="信号帧"&gt;17&lt;/td&gt;&lt;td title="信号帧"&gt;97&lt;/td&gt;&lt;td title="信号帧"&gt;27&lt;/td&gt;&lt;td title="信号帧"&gt;E7&lt;/td&gt;&lt;td title="信号帧"&gt;37&lt;/td&gt;&lt;td title="信号帧"&gt;37&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;08&lt;/td&gt;&lt;td title="信号帧"&gt;08&lt;/td&gt;&lt;td title="信号帧"&gt;18&lt;/td&gt;&lt;td title="信号帧"&gt;D8&lt;/td&gt;&lt;td title="信号帧"&gt;28&lt;/td&gt;&lt;td title="信号帧"&gt;A8&lt;/td&gt;&lt;td title="信号帧"&gt;38&lt;/td&gt;&lt;td title="信号帧"&gt;78&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;09&lt;/td&gt;&lt;td title="信号帧"&gt;49&lt;/td&gt;&lt;td title="信号帧"&gt;19&lt;/td&gt;&lt;td title="信号帧"&gt;99&lt;/td&gt;&lt;td title="信号帧"&gt;29&lt;/td&gt;&lt;td title="信号帧"&gt;E9&lt;/td&gt;&lt;td title="信号帧"&gt;39&lt;/td&gt;&lt;td title="信号帧"&gt;39&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;0A&lt;/td&gt;&lt;td title="信号帧"&gt;CA&lt;/td&gt;&lt;td title="信号帧"&gt;1A&lt;/td&gt;&lt;td title="信号帧"&gt;1A&lt;/td&gt;&lt;td title="信号帧"&gt;2A&lt;/td&gt;&lt;td title="信号帧"&gt;6A&lt;/td&gt;&lt;td title="信号帧"&gt;3A&lt;/td&gt;&lt;td title="信号帧"&gt;BA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;0B&lt;/td&gt;&lt;td title="信号帧"&gt;8B&lt;/td&gt;&lt;td title="信号帧"&gt;1B&lt;/td&gt;&lt;td title="信号帧"&gt;5B&lt;/td&gt;&lt;td title="信号帧"&gt;2B&lt;/td&gt;&lt;td title="信号帧"&gt;2B&lt;/td&gt;&lt;td title="信号帧"&gt;3B&lt;/td&gt;&lt;td title="信号帧"&gt;FB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;0C&lt;/td&gt;&lt;td title="信号帧"&gt;4C&lt;/td&gt;&lt;td title="信号帧"&gt;1C&lt;/td&gt;&lt;td title="信号帧"&gt;9C&lt;/td&gt;&lt;td title="信号帧"&gt;2C&lt;/td&gt;&lt;td title="信号帧"&gt;EC&lt;/td&gt;&lt;td title="主节点诊断请求"&gt;3C&lt;/td&gt;&lt;td title="主节点诊断请求"&gt;3C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;0D&lt;/td&gt;&lt;td title="信号帧"&gt;0D&lt;/td&gt;&lt;td title="信号帧"&gt;1D&lt;/td&gt;&lt;td title="信号帧"&gt;DD&lt;/td&gt;&lt;td title="信号帧"&gt;2D&lt;/td&gt;&lt;td title="信号帧"&gt;AD&lt;/td&gt;&lt;td title="从节点诊断响应"&gt;3D&lt;/td&gt;&lt;td title="从节点诊断响应"&gt;7D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;0E&lt;/td&gt;&lt;td title="信号帧"&gt;8E&lt;/td&gt;&lt;td title="信号帧"&gt;1E&lt;/td&gt;&lt;td title="信号帧"&gt;5E&lt;/td&gt;&lt;td title="信号帧"&gt;2E&lt;/td&gt;&lt;td title="信号帧"&gt;2E&lt;/td&gt;&lt;td title="保留 ID"&gt;3E&lt;/td&gt;&lt;td title="保留 ID"&gt;FE&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td title="信号帧"&gt;0F&lt;/td&gt;&lt;td title="信号帧"&gt;CF&lt;/td&gt;&lt;td title="信号帧"&gt;1F&lt;/td&gt;&lt;td title="信号帧"&gt;1F&lt;/td&gt;&lt;td title="信号帧"&gt;2F&lt;/td&gt;&lt;td title="信号帧"&gt;6F&lt;/td&gt;&lt;td title="保留 ID"&gt;3F&lt;/td&gt;&lt;td title="保留 ID"&gt;BF&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;p&gt;3C / 3D 为诊断 ID；3E / 3F 为保留 ID。&lt;/p&gt;&lt;/section&gt;
&lt;h2 data-hextra-search-id="位定义"&gt;位定义&lt;span class="hx:absolute hx:-mt-20" id="位定义"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%8d%e5%ae%9a%e4%b9%89" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;ID 占低 6 位，范围 0–63。PID 在 ID 上增加两位校验：bit 6 为 P0，bit 7 为 P1。&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;⊕&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;⊕&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;⊕&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; P_0 = \mathrm{ID}_0 \oplus \mathrm{ID}_1 \oplus \mathrm{ID}_2 \oplus \mathrm{ID}_4 &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;P&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;
&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant="normal"&gt;¬&lt;/mi&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;⊕&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;⊕&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;⊕&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;I&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;/msub&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; P_1 = \neg(\mathrm{ID}_1 \oplus \mathrm{ID}_3 \oplus \mathrm{ID}_4 \oplus \mathrm{ID}_5) &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;P&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;例：ID &lt;code&gt;0x12&lt;/code&gt; → P0 = 0、P1 = 1 → PID &lt;code&gt;0x92&lt;/code&gt;。&lt;/p&gt;
&lt;h2 data-hextra-search-id="特殊-id"&gt;特殊 ID&lt;span class="hx:absolute hx:-mt-20" id="特殊-id"&gt;&lt;/span&gt;
&lt;a href="#%e7%89%b9%e6%ae%8a-id" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;PID&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x3C&lt;/td&gt;
&lt;td&gt;0x3C&lt;/td&gt;
&lt;td&gt;主节点诊断请求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x3D&lt;/td&gt;
&lt;td&gt;0x7D&lt;/td&gt;
&lt;td&gt;从节点诊断响应&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x3E / 0x3F&lt;/td&gt;
&lt;td&gt;0xFE / 0xBF&lt;/td&gt;
&lt;td&gt;保留&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;lin_make_pid()&lt;/code&gt; 输入 6 位 ID，输出 PID。&lt;code&gt;lin_checksum()&lt;/code&gt; 输入完整 PID 和数据，详见 &lt;a href="https://blog.simgor.cn/tools/lin-checksum/"&gt;LIN 校验和&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>Q定点数C库</title><link>https://blog.simgor.cn/blog/c-libraries/</link><guid>https://blog.simgor.cn/blog/c-libraries/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;p&gt;Q 定点滤波器共用 &lt;code&gt;fl_q.h&lt;/code&gt;。C99，&lt;a href="https://blog.simgor.cn/toolkit/include/LICENSE.txt"&gt;MIT 许可证&lt;/a&gt;。&lt;/p&gt;
&lt;h2 data-hextra-search-id="q-定点"&gt;Q 定点&lt;span class="hx:absolute hx:-mt-20" id="q-定点"&gt;&lt;/span&gt;
&lt;a href="#q-%e5%ae%9a%e7%82%b9" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;格式转换、加减乘除和饱和运算均在头文件中，包含后即可调用。&lt;/p&gt;
&lt;div class="library-file" data-library-file="fl_q.h"&gt;&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="LyoqCiAqIEBmaWxlIGZsX3EuaAogKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICogQGJyaWVmIFNoYXJlZCBzaWduZWQgUSBhcml0aG1ldGljLCBDOTksIHZlcnNpb24gMS4KICogQGRldGFpbHMgUW0uZiBpbmNsdWRlcyB0aGUgc2lnbiBiaXQgaW4gbTsgbSArIGYgPSBiaXRzLgogKiAgICAgICAgICBSYXcgdmFsdWUgciByZXByZXNlbnRzIHIgLyAyXmYuIFN0b3JhZ2U6IDE2IG9yIDMyIGJpdHM7CiAqICAgICAgICAgIGZyYWN0aW9uYWwgYml0czogMi4uYml0cy0xLiBpbnQzMl90IGNhcnJpZXMgZWl0aGVyIGZvcm1hdC4KICogICAgICAgICAgUm91bmQgdG8gbmVhcmVzdCwgdGllcyBhd2F5IGZyb20gemVybzsgc2F0dXJhdGUgYXQgc3RvcmFnZSBsaW1pdHMuCiAqICAgICAgICAgIE5vIGdsb2JhbCBmb3JtYXQgbWFjcm9zLiBEaWZmZXJlbnQgZm9ybWF0cyBtYXkgY29leGlzdC4KICovCiNpZm5kZWYgRkxfUV9ICiNkZWZpbmUgRkxfUV9ICgojaW5jbHVkZSA8c3RkaW50Lmg&amp;#43;CgovKiogQGJyaWVmIFNpZ25lZCBzdG9yYWdlIHdpZHRoIGFuZCBmcmFjdGlvbmFsIGJpdCBjb3VudC4gKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgdWludDhfdCBiaXRzOyAvKio8IFN0b3JhZ2Ugd2lkdGg6IDE2IG9yIDMyLiAqLwogICAgdWludDhfdCBmcmFjOyAvKio8IEZyYWN0aW9uYWwgYml0czogMi4uYml0cy0xLiAqLwp9IGZsX3FfZm9ybWF0X3Q7CgovKioKICogQGJyaWVmIFRlc3QgYSBmb3JtYXQgYmVmb3JlIHVzaW5nIGFyaXRobWV0aWMgZnVuY3Rpb25zLgogKiBAcGFyYW1baW5dIHEgRm9ybWF0IHRvIHZhbGlkYXRlLgogKiBAcmV0dXJuIE5vbnplcm8gZm9yIGEgc3VwcG9ydGVkIGZvcm1hdDsgemVybyBvdGhlcndpc2UuCiAqIEBub3RlIEFsbCBvdGhlciBmdW5jdGlvbnMgcmVxdWlyZSBhIHZhbGlkIGZvcm1hdCBhbmQgcmF3IG9wZXJhbmRzIGluIHJhbmdlLgogKi8Kc3RhdGljIGlubGluZSBpbnQgZmxfcV92YWxpZChmbF9xX2Zvcm1hdF90IHEpCnsKICAgIHJldHVybiAocS5iaXRzID09IDE2dSB8fCBxLmJpdHMgPT0gMzJ1KSAmJiBxLmZyYWMgPj0gMnUgJiYgcS5mcmFjIDwgcS5iaXRzOwp9CgovKioKICogQGJyaWVmIFNhdHVyYXRlIGEgd2lkZSByYXcgcmVzdWx0IHRvIGEgZm9ybWF0J3Mgc2lnbmVkIHN0b3JhZ2UgbGltaXRzLgogKiBAcGFyYW1baW5dIHZhbHVlIFdpZGUgcmF3IHJlc3VsdC4KICogQHBhcmFtW2luXSBxIFZhbGlkIGRlc3RpbmF0aW9uIGZvcm1hdC4KICogQHJldHVybiBTYXR1cmF0ZWQgcmF3IHZhbHVlLgogKi8Kc3RhdGljIGlubGluZSBpbnQzMl90IGZsX3Ffc2F0KGludDY0X3QgdmFsdWUsIGZsX3FfZm9ybWF0X3QgcSkKewogICAgY29uc3QgaW50NjRfdCBsaW1pdCA9IElOVDY0X0MoMSkgPDwgKHEuYml0cyAtIDF1KTsKICAgIGlmICh2YWx1ZSA&amp;#43;PSBsaW1pdCkKICAgIHsKICAgICAgICByZXR1cm4gKGludDMyX3QpKGxpbWl0IC0gMSk7CiAgICB9CiAgICBpZiAodmFsdWUgPCAtbGltaXQpCiAgICB7CiAgICAgICAgcmV0dXJuIChpbnQzMl90KS1saW1pdDsKICAgIH0KICAgIHJldHVybiAoaW50MzJfdCl2YWx1ZTsKfQoKLyoqCiAqIEBicmllZiBEaXZpZGUgYSB3aWRlIGludGVnZXIsIHJvdW5kaW5nIG5lYXJlc3Qgd2l0aCB0aWVzIGF3YXkgZnJvbSB6ZXJvLgogKiBAcGFyYW1baW5dIHZhbHVlIFNpZ25lZCBudW1lcmF0b3IsIGluY2x1ZGluZyBJTlQ2NF9NSU4uCiAqIEBwYXJhbVtpbl0gZGl2aXNvciBQb3NpdGl2ZSBkZW5vbWluYXRvci4KICogQHJldHVybiBSb3VuZGVkIGludGVnZXIgcXVvdGllbnQuCiAqLwpzdGF0aWMgaW5saW5lIGludDY0X3QgZmxfcV9yb3VuZF9kaXYoaW50NjRfdCB2YWx1ZSwgaW50NjRfdCBkaXZpc29yKQp7CiAgICBpbnQ2NF90IHJlc3VsdCA9IHZhbHVlIC8gZGl2aXNvcjsKICAgIGNvbnN0IGludDY0X3QgcmVtYWluZGVyID0gdmFsdWUgJSBkaXZpc29yOwogICAgY29uc3QgaW50NjRfdCB0aHJlc2hvbGQgPSBkaXZpc29yIC8gMiArIGRpdmlzb3IgJSAyOwogICAgaWYgKHJlbWFpbmRlciA&amp;#43;PSB0aHJlc2hvbGQpCiAgICB7CiAgICAgICAgKytyZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChyZW1haW5kZXIgPD0gLXRocmVzaG9sZCkKICAgIHsKICAgICAgICAtLXJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCi8qKgogKiBAYnJpZWYgTXVsdGlwbHkgcmF3IHZhbHVlczsgcmV0YWluIGEgd2lkZSByZXN1bHQgaW4gdGhlIG9yaWdpbmFsIFEgdW5pdHMuCiAqIEBwYXJhbVtpbl0gYSBGaXJzdCByYXcgb3BlcmFuZC4KICogQHBhcmFtW2luXSBiIFNlY29uZCByYXcgb3BlcmFuZCBpbiB0aGUgc2FtZSBmb3JtYXQuCiAqIEBwYXJhbVtpbl0gcSBWYWxpZCBvcGVyYW5kIGZvcm1hdC4KICogQHJldHVybiBSb3VuZGVkIHByb2R1Y3Qgd2l0aG91dCBzdG9yYWdlIHNhdHVyYXRpb24uCiAqIEBub3RlIFdpdGggZnJhYyA&amp;#43;PSAyLCBmaXZlIHN1Y2ggcHJvZHVjdHMgZml0IGFuIGludDY0X3QgYWNjdW11bGF0b3IuCiAqLwpzdGF0aWMgaW5saW5lIGludDY0X3QgZmxfcV9tdWxfd2lkZShpbnQzMl90IGEsIGludDMyX3QgYiwgZmxfcV9mb3JtYXRfdCBxKQp7CiAgICByZXR1cm4gZmxfcV9yb3VuZF9kaXYoKGludDY0X3QpYSAqIGIsIElOVDY0X0MoMSkgPDwgcS5mcmFjKTsKfQoKLyoqCiAqIEBicmllZiBBZGQgdHdvIHJhdyB2YWx1ZXMgd2l0aCBzYXR1cmF0aW9uLgogKiBAcGFyYW1baW5dIGEgRmlyc3QgcmF3IG9wZXJhbmQuCiAqIEBwYXJhbVtpbl0gYiBTZWNvbmQgcmF3IG9wZXJhbmQuCiAqIEBwYXJhbVtpbl0gcSBWYWxpZCBvcGVyYW5kIGZvcm1hdC4KICogQHJldHVybiBTYXR1cmF0ZWQgc3VtLgogKi8Kc3RhdGljIGlubGluZSBpbnQzMl90IGZsX3FfYWRkKGludDMyX3QgYSwgaW50MzJfdCBiLCBmbF9xX2Zvcm1hdF90IHEpCnsKICAgIHJldHVybiBmbF9xX3NhdCgoaW50NjRfdClhICsgYiwgcSk7Cn0KCi8qKgogKiBAYnJpZWYgU3VidHJhY3QgdHdvIHJhdyB2YWx1ZXMgd2l0aCBzYXR1cmF0aW9uLgogKiBAcGFyYW1baW5dIGEgUmF3IG1pbnVlbmQuCiAqIEBwYXJhbVtpbl0gYiBSYXcgc3VidHJhaGVuZC4KICogQHBhcmFtW2luXSBxIFZhbGlkIG9wZXJhbmQgZm9ybWF0LgogKiBAcmV0dXJuIFNhdHVyYXRlZCBkaWZmZXJlbmNlLgogKi8Kc3RhdGljIGlubGluZSBpbnQzMl90IGZsX3Ffc3ViKGludDMyX3QgYSwgaW50MzJfdCBiLCBmbF9xX2Zvcm1hdF90IHEpCnsKICAgIHJldHVybiBmbF9xX3NhdCgoaW50NjRfdClhIC0gYiwgcSk7Cn0KCi8qKgogKiBAYnJpZWYgTXVsdGlwbHkgdHdvIHJhdyB2YWx1ZXMgd2l0aCByb3VuZGluZyBhbmQgc2F0dXJhdGlvbi4KICogQHBhcmFtW2luXSBhIEZpcnN0IHJhdyBvcGVyYW5kLgogKiBAcGFyYW1baW5dIGIgU2Vjb25kIHJhdyBvcGVyYW5kLgogKiBAcGFyYW1baW5dIHEgVmFsaWQgb3BlcmFuZCBmb3JtYXQuCiAqIEByZXR1cm4gU2F0dXJhdGVkIHByb2R1Y3QgaW4gdGhlIHNhbWUgUSBmb3JtYXQuCiAqLwpzdGF0aWMgaW5saW5lIGludDMyX3QgZmxfcV9tdWwoaW50MzJfdCBhLCBpbnQzMl90IGIsIGZsX3FfZm9ybWF0X3QgcSkKewogICAgcmV0dXJuIGZsX3Ffc2F0KGZsX3FfbXVsX3dpZGUoYSwgYiwgcSksIHEpOwp9CgovKioKICogQGJyaWVmIERpdmlkZSB0d28gcmF3IHZhbHVlcyB3aXRoIHJvdW5kaW5nIGFuZCBzYXR1cmF0aW9uLgogKiBAcGFyYW1baW5dIGEgUmF3IG51bWVyYXRvci4KICogQHBhcmFtW2luXSBiIE5vbnplcm8gcmF3IGRlbm9taW5hdG9yIGluIHRoZSBzYW1lIGZvcm1hdC4KICogQHBhcmFtW2luXSBxIFZhbGlkIG9wZXJhbmQgZm9ybWF0LgogKiBAcmV0dXJuIFNhdHVyYXRlZCBxdW90aWVudCBpbiB0aGUgc2FtZSBRIGZvcm1hdC4KICovCnN0YXRpYyBpbmxpbmUgaW50MzJfdCBmbF9xX2RpdihpbnQzMl90IGEsIGludDMyX3QgYiwgZmxfcV9mb3JtYXRfdCBxKQp7CiAgICBpbnQ2NF90IG51bWVyYXRvciA9IChpbnQ2NF90KWEgKiAoSU5UNjRfQygxKSA8PCBxLmZyYWMpOwogICAgaW50NjRfdCBkZW5vbWluYXRvciA9IGI7CiAgICBpZiAoZGVub21pbmF0b3IgPCAwKQogICAgewogICAgICAgIG51bWVyYXRvciA9IC1udW1lcmF0b3I7CiAgICAgICAgZGVub21pbmF0b3IgPSAtZGVub21pbmF0b3I7CiAgICB9CiAgICByZXR1cm4gZmxfcV9zYXQoZmxfcV9yb3VuZF9kaXYobnVtZXJhdG9yLCBkZW5vbWluYXRvciksIHEpOwp9CgovKioKICogQGJyaWVmIENvbnZlcnQgYW4gYXBwbGljYXRpb24gdmFsdWUgdG8gcmF3IFEsIHJvdW5kaW5nIGFuZCBzYXR1cmF0aW5nLgogKiBAcGFyYW1baW5dIHZhbHVlIEFwcGxpY2F0aW9uIHZhbHVlOyBOYU4gbWFwcyB0byB6ZXJvLCBpbmZpbml0aWVzIHNhdHVyYXRlLgogKiBAcGFyYW1baW5dIHEgVmFsaWQgZGVzdGluYXRpb24gZm9ybWF0LgogKiBAcmV0dXJuIFJhdyBRIHZhbHVlOyB0aGUgZmlsdGVyJ3Mgc2FtcGxlIGxvb3AgbmVlZHMgbm8gZmxvYXRpbmcgYXJpdGhtZXRpYy4KICovCnN0YXRpYyBpbmxpbmUgaW50MzJfdCBmbF9xX2Zyb21fZG91YmxlKGRvdWJsZSB2YWx1ZSwgZmxfcV9mb3JtYXRfdCBxKQp7CiAgICBjb25zdCBkb3VibGUgc2NhbGVkID0gdmFsdWUgKiAoZG91YmxlKShJTlQ2NF9DKDEpIDw8IHEuZnJhYyk7CiAgICBjb25zdCBpbnQ2NF90IGxpbWl0ID0gSU5UNjRfQygxKSA8PCAocS5iaXRzIC0gMXUpOwogICAgaWYgKHNjYWxlZCAhPSBzY2FsZWQpCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoc2NhbGVkID49IChkb3VibGUpKGxpbWl0IC0gMSkpCiAgICB7CiAgICAgICAgcmV0dXJuIChpbnQzMl90KShsaW1pdCAtIDEpOwogICAgfQogICAgaWYgKHNjYWxlZCA8PSAoZG91YmxlKS1saW1pdCkKICAgIHsKICAgICAgICByZXR1cm4gKGludDMyX3QpLWxpbWl0OwogICAgfQogICAgcmV0dXJuIGZsX3Ffc2F0KChpbnQ2NF90KShzY2FsZWQgPCAwID8gc2NhbGVkIC0gMC41IDogc2NhbGVkICsgMC41KSwgcSk7Cn0KCi8qKgogKiBAYnJpZWYgQ29udmVydCBhIHJhdyBRIHZhbHVlIHRvIGFwcGxpY2F0aW9uIHVuaXRzLgogKiBAcGFyYW1baW5dIHJhdyBSYXcgUSB2YWx1ZS4KICogQHBhcmFtW2luXSBxIFZhbGlkIHNvdXJjZSBmb3JtYXQuCiAqIEByZXR1cm4gVmFsdWUgZGl2aWRlZCBieSAyXmZyYWMuCiAqLwpzdGF0aWMgaW5saW5lIGRvdWJsZSBmbF9xX3RvX2RvdWJsZShpbnQzMl90IHJhdywgZmxfcV9mb3JtYXRfdCBxKQp7CiAgICByZXR1cm4gKGRvdWJsZSlyYXcgLyAoZG91YmxlKShJTlQ2NF9DKDEpIDw8IHEuZnJhYyk7Cn0KCiNlbmRpZiAvKiBGTF9RX0ggKi8K"&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;fl_q.h&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;a class="library-download" href="https://blog.simgor.cn/toolkit/include/fl_q.h" download="fl_q.h"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="download" focusable="false"&gt;&lt;path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"&gt;&lt;/path&gt;&lt;/svg&gt;下载 fl_q.h&lt;/a&gt;
&lt;/div&gt;&lt;details class="library-source" open&gt;&lt;summary&gt;源码&lt;/summary&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @file fl_q.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @copyright SPDX-License-Identifier: MIT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Shared signed Q arithmetic, C99, version 1.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @details Qm.f includes the sign bit in m; m + f = bits.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Raw value r represents r / 2^f. Storage: 16 or 32 bits;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * fractional bits: 2..bits-1. int32_t carries either format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Round to nearest, ties away from zero; saturate at storage limits.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * No global format macros. Different formats may coexist.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#ifndef FL_Q_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define FL_Q_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/** @brief Signed storage width and fractional bit count. */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/**&amp;lt; Storage width: 16 or 32. */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;frac&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/**&amp;lt; Fractional bits: 2..bits-1. */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Test a format before using arithmetic functions.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Format to validate.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Nonzero for a supported format; zero otherwise.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @note All other functions require a valid format and raw operands in range.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;fl_q_valid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;16u&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;32u&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frac&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;2u&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frac&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Saturate a wide raw result to a format&amp;#39;s signed storage limits.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] value Wide raw result.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid destination format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Saturated raw value.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_sat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;INT64_C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Divide a wide integer, rounding nearest with ties away from zero.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] value Signed numerator, including INT64_MIN.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] divisor Positive denominator.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Rounded integer quotient.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_round_div&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;divisor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;divisor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;remainder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;divisor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;divisor&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;divisor&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remainder&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remainder&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Multiply raw values; retain a wide result in the original Q units.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] a First raw operand.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] b Second raw operand in the same format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid operand format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Rounded product without storage saturation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @note With frac &amp;gt;= 2, five such products fit an int64_t accumulator.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_mul_wide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fl_q_round_div&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;INT64_C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frac&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Add two raw values with saturation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] a First raw operand.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] b Second raw operand.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid operand format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Saturated sum.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fl_q_sat&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Subtract two raw values with saturation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] a Raw minuend.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] b Raw subtrahend.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid operand format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Saturated difference.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fl_q_sat&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Multiply two raw values with rounding and saturation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] a First raw operand.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] b Second raw operand.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid operand format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Saturated product in the same Q format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_mul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fl_q_sat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;fl_q_mul_wide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Divide two raw values with rounding and saturation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] a Raw numerator.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] b Nonzero raw denominator in the same format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid operand format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Saturated quotient in the same Q format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_div&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;numerator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;INT64_C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frac&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;denominator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;denominator&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;numerator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;numerator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;denominator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;denominator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fl_q_sat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;fl_q_round_div&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numerator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;denominator&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Convert an application value to raw Q, rounding and saturating.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] value Application value; NaN maps to zero, infinities saturate.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid destination format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Raw Q value; the filter&amp;#39;s sample loop needs no floating arithmetic.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="nf"&gt;fl_q_from_double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;scaled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nf"&gt;INT64_C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frac&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;INT64_C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scaled&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;scaled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scaled&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scaled&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fl_q_sat&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;scaled&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;scaled&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scaled&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Convert a raw Q value to application units.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] raw Raw Q value.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param[in] q Valid source format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Value divided by 2^frac.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="nf"&gt;fl_q_to_double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nf"&gt;INT64_C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frac&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#endif &lt;/span&gt;&lt;span class="cm"&gt;/* FL_Q_H */&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/details&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;.&lt;/mi&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;Qm.f&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord mathnormal"&gt;m&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 的 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 包含符号位，原始整数 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;r&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0278em;"&gt;r&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 表示：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/msup&gt;&lt;/mfrac&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mspace width="2em"/&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; x=\frac{r}{2^f},\qquad -2^{m-1}\le x\le 2^{m-1}-2^{-f} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.7936em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.1076em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.7751em;"&gt;&lt;span style="top:-2.989em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0278em;"&gt;r&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:2em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8641em;"&gt;&lt;span style="top:-3.113em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;m&lt;/span&gt;&lt;span class="mbin mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≤&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7719em;vertical-align:-0.136em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≤&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.9474em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8641em;"&gt;&lt;span style="top:-3.113em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;m&lt;/span&gt;&lt;span class="mbin mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8991em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8991em;"&gt;&lt;span style="top:-3.113em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;存储位宽&lt;/th&gt;
&lt;th&gt;小数位&lt;/th&gt;
&lt;th&gt;范围&lt;/th&gt;
&lt;th&gt;分辨率&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Q2.14&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy="false"&gt;[&lt;/mo&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;14&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo stretchy="false"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;[-2,\;2-2^{-14}]&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;[&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.0641em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;14&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;14&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;2^{-14}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8141em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;14&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q4.28&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy="false"&gt;[&lt;/mo&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;28&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo stretchy="false"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;[-8,\;8-2^{-28}]&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;[&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.0641em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;28&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;28&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;2^{-28}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8141em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;28&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q16.16&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy="false"&gt;[&lt;/mo&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;32768&lt;/mn&gt;&lt;mo separator="true"&gt;,&lt;/mo&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mn&gt;32768&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;16&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo stretchy="false"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;[-32768,\;32768-2^{-16}]&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;[&lt;/span&gt;&lt;span class="mord"&gt;−&lt;/span&gt;&lt;span class="mord"&gt;32768&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;32768&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.0641em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;16&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;2^{-16}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8141em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;−&lt;/span&gt;&lt;span class="mord mtight"&gt;16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;fl_q_format_t&lt;/code&gt; 的两个字段为存储位宽和小数位，&lt;code&gt;{32u, 28u}&lt;/code&gt; 对应 Q4.28。存储位宽可选 16 / 32，小数位范围为 2 至位宽减 1。&lt;/p&gt;
&lt;p&gt;原始值以 &lt;code&gt;int32_t&lt;/code&gt; 传递，宽结果使用 &lt;code&gt;int64_t&lt;/code&gt;。运算采用最近舍入，半值远离零；超出存储范围时饱和。&lt;/p&gt;
&lt;h2 data-hextra-search-id="接口"&gt;接口&lt;span class="hx:absolute hx:-mt-20" id="接口"&gt;&lt;/span&gt;
&lt;a href="#%e6%8e%a5%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;接口&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_valid(q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;检查格式参数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_from_double(x, q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数值转原始整数，舍入、饱和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_to_double(raw, q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;原始整数转应用数值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_add(a, b, q)&lt;/code&gt; / &lt;code&gt;fl_q_sub(a, b, q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;饱和加减&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_mul(a, b, q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;舍入、饱和乘法&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_div(a, b, q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;舍入、饱和除法，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant="normal"&gt;≠&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;b\ne0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&lt;span class="mrel"&gt;&lt;span class="mord katex-vbox"&gt;&lt;span class="katex-thinbox"&gt;&lt;span class="rlap"&gt;&lt;span class="katex-strut" style="height:0.8889em;vertical-align:-0.1944em;"&gt;&lt;/span&gt;&lt;span class="katex-inner"&gt;&lt;span class="mord"&gt;&lt;span class="mrel"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-fix"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace nobreak"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_mul_wide(a, b, q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;宽乘积，供累加后统一饱和&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_sat(raw, q)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;宽原始值转存储范围&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fl_q_round_div(raw, divisor)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;整数舍入除法，&lt;code&gt;divisor &amp;gt; 0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;加减乘除的两个操作数使用同一 Q 格式。浮点转换放在输入、输出处，滤波循环使用整数运算。&lt;/p&gt;
&lt;h2 data-hextra-search-id="最小示例"&gt;最小示例&lt;span class="hx:absolute hx:-mt-20" id="最小示例"&gt;&lt;/span&gt;
&lt;a href="#%e6%9c%80%e5%b0%8f%e7%a4%ba%e4%be%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;下载 &lt;code&gt;fl_q.h&lt;/code&gt; 和 &lt;code&gt;q_demo.c&lt;/code&gt; 到同一目录：&lt;/p&gt;
&lt;div class="library-file" data-library-file="q_demo.c"&gt;&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="LyoqCiAqIEBmaWxlIHFfZGVtby5jCiAqIEBicmllZiBNdWx0aXBseSB0d28gYXBwbGljYXRpb24gdmFsdWVzIHVzaW5nIFE0LjI4IGFyaXRobWV0aWMsIEM5OS4KICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCiAqLwoKI2luY2x1ZGUgImZsX3EuaCIKI2luY2x1ZGUgPGludHR5cGVzLmg&amp;#43;CiNpbmNsdWRlIDxzdGRpby5oPgoKLyoqCiAqIEBicmllZiBDb252ZXJ0LCBtdWx0aXBseSBhbmQgcHJpbnQgYSByYXcgUSB2YWx1ZSBhbmQgaXRzIGFwcGxpY2F0aW9uIHZhbHVlLgogKiBAcmV0dXJuIFplcm8gYWZ0ZXIgd3JpdGluZyB0aGUgcmVzdWx0IHRvIHN0YW5kYXJkIG91dHB1dC4KICovCmludCBtYWluKHZvaWQpCnsKICAgIGNvbnN0IGZsX3FfZm9ybWF0X3QgcSA9IHszMnUsIDI4dX07CiAgICBjb25zdCBpbnQzMl90IGlucHV0ID0gZmxfcV9mcm9tX2RvdWJsZSgwLjUsIHEpOwogICAgY29uc3QgaW50MzJfdCBnYWluID0gZmxfcV9mcm9tX2RvdWJsZSgwLjI1LCBxKTsKICAgIGNvbnN0IGludDMyX3Qgb3V0cHV0ID0gZmxfcV9tdWwoaW5wdXQsIGdhaW4sIHEpOwoKICAgIHByaW50ZigiJSIgUFJJZDMyICIgJS4xN2dcbiIsIG91dHB1dCwgZmxfcV90b19kb3VibGUob3V0cHV0LCBxKSk7CiAgICByZXR1cm4gMDsKfQo="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;q_demo.c&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;a class="library-download" href="https://blog.simgor.cn/toolkit/examples/q_demo.c" download="q_demo.c"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="download" focusable="false"&gt;&lt;path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"&gt;&lt;/path&gt;&lt;/svg&gt;下载 q_demo.c&lt;/a&gt;
&lt;/div&gt;&lt;details class="library-source" open&gt;&lt;summary&gt;源码&lt;/summary&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @file q_demo.c
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Multiply two application values using Q4.28 arithmetic, C99.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @copyright SPDX-License-Identifier: MIT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;fl_q.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;inttypes.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Convert, multiply and print a raw Q value and its application value.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Zero after writing the result to standard output.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;fl_q_format_t&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;32u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;28u&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fl_q_from_double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;gain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fl_q_from_double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fl_q_mul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;PRId32&lt;/span&gt; &lt;span class="s"&gt;&amp;#34; %.17g&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;fl_q_to_double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/details&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="Y2MgLXN0ZD1jOTkgLVdhbGwgLVdleHRyYSBxX2RlbW8uYyAtbyBxX2RlbW8="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;sh&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cc -std&lt;span class="o"&gt;=&lt;/span&gt;c99 -Wall -Wextra q_demo.c -o q_demo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;运行 &lt;code&gt;q_demo&lt;/code&gt;：&lt;/p&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="MzM1NTQ0MzIgMC4xMjU="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;text&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;33554432 0.125&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;两列分别为原始整数和数值：&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0.5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;0.25&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0.125&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;0.5\times0.25=0.125&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7278em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0.5&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0.25&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0.125&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0.125&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;28&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;33554432&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;0.125\times2^{28}=33554432&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.7278em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0.125&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8141em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;28&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;33554432&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。&lt;/p&gt;
&lt;h2 data-hextra-search-id="接入滤波器"&gt;接入滤波器&lt;span class="hx:absolute hx:-mt-20" id="接入滤波器"&gt;&lt;/span&gt;
&lt;a href="#%e6%8e%a5%e5%85%a5%e6%bb%a4%e6%b3%a2%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;从 &lt;a href="https://blog.simgor.cn/tools/digital-filter/#precision=q"&gt;EMA / 滑动平均&lt;/a&gt; 或 &lt;a href="https://blog.simgor.cn/tools/biquad-filter/#precision=q"&gt;二阶数字滤波器&lt;/a&gt; 导出 Q 定点代码，将三个文件放在同一目录：&lt;/p&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="ZmxfcS5oCmZsX2ZpbHRlci5oCmZpbHRlcl9kZW1vLmM="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;text&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fl_q.h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fl_filter.h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;filter_demo.c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="library-file" data-library-file="filter_demo.c"&gt;&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="LyoqCiAqIEBmaWxlIGZpbHRlcl9kZW1vLmMKICogQGJyaWVmIFJ1biBhIHN0ZXAgdGhyb3VnaCBhIHRvb2wtZXhwb3J0ZWQgUSBmaWx0ZXIsIEM5OS4KICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCiAqIEBkZXRhaWxzIFBsYWNlIGZsX2ZpbHRlci5oIGFuZCBmbF9xLmggaW4gdGhlIHNhbWUgaW5jbHVkZSBkaXJlY3RvcnkuCiAqLwoKI2luY2x1ZGUgImZsX2ZpbHRlci5oIgojaW5jbHVkZSA8c3RkaW8uaD4KCi8qKgogKiBAYnJpZWYgUHJpbnQgc2FtcGxlIGluZGV4IGFuZCBmaWx0ZXJlZCBhcHBsaWNhdGlvbiB2YWx1ZSBmb3IgYSB1bml0IHN0ZXAuCiAqIEByZXR1cm4gWmVybyBhZnRlciBwcm9jZXNzaW5nIDE2IHNhbXBsZXMgYXQgdGhlIGV4cG9ydGVkIHNhbXBsaW5nIHJhdGUuCiAqLwppbnQgbWFpbih2b2lkKQp7CiAgICBGaWx0ZXIgc3RhdGU7CiAgICBmaWx0ZXJfcmVzZXQoJnN0YXRlLCAwKTsKCiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTZ1OyArK2kpCiAgICB7CiAgICAgICAgY29uc3QgZG91YmxlIGlucHV0ID0gaSA8IDR1ID8gMC4wIDogMS4wOwogICAgICAgIGNvbnN0IEZpbHRlclNhbXBsZSB4ID0gKEZpbHRlclNhbXBsZSlmbF9xX2Zyb21fZG91YmxlKGlucHV0LCBmaWx0ZXJfcSk7CiAgICAgICAgY29uc3QgRmlsdGVyU2FtcGxlIHkgPSBmaWx0ZXJfc3RlcCgmc3RhdGUsIHgpOwoKICAgICAgICBwcmludGYoIiV1ICUuMTdnXG4iLCBpLCBmbF9xX3RvX2RvdWJsZSh5LCBmaWx0ZXJfcSkpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K"&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;filter_demo.c&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;a class="library-download" href="https://blog.simgor.cn/toolkit/examples/filter_demo.c" download="filter_demo.c"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="download" focusable="false"&gt;&lt;path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"&gt;&lt;/path&gt;&lt;/svg&gt;下载 filter_demo.c&lt;/a&gt;
&lt;/div&gt;&lt;details class="library-source" open&gt;&lt;summary&gt;源码&lt;/summary&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @file filter_demo.c
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Run a step through a tool-exported Q filter, C99.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @copyright SPDX-License-Identifier: MIT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @details Place fl_filter.h and fl_q.h in the same include directory.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;fl_filter.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @brief Print sample index and filtered application value for a unit step.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @return Zero after processing 16 samples at the exported sampling rate.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Filter&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;filter_reset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;16u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4u&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FilterSample&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FilterSample&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;fl_q_from_double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filter_q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FilterSample&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;filter_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%u %.17g&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;fl_q_to_double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filter_q&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/details&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="Y2MgLXN0ZD1jOTkgLVdhbGwgLVdleHRyYSBmaWx0ZXJfZGVtby5jIC1vIGZpbHRlcl9kZW1v"&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;sh&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cc -std&lt;span class="o"&gt;=&lt;/span&gt;c99 -Wall -Wextra filter_demo.c -o filter_demo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;示例从 &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;n=4&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 加入单位阶跃，输出样本序号和滤波结果。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;filter_q&lt;/code&gt; 是导出的 Q 格式，&lt;code&gt;FilterSample&lt;/code&gt; 存放原始整数。每通道一个 &lt;code&gt;Filter&lt;/code&gt;，按采样率调用 &lt;code&gt;filter_step()&lt;/code&gt;；&lt;code&gt;filter_reset(&amp;amp;state, 0)&lt;/code&gt; 从零状态开始。&lt;/p&gt;
&lt;p&gt;一份 &lt;code&gt;fl_filter.h&lt;/code&gt; 对应一组滤波参数。公共头 &lt;code&gt;fl_q.h&lt;/code&gt; 可供多个模块共用。&lt;/p&gt;</description></item><item><title>51 波特率</title><link>https://blog.simgor.cn/tools/51%E6%B3%A2%E7%89%B9%E7%8E%87%E8%AE%A1%E7%AE%97%E5%99%A8/</link><guid>https://blog.simgor.cn/tools/51%E6%B3%A2%E7%89%B9%E7%8E%87%E8%AE%A1%E7%AE%97%E5%99%A8/</guid><pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="baud-rate" aria-label="51 波特率"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="timer-1-重装值"&gt;Timer 1 重装值&lt;span class="hx:absolute hx:-mt-20" id="timer-1-重装值"&gt;&lt;/span&gt;
&lt;a href="#timer-1-%e9%87%8d%e8%a3%85%e5%80%bc" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;经典 8051 的串口方式 1 / 3 通常用 Timer 1 方式 2 产生波特率。设定时器时钟分频为 D，8 位重装值为 TH1：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;B&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;u&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;S&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;M&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;O&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;32&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mn&gt;256&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;T&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; \mathrm{Baud} = \frac{2^{\mathrm{SMOD}}\times f_{\mathrm{osc}}}{32\times D\times(256-\mathrm{TH1})} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6944em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Baud&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.4543em;vertical-align:-0.936em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.5183em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;32&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0278em;"&gt;D&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;256&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;TH1&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8413em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;SMOD&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;osc&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.936em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;11.0592 MHz、D = 12、SMOD = 0 时，TH1 = 0xFD，对应 9600 baud，误差为零。换成 12 MHz，相同重装值得到约 10416.67 baud，偏差约 +8.51%。&lt;/p&gt;
&lt;h2 data-hextra-search-id="分频与工作方式"&gt;分频与工作方式&lt;span class="hx:absolute hx:-mt-20" id="分频与工作方式"&gt;&lt;/span&gt;
&lt;a href="#%e5%88%86%e9%a2%91%e4%b8%8e%e5%b7%a5%e4%bd%9c%e6%96%b9%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;D 为 Timer 1 的实际时钟分频，按芯片的定时器配置填写。这里采用 Timer 1 的 8 位自动重装模型。&lt;/p&gt;
&lt;p&gt;经典 8051 的方式 0 波特率为 fosc / 12，方式 2 为 2^SMOD × fosc / 64。通信误差预算由收发双方的时钟精度和采样方式共同决定。&lt;/p&gt;</description></item><item><title>比特计算器</title><link>https://blog.simgor.cn/tools/%E6%AF%94%E7%89%B9%E8%AE%A1%E7%AE%97%E5%99%A8%E5%B7%A5%E5%85%B7/</link><guid>https://blog.simgor.cn/tools/%E6%AF%94%E7%89%B9%E8%AE%A1%E7%AE%97%E5%99%A8%E5%B7%A5%E5%85%B7/</guid><pubDate>Mon, 01 Sep 2025 08:24:02 +0800</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="bit-calculator" aria-label="比特计算器"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="位宽与补码"&gt;位宽与补码&lt;span class="hx:absolute hx:-mt-20" id="位宽与补码"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%8d%e5%ae%bd%e4%b8%8e%e8%a1%a5%e7%a0%81" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;十进制可以直接输入负数。以 8 位为例，−1 的补码是 0xFF，无符号读数为 255；切换到 16 位后则是 0xFFFF。64 位运算使用整数计算，最大值 18446744073709551615 也能准确表示。&lt;/p&gt;
&lt;p&gt;输入数值需要落在所选位宽内。位运算的结果保留低位，逻辑右移在高位补 0。&lt;/p&gt;
&lt;h2 data-hextra-search-id="字节序与位操作"&gt;字节序与位操作&lt;span class="hx:absolute hx:-mt-20" id="字节序与位操作"&gt;&lt;/span&gt;
&lt;a href="#%e5%ad%97%e8%8a%82%e5%ba%8f%e4%b8%8e%e4%bd%8d%e6%93%8d%e4%bd%9c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Byte 0 是最低有效字节。0x12345678 按小端排列为 78 56 34 12，大端则为 12 34 56 78。切换排列不改变数值，点击某一位才会翻转对应的 0 / 1。&lt;/p&gt;
&lt;p&gt;十六进制和二进制可带 0x、0b 前缀，也接受空格或下划线分组，例如 0xFF_FF。写 C 代码时，普通位掩码可用 &lt;code&gt;1u &amp;lt;&amp;lt; n&lt;/code&gt;，64 位用 &lt;code&gt;UINT64_C(1) &amp;lt;&amp;lt; n&lt;/code&gt;，n 应小于类型位宽。&lt;/p&gt;</description></item><item><title>2.串口介绍</title><link>https://blog.simgor.cn/blog/2.%E4%B8%B2%E5%8F%A3%E4%BB%8B%E7%BB%8D/</link><guid>https://blog.simgor.cn/blog/2.%E4%B8%B2%E5%8F%A3%E4%BB%8B%E7%BB%8D/</guid><pubDate>Fri, 04 Jul 2025 16:23:39 +0800</pubDate><description>&lt;h1 data-hextra-search-id="串口操作流程"&gt;串口操作流程&lt;span class="hx:absolute hx:-mt-20" id="串口操作流程"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%b2%e5%8f%a3%e6%93%8d%e4%bd%9c%e6%b5%81%e7%a8%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;配置串口工作方式&lt;/li&gt;
&lt;li&gt;配置用于串口的定时器T1为工作方式2&lt;/li&gt;
&lt;li&gt;设置波特率&lt;/li&gt;
&lt;li&gt;使能总中断、串口中断&lt;/li&gt;
&lt;li&gt;设置接收中断函数&lt;/li&gt;
&lt;li&gt;设置stdio库&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 data-hextra-search-id="串口寄存器"&gt;串口寄存器&lt;span class="hx:absolute hx:-mt-20" id="串口寄存器"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%b2%e5%8f%a3%e5%af%84%e5%ad%98%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;与串口有关的寄存器有以下几个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SUBF：数据缓冲器&lt;/li&gt;
&lt;li&gt;SCON：串行口控制寄存器&lt;/li&gt;
&lt;li&gt;PCON寄存器&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-hextra-search-id="subf数据缓冲器"&gt;SUBF：数据缓冲器&lt;span class="hx:absolute hx:-mt-20" id="subf数据缓冲器"&gt;&lt;/span&gt;
&lt;a href="#subf%e6%95%b0%e6%8d%ae%e7%bc%93%e5%86%b2%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;有两个，用于接收/发送数据。
需要注意的是，该两个缓冲器地址一致，可以当作普通寄存器看待。&lt;/p&gt;
&lt;h2 data-hextra-search-id="scon寄存器"&gt;SCON寄存器&lt;span class="hx:absolute hx:-mt-20" id="scon寄存器"&gt;&lt;/span&gt;
&lt;a href="#scon%e5%af%84%e5%ad%98%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;串行口控制寄存器
用于设置串行口的工作方式、监视串行口的工作状态、控制发送与接收的状态等。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位序&lt;/th&gt;
&lt;th&gt;D7&lt;/th&gt;
&lt;th&gt;D6&lt;/th&gt;
&lt;th&gt;D5&lt;/th&gt;
&lt;th&gt;D4&lt;/th&gt;
&lt;th&gt;D3&lt;/th&gt;
&lt;th&gt;D2&lt;/th&gt;
&lt;th&gt;D1&lt;/th&gt;
&lt;th&gt;D0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;位名&lt;/td&gt;
&lt;td&gt;SM0&lt;/td&gt;
&lt;td&gt;SM1&lt;/td&gt;
&lt;td&gt;SM2&lt;/td&gt;
&lt;td&gt;REN&lt;/td&gt;
&lt;td&gt;TB8&lt;/td&gt;
&lt;td&gt;RB8&lt;/td&gt;
&lt;td&gt;TI&lt;/td&gt;
&lt;td&gt;RI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-hextra-search-id="sm0和sm1位"&gt;SM0和SM1位&lt;span class="hx:absolute hx:-mt-20" id="sm0和sm1位"&gt;&lt;/span&gt;
&lt;a href="#sm0%e5%92%8csm1%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;用于选择串行工作方式&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SM0 SM1&lt;/th&gt;
&lt;th&gt;工作方式&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;波特率&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;00&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;8位同步移位寄存器（输出）&lt;/td&gt;
&lt;td&gt;波特率固定为fosc/12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;01&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;10位异步收发方式（8位数据）&lt;/td&gt;
&lt;td&gt;波特率可变&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11位异步收发（9位数据）&lt;/td&gt;
&lt;td&gt;波特率固定为fosc/64或fosc/32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;11位异步收发方式（9位数据）&lt;/td&gt;
&lt;td&gt;波特率可变&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-hextra-search-id="sm2位"&gt;SM2位&lt;span class="hx:absolute hx:-mt-20" id="sm2位"&gt;&lt;/span&gt;
&lt;a href="#sm2%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;多机通信控制位，主要用于方式2和方式3。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在工作方式0中，SM2必须设成0。&lt;/li&gt;
&lt;li&gt;在工作方式1中，当处于接收状态时，若SM2=1，则只有接收到的停止位“1”时，RI才能被激活成“1”（产生中断请求）。&lt;/li&gt;
&lt;li&gt;在工作方式2和3中，当SM2=0时，串口以单机发送或接收方式工作，TI和RI以正常方式被激活并产生中断请求；&lt;/li&gt;
&lt;li&gt;在工作方式2和3中，当SM2=1时，若RB8=1，则RI被激活并产生中断请求；若RB8=0，不激活RI，也不引起接收中断请求。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="ren位"&gt;REN位&lt;span class="hx:absolute hx:-mt-20" id="ren位"&gt;&lt;/span&gt;
&lt;a href="#ren%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;使能串行接收位。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为1时，启动串行口接收数据。&lt;/li&gt;
&lt;li&gt;为0时，禁止接收。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="tb8位"&gt;TB8位&lt;span class="hx:absolute hx:-mt-20" id="tb8位"&gt;&lt;/span&gt;
&lt;a href="#tb8%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;在方式2或方式3中，是发送数据的第九位。可以用作数据的奇偶校验位，或在多机通信中，作为地址帧/数据帧的标志位。&lt;/li&gt;
&lt;li&gt;在方式0和方式1中，该位未使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="rb8位"&gt;RB8位&lt;span class="hx:absolute hx:-mt-20" id="rb8位"&gt;&lt;/span&gt;
&lt;a href="#rb8%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;在方式2或方式3中，是接收到数据的第九位。作为奇偶校验位或地址帧/数据帧的标志位。&lt;/li&gt;
&lt;li&gt;在方式1时，若SM2=0，则RB8是接收到的停止位。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="ti位"&gt;TI位&lt;span class="hx:absolute hx:-mt-20" id="ti位"&gt;&lt;/span&gt;
&lt;a href="#ti%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;发送中断标志位&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在方式0中，当串行发送第8位数据结束时，硬件自动将改位置1，并向CPU发送中断请求。&lt;/li&gt;
&lt;li&gt;在其它方式中，串行发送停止位的开始时，硬件自动将改位置1，并向CPU发送中断请求。&lt;/li&gt;
&lt;li&gt;必须用软件方式清除该位。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="ri位"&gt;RI位&lt;span class="hx:absolute hx:-mt-20" id="ri位"&gt;&lt;/span&gt;
&lt;a href="#ri%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;接收中断标志位&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在方式0中，当串行接收第8位数据结束时，硬件自动将改位置1，并向CPU发送中断请求。&lt;/li&gt;
&lt;li&gt;在其它方式中，串行接收停止位的中间时，硬件自动将改位置1，并向CPU发送中断请求。&lt;/li&gt;
&lt;li&gt;必须用软件方式清除该位。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意
TI和RI位在任何工作方式下都必须由软件清零。这点和外部中断及定时中断的标志位的清除都不同。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-hextra-search-id="pcon寄存器"&gt;PCON寄存器&lt;span class="hx:absolute hx:-mt-20" id="pcon寄存器"&gt;&lt;/span&gt;
&lt;a href="#pcon%e5%af%84%e5%ad%98%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位序&lt;/th&gt;
&lt;th&gt;D7&lt;/th&gt;
&lt;th&gt;D6&lt;/th&gt;
&lt;th&gt;D5&lt;/th&gt;
&lt;th&gt;D4&lt;/th&gt;
&lt;th&gt;D3&lt;/th&gt;
&lt;th&gt;D2&lt;/th&gt;
&lt;th&gt;D1&lt;/th&gt;
&lt;th&gt;D0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;位名&lt;/td&gt;
&lt;td&gt;SMOD&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;GF1&lt;/td&gt;
&lt;td&gt;GF0&lt;/td&gt;
&lt;td&gt;PD&lt;/td&gt;
&lt;td&gt;IDL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-hextra-search-id="smod位"&gt;SMOD位&lt;span class="hx:absolute hx:-mt-20" id="smod位"&gt;&lt;/span&gt;
&lt;a href="#smod%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;波特率加倍位&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只能工作于方式1~3&lt;/li&gt;
&lt;li&gt;为1的时候，串口波特率增加1倍。&lt;/li&gt;
&lt;li&gt;为0的时候，串口波特率不加倍。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-hextra-search-id="波特率计算"&gt;波特率计算&lt;span class="hx:absolute hx:-mt-20" id="波特率计算"&gt;&lt;/span&gt;
&lt;a href="#%e6%b3%a2%e7%89%b9%e7%8e%87%e8%ae%a1%e7%ae%97" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;使用本站的 &lt;a href="https://blog.simgor.cn/tools/51%E6%B3%A2%E7%89%B9%E7%8E%87%E8%AE%A1%E7%AE%97%E5%99%A8/"&gt;51 波特率计算器&lt;/a&gt;，计算 Timer 1 重装值、实际波特率与误差，支持 SMOD 和时钟分频选择。&lt;/p&gt;
&lt;h3 data-hextra-search-id="工作方式0"&gt;工作方式0&lt;span class="hx:absolute hx:-mt-20" id="工作方式0"&gt;&lt;/span&gt;
&lt;a href="#%e5%b7%a5%e4%bd%9c%e6%96%b9%e5%bc%8f0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;波特率&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
波特率=\frac{fosc}{12}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6833em;"&gt;&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;波特率&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.0574em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3714em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;osc&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;h3 data-hextra-search-id="工作方式1"&gt;工作方式1&lt;span class="hx:absolute hx:-mt-20" id="工作方式1"&gt;&lt;/span&gt;
&lt;a href="#%e5%b7%a5%e4%bd%9c%e6%96%b9%e5%bc%8f1" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;波特率&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;O&lt;/mi&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;32&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mtext&gt;定时器最大值&lt;/mtext&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mtext&gt;定时器初值&lt;/mtext&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
波特率=\frac {2^{SMOD}\times {f_{osc}}}{32 \times 12 \times(定时器最大值-定时器初值)}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6833em;"&gt;&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;波特率&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.4543em;vertical-align:-0.936em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.5183em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;32&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;12&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;定时器最大值&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;定时器初值&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8413em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0576em;"&gt;S&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.109em;"&gt;M&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0278em;"&gt;O&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0278em;"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;osc&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.936em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;h3 data-hextra-search-id="工作方式2"&gt;工作方式2&lt;span class="hx:absolute hx:-mt-20" id="工作方式2"&gt;&lt;/span&gt;
&lt;a href="#%e5%b7%a5%e4%bd%9c%e6%96%b9%e5%bc%8f2" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;波特率&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;O&lt;/mi&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mn&gt;64&lt;/mn&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
波特率=\frac{2^{SMOD} \times f_{osc}}{64}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6833em;"&gt;&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;波特率&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.2043em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.5183em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;64&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8413em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0576em;"&gt;S&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.109em;"&gt;M&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0278em;"&gt;O&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0278em;"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;osc&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;h3 data-hextra-search-id="工作方式3"&gt;工作方式3&lt;span class="hx:absolute hx:-mt-20" id="工作方式3"&gt;&lt;/span&gt;
&lt;a href="#%e5%b7%a5%e4%bd%9c%e6%96%b9%e5%bc%8f3" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;波特率&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mrow&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;O&lt;/mi&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;32&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;mtext&gt;定时器最大值&lt;/mtext&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mtext&gt;定时器初值&lt;/mtext&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
波特率=\frac {2^{SMOD}\times {f_{osc}}}{32 \times 12 \times(定时器最大值-定时器初值)}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6833em;"&gt;&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;波特率&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.4543em;vertical-align:-0.936em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.5183em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;32&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;12&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;定时器最大值&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;定时器初值&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8413em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0576em;"&gt;S&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.109em;"&gt;M&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0278em;"&gt;O&lt;/span&gt;&lt;span class="mord mathnormal mtight" style="margin-right:0.0278em;"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;osc&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.936em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;h1 data-hextra-search-id="使用stdio库"&gt;使用stdio库&lt;span class="hx:absolute hx:-mt-20" id="使用stdio库"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%bf%e7%94%a8stdio%e5%ba%93" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;C51单片机可以调用C语言的stdio库，只需要重新实现 &lt;code&gt;putchar&lt;/code&gt;函数和 &lt;code&gt;_getkey&lt;/code&gt;函数：&lt;/p&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="dm9pZCBwdXRjaGFyKGNoYXIgYnVmKQp7CglTQlVGID0gYnVmOwoJd2hpbGUoVEk9PTApOwoJVEkgPSAwOwp9CgpjaGFyIF9nZXRrZXkgKHZvaWQpCnsKCXdoaWxlKFJJID09IDApOwoJUkkgPSAwOwoJcmV0dXJuIFNCVUY7Cn0="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;c&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;putchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SBUF&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TI&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="nf"&gt;_getkey&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RI&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;RI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;SBUF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;将上述代码复制到主代码中，然后导入 &lt;code&gt;stdio.h&lt;/code&gt;，右键打开该头文件，将以下两行代码注释即可：&lt;/p&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="ZXh0ZXJuIGNoYXIgcHV0Y2hhciAoY2hhcik7CgpleHRlcm4gY2hhciBfZ2V0a2V5ICh2b2lkKTs="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;c&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="nf"&gt;putchar&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="nf"&gt;_getkey&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h1 data-hextra-search-id="使用saillib库"&gt;使用SailLib库&lt;span class="hx:absolute hx:-mt-20" id="使用saillib库"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%bf%e7%94%a8saillib%e5%ba%93" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;SailLib库提供了串口相关的函数：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;函数名&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Serial_init&lt;/td&gt;
&lt;td&gt;串口初始化函数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serial_set_callback&lt;/td&gt;
&lt;td&gt;设置读串口回调函数&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-hextra-search-id="serial_init串口初始化函数"&gt;Serial_init：串口初始化函数&lt;span class="hx:absolute hx:-mt-20" id="serial_init串口初始化函数"&gt;&lt;/span&gt;
&lt;a href="#serial_init%e4%b8%b2%e5%8f%a3%e5%88%9d%e5%a7%8b%e5%8c%96%e5%87%bd%e6%95%b0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是否启用读串口中断。设置为1时，当串口接收到数据的时候会产生一个中断，这个中断会调用一个回调函数，该回调函数需要通过 &lt;code&gt;Serial_set_callback&lt;/code&gt;函数设置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-hextra-search-id="serial_set_callback设置读串口回调函数"&gt;Serial_set_callback：设置读串口回调函数&lt;span class="hx:absolute hx:-mt-20" id="serial_set_callback设置读串口回调函数"&gt;&lt;/span&gt;
&lt;a href="#serial_set_callback%e8%ae%be%e7%bd%ae%e8%af%bb%e4%b8%b2%e5%8f%a3%e5%9b%9e%e8%b0%83%e5%87%bd%e6%95%b0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;回调函数。需要传入一个无返回值、参数为char的函数，用于串口接收到数据产生中断时调用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-hextra-search-id="库代码"&gt;库代码&lt;span class="hx:absolute hx:-mt-20" id="库代码"&gt;&lt;/span&gt;
&lt;a href="#%e5%ba%93%e4%bb%a3%e7%a0%81" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;声明：&lt;/p&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="c3RhdGljIHZvaWQgKCpfY2IpKGNoYXIgYnVmKTsKdm9pZCBTZXJpYWxfaW5pdCh1aW50OF90IEVTX2VuKTsKdm9pZCBTZXJpYWxfc2V0X2NhbGxiYWNrKHZvaWQgKCpjYikoY2hhciBidWYpKTs="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;C&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;void&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;_cb&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Serial_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;ES_en&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Serial_set_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;定义：&lt;/p&gt;
&lt;div class="note-code-block hextra-code-block" data-note-code&gt;
&lt;template data-code-raw="dm9pZCBTZXJpYWxfaW5pdCh1aW50OF90IEVTX2VuKQp7CgkvL&amp;#43;iuvue9ruS4suWPo&amp;#43;S4uuW3peS9nOaWueW8jzEKCVNDT04gPSAweDUwOwoKCS8v6K6&amp;#43;572u5rOi54m5546HCgkvLyBUMeW3peS9nOS6juaWueW8jzIoOOS9jeiHquWKqOmHjei9vSkKCVRNT0QgfD0gMHgyMDsKCS8v5rOi54m5546H5LiN5YCN5aKeCglQQ09OICY9IDB4N2Y7IC8v5YWz6Zet5pyA6auY5L2NCgoJLy/orr7nva7ms6Lnibnnjoc5NjAwCglUTDEgPSAweGZkOwoJVEgxID0gMHhmZDsKCS8v5L2/6IO95a6a5pe25ZmoMQoJVFIxID0gMTsKCglFQSA9IDE7IC8v5omT5byA5YWo5bGA5Lit5patCglFUyA9IEVTX2VuOyAvL&amp;#43;aJk&amp;#43;W8gOS4suWPo&amp;#43;S4reaWrSjlpoLmnpzkuI3kvb/nlKjkuK3mlq3vvIzlsIbkvb/nlKjpmLvloZ7lh73mlbApCn0Kdm9pZCBTZXJpYWxfc2V0X2NhbGxiYWNrKHZvaWQgKCpjYikoY2hhciBidWYpKQp7CglfY2IgPSBjYjsKfQp2b2lkIFNlcmlhbF9yZWNlaXZlKCkgaW50ZXJydXB0IDQKewoJaWYgKFJJID09IDApIC8v5aaC5p6c5rKh5pyJ5o6l5pS25Yiw5Liy5Y&amp;#43;j5Lit5pat5qCH5b&amp;#43;XCgkJcmV0dXJuOwoKCUVTID0gMDsJCSAgLy/lhbPpl63kuLLlj6PkuK3mlq0KCVJJID0gMDsJCSAgLy/lpI3kvY3kuLLlj6PkuK3mlq3moIflv5cKCSgqX2NiKShTQlVGKTsgLy/osIPnlKjlm57osIPlh73mlbDvvIzov5Tlm57kuLLlj6PnmoTmlbDmja4KCUVTID0gMTsJCSAgLy/ph43lkK/kuLLlj6PkuK3mlq0KfQ=="&gt;&lt;/template&gt;
&lt;div class="note-code-toolbar" data-note-ui&gt;
&lt;span class="note-code-name"&gt;C&lt;/span&gt;
&lt;span class="note-copy-status" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;button type="button" data-copy-code hidden&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 256 256" aria-hidden="true" data-phosphor="copy" focusable="false"&gt;&lt;path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"&gt;&lt;/path&gt;&lt;/svg&gt;复制代码&lt;/button&gt;
&lt;/div&gt;&lt;div data-code-content&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Serial_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;ES_en&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//设置串口为工作方式1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SCON&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//设置波特率
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// T1工作于方式2(8位自动重载)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TMOD&lt;/span&gt; &lt;span class="o"&gt;|=&lt;/span&gt; &lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//波特率不倍增
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PCON&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;=&lt;/span&gt; &lt;span class="mh"&gt;0x7f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//关闭最高位
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//设置波特率9600
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TL1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xfd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TH1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xfd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//使能定时器1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TR1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;EA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//打开全局中断
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ES_en&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//打开串口中断(如果不使用中断，将使用阻塞函数)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Serial_set_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_cb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Serial_receive&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;interrupt&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RI&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//如果没有接收到串口中断标志
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//关闭串口中断
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;RI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//复位串口中断标志
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;_cb&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;SBUF&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//调用回调函数，返回串口的数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//重启串口中断
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>1.中断简介</title><link>https://blog.simgor.cn/blog/1.%E4%B8%AD%E6%96%AD%E7%AE%80%E4%BB%8B/</link><guid>https://blog.simgor.cn/blog/1.%E4%B8%AD%E6%96%AD%E7%AE%80%E4%BB%8B/</guid><pubDate>Fri, 04 Jul 2025 16:23:36 +0800</pubDate><description>&lt;p&gt;51单片机里面有5个中断源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;两个外部中断&lt;/li&gt;
&lt;li&gt;两个定时器中断&lt;/li&gt;
&lt;li&gt;一个串口中断&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-hextra-search-id="中断类型"&gt;中断类型&lt;span class="hx:absolute hx:-mt-20" id="中断类型"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%ad%e6%96%ad%e7%b1%bb%e5%9e%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;中断源名称&lt;/th&gt;
&lt;th&gt;类型号&lt;/th&gt;
&lt;th&gt;默认优先级&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;外部中断0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;最高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;定时/计数器T0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;第2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;外部中断1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;第3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;定时/计数器T1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;第4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;串口中断&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;第5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-hextra-search-id="ie寄存器"&gt;IE寄存器&lt;span class="hx:absolute hx:-mt-20" id="ie寄存器"&gt;&lt;/span&gt;
&lt;a href="#ie%e5%af%84%e5%ad%98%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;中断控制寄存器&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位序&lt;/th&gt;
&lt;th&gt;D7&lt;/th&gt;
&lt;th&gt;D6&lt;/th&gt;
&lt;th&gt;D5&lt;/th&gt;
&lt;th&gt;D4&lt;/th&gt;
&lt;th&gt;D3&lt;/th&gt;
&lt;th&gt;D2&lt;/th&gt;
&lt;th&gt;D1&lt;/th&gt;
&lt;th&gt;D0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;位名&lt;/td&gt;
&lt;td&gt;EA&lt;/td&gt;
&lt;td&gt;&amp;ndash;&lt;/td&gt;
&lt;td&gt;&amp;ndash;&lt;/td&gt;
&lt;td&gt;ES&lt;/td&gt;
&lt;td&gt;ET1&lt;/td&gt;
&lt;td&gt;EX1&lt;/td&gt;
&lt;td&gt;ET0&lt;/td&gt;
&lt;td&gt;EX0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;EA位：全局中断允许控制位，EA = 0时，禁止所有中断&lt;/li&gt;
&lt;li&gt;ES位：串口接收中断使能&lt;/li&gt;
&lt;li&gt;EX位：外部中断允许位，EX = 0时，禁止外部中断&lt;/li&gt;
&lt;li&gt;ET位：定时/计数允许位，ET = 0时，禁止定时/计数器中断&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-hextra-search-id="ip寄存器"&gt;IP寄存器&lt;span class="hx:absolute hx:-mt-20" id="ip寄存器"&gt;&lt;/span&gt;
&lt;a href="#ip%e5%af%84%e5%ad%98%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;中断优先级寄存器&lt;/p&gt;
&lt;h2 data-hextra-search-id="tcon寄存器"&gt;TCON寄存器&lt;span class="hx:absolute hx:-mt-20" id="tcon寄存器"&gt;&lt;/span&gt;
&lt;a href="#tcon%e5%af%84%e5%ad%98%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;主要用于控制定时/计数器、中断的启动与停止、标示定时器的溢出和中断的情况。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位序&lt;/th&gt;
&lt;th&gt;D7&lt;/th&gt;
&lt;th&gt;D6&lt;/th&gt;
&lt;th&gt;D5&lt;/th&gt;
&lt;th&gt;D4&lt;/th&gt;
&lt;th&gt;D3&lt;/th&gt;
&lt;th&gt;D2&lt;/th&gt;
&lt;th&gt;D1&lt;/th&gt;
&lt;th&gt;D0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;位名&lt;/td&gt;
&lt;td&gt;TF1&lt;/td&gt;
&lt;td&gt;TR1&lt;/td&gt;
&lt;td&gt;TF0&lt;/td&gt;
&lt;td&gt;TR0&lt;/td&gt;
&lt;td&gt;IE1&lt;/td&gt;
&lt;td&gt;IT1&lt;/td&gt;
&lt;td&gt;IE0&lt;/td&gt;
&lt;td&gt;IT0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-hextra-search-id="tf位"&gt;TF位&lt;span class="hx:absolute hx:-mt-20" id="tf位"&gt;&lt;/span&gt;
&lt;a href="#tf%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;定时/计数器溢出中断位，这个位一般不需要人为操作。当定时/计数器溢出时，硬件自动将这个位置1，并向CPU发出中断指令，CPU进入中断服务程序的时候，自动清除该位。&lt;/p&gt;
&lt;h3 data-hextra-search-id="tr位"&gt;TR位&lt;span class="hx:absolute hx:-mt-20" id="tr位"&gt;&lt;/span&gt;
&lt;a href="#tr%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;定时/计数器使能位。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0：停止计数&lt;/li&gt;
&lt;li&gt;1：启动计数&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="ie位"&gt;IE位&lt;span class="hx:absolute hx:-mt-20" id="ie位"&gt;&lt;/span&gt;
&lt;a href="#ie%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;外部中断请求标志位，这个位一般不需要人为操作。当外部中断无中断请求时，IE=0；当外部中断有中断请求时，IE=1.在CPU响应该中断后，由硬件自动将IE清零&lt;/p&gt;
&lt;h3 data-hextra-search-id="it位"&gt;IT位&lt;span class="hx:absolute hx:-mt-20" id="it位"&gt;&lt;/span&gt;
&lt;a href="#it%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;外部中断的触发方式。
0：低电平触发
1：下降沿触发&lt;/p&gt;
&lt;h1 data-hextra-search-id="定时计数器"&gt;定时/计数器&lt;span class="hx:absolute hx:-mt-20" id="定时计数器"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%9a%e6%97%b6%e8%ae%a1%e6%95%b0%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;51单片机中有两个定时/计数器T1和T0，有以下相关寄存器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TH：高8位定时/计数器。有TH1和TH0两个&lt;/li&gt;
&lt;li&gt;TL：低8位定时/计数器。有TL1和TL0两个&lt;/li&gt;
&lt;li&gt;TMOD：工作方式选择寄存器&lt;/li&gt;
&lt;li&gt;TCON：控制寄存器&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-hextra-search-id="tmod寄存器"&gt;TMOD寄存器&lt;span class="hx:absolute hx:-mt-20" id="tmod寄存器"&gt;&lt;/span&gt;
&lt;a href="#tmod%e5%af%84%e5%ad%98%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;用于配置定时器的工作模式，作用如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;设置定时器是软件启动还是硬件启动&lt;/li&gt;
&lt;li&gt;设置T0、T1的工作方式&lt;/li&gt;
&lt;li&gt;设置T0或T1是用做计数器还是定时器
位定义如下(高4位为T1，低4位为T0)：&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位序&lt;/th&gt;
&lt;th&gt;D7&lt;/th&gt;
&lt;th&gt;D6&lt;/th&gt;
&lt;th&gt;D5&lt;/th&gt;
&lt;th&gt;D4&lt;/th&gt;
&lt;th&gt;D3&lt;/th&gt;
&lt;th&gt;D2&lt;/th&gt;
&lt;th&gt;D1&lt;/th&gt;
&lt;th&gt;D0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;位名&lt;/td&gt;
&lt;td&gt;GATE&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mover accent="true"&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mo stretchy="true"&gt;‾&lt;/mo&gt;&lt;/mover&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;C/ \overline T&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.1333em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord katex-overline"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8833em;"&gt;&lt;span style="top:-3em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.8033em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="overline-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;M1&lt;/td&gt;
&lt;td&gt;M0&lt;/td&gt;
&lt;td&gt;GATE&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mover accent="true"&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mo stretchy="true"&gt;‾&lt;/mo&gt;&lt;/mover&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;C/ \overline T&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.1333em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord katex-overline"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8833em;"&gt;&lt;span style="top:-3em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.8033em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="overline-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;M1&lt;/td&gt;
&lt;td&gt;M0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;注意
如果只使用T1，建议TMOD低4位都置0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-hextra-search-id="gate"&gt;GATE&lt;span class="hx:absolute hx:-mt-20" id="gate"&gt;&lt;/span&gt;
&lt;a href="#gate" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;门控位。用于选择定时/计数器的启动方式。
定时/计数器的启动方式有两种，位设置如下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0：软启动，通过配置TCON寄存器中的TR位直接启动&lt;/li&gt;
&lt;li&gt;1：硬启动，通过外部中断启动。
注意：&lt;/li&gt;
&lt;li&gt;硬启动之前，也需要配置TCON寄存器中的TR位。&lt;/li&gt;
&lt;li&gt;外部中断引脚为INT0(P3.2)和INT1(P3.3)&lt;/li&gt;
&lt;li&gt;外部中断启动条件为置“1”&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="c-overline-t"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mover accent="true"&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mo stretchy="true"&gt;‾&lt;/mo&gt;&lt;/mover&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;C/ \overline T&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1.1333em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord katex-overline"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8833em;"&gt;&lt;span style="top:-3em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.8033em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="overline-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="hx:absolute hx:-mt-20" id="c-overline-t"&gt;&lt;/span&gt;
&lt;a href="#c-overline-t" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;功能选择位。用于选择定时/计数器的脉冲源。
脉冲源有两种，位设置如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0：内部脉冲，单片机内部提供一个12分频的时钟脉冲&lt;/li&gt;
&lt;li&gt;1：外部脉冲&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="m1m0"&gt;M1、M0&lt;span class="hx:absolute hx:-mt-20" id="m1m0"&gt;&lt;/span&gt;
&lt;a href="#m1m0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;定时/计数器工作方式选择位，含义如下表：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;M1&lt;/th&gt;
&lt;th&gt;M0&lt;/th&gt;
&lt;th&gt;工作方式&lt;/th&gt;
&lt;th&gt;功能说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;方式0&lt;/td&gt;
&lt;td&gt;13位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;方式1&lt;/td&gt;
&lt;td&gt;16位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;方式2&lt;/td&gt;
&lt;td&gt;8位自动重载&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;方式3&lt;/td&gt;
&lt;td&gt;T0分为两个8位；T1停止计数&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-hextra-search-id="工作方式"&gt;工作方式&lt;span class="hx:absolute hx:-mt-20" id="工作方式"&gt;&lt;/span&gt;
&lt;a href="#%e5%b7%a5%e4%bd%9c%e6%96%b9%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;TMOD寄存器可以设置定时/计数器的工作方式。工作方式有4种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方式0：13位&lt;/li&gt;
&lt;li&gt;方式1：16位&lt;/li&gt;
&lt;li&gt;方式2：8位自动重载&lt;/li&gt;
&lt;li&gt;方式3：T0分为两个8位；T1停止计数&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-hextra-search-id="方式0"&gt;方式0&lt;span class="hx:absolute hx:-mt-20" id="方式0"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b9%e5%bc%8f0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;定时/计数器为13位定时/计数方式，它由TL的低5位和TH的全部8位构成13位的计数器，此时TL的高3位为无效位：&lt;/p&gt;
&lt;div&gt;
&lt;table border="1"&gt;
&lt;tr&gt;
&lt;th colspan="8"&gt;TH&lt;/th&gt;
&lt;th colspan="8"&gt;TL&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D12&lt;/td&gt;
&lt;td&gt;D11&lt;/td&gt;
&lt;td&gt;D10&lt;/td&gt;
&lt;td&gt;D9&lt;/td&gt;
&lt;td&gt;D8&lt;/td&gt;
&lt;td&gt;D7&lt;/td&gt;
&lt;td&gt;D6&lt;/td&gt;
&lt;td&gt;D5&lt;/td&gt;
&lt;td&gt; *&lt;/td&gt;
&lt;td&gt; *&lt;/td&gt;
&lt;td&gt; *&lt;/td&gt;
&lt;td&gt;D4&lt;/td&gt;
&lt;td&gt;D3&lt;/td&gt;
&lt;td&gt;D3&lt;/td&gt;
&lt;td&gt;D1&lt;/td&gt;
&lt;td&gt;D0&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;当定时/计数器开始工作时，每经过一个机器周期就往TL里加1，当TL溢出的时候TH加1，直到TH溢出引发中断，然后停止定时或者计数。
如果想要重新定时或者计数，需要手动重置TH和TL寄存器。
13位最大计数次数为8192次，下表是晶振与计数时间的关系：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;晶振&lt;/th&gt;
&lt;th&gt;单个周期时间&lt;/th&gt;
&lt;th&gt;总时间&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;12MHz&lt;/td&gt;
&lt;td&gt;1μs&lt;/td&gt;
&lt;td&gt;8192μs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.0592&lt;/td&gt;
&lt;td&gt;约1.085μs&lt;/td&gt;
&lt;td&gt;约8888.89μs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;假设需要定时的时间长度为t(μs),晶振频率为f(MHz)，定时器初始值count计算公式如下：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;13&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
count=2^{13}- \frac {tf}{12}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6151em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;co&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.9474em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8641em;"&gt;&lt;span style="top:-3.113em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;13&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.0574em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3714em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;由于TL寄存器高三位未被使用，所以要将count拆开低五位到TL，剩下的位放到TH：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo fence="true"&gt;{&lt;/mo&gt;&lt;mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="false"&gt;&lt;mrow&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mi&gt;H&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="false"&gt;&lt;mrow&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;&amp;amp;&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
\begin{cases}TH=count &amp;gt;&amp;gt; 5 \\ TL=count \&amp;amp; 0x1F \end{cases}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:3em;vertical-align:-1.25em;"&gt;&lt;/span&gt;&lt;span class="minner"&gt;&lt;span class="mopen delimcenter" style="top:0em;"&gt;&lt;span class="delimsizing size4"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mtable"&gt;&lt;span class="col-align-l"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.69em;"&gt;&lt;span style="top:-3.69em;"&gt;&lt;span class="pstrut" style="height:3.008em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;T&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0813em;"&gt;H&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;co&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.25em;"&gt;&lt;span class="pstrut" style="height:3.008em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;T&lt;/span&gt;&lt;span class="mord mathnormal"&gt;L&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;co&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord"&gt;&amp;amp;0&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.19em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;h3 data-hextra-search-id="方式1"&gt;方式1&lt;span class="hx:absolute hx:-mt-20" id="方式1"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b9%e5%bc%8f1" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;定时/计数器为16位定时/计数方式，原理和工作方式一致：&lt;/p&gt;
&lt;body&gt;
&lt;table border="1"&gt;
&lt;tr&gt;
&lt;th colspan="8"&gt;TH&lt;/th&gt;
&lt;th colspan="8"&gt;TL&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D15&lt;/td&gt;
&lt;td&gt;D14&lt;/td&gt;
&lt;td&gt;D13&lt;/td&gt;
&lt;td&gt;D12&lt;/td&gt;
&lt;td&gt;D11&lt;/td&gt;
&lt;td&gt;D10&lt;/td&gt;
&lt;td&gt;D9&lt;/td&gt;
&lt;td&gt;D8&lt;/td&gt;
&lt;td&gt;D7&lt;/td&gt;
&lt;td&gt;D6&lt;/td&gt;
&lt;td&gt;D5&lt;/td&gt;
&lt;td&gt;D4&lt;/td&gt;
&lt;td&gt;D3&lt;/td&gt;
&lt;td&gt;D3&lt;/td&gt;
&lt;td&gt;D1&lt;/td&gt;
&lt;td&gt;D0&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;p&gt;当定时/计数器开始工作时，每经过一个机器周期就往TL里加1，当TL溢出的时候TH加1，直到TH溢出引发中断，然后停止定时或者计数。
如果想要重新定时或者计数，需要手动重置TH和TL寄存器。
16位最大计数次数为65536次，下表是晶振与计数时间的关系：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;晶振&lt;/th&gt;
&lt;th&gt;单个周期时间&lt;/th&gt;
&lt;th&gt;总时间&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;12MHz&lt;/td&gt;
&lt;td&gt;1μs&lt;/td&gt;
&lt;td&gt;65536μs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.0592&lt;/td&gt;
&lt;td&gt;约1.085μs&lt;/td&gt;
&lt;td&gt;约60397.98μs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;假设需要定时的时间长度为t(μs),晶振频率为f(MHz)，定时器初始值count计算公式如下：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;16&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
count=2^{16}- \frac {tf}{12}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6151em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;co&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.9474em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8641em;"&gt;&lt;span style="top:-3.113em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.0574em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3714em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1076em;"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;由于TL寄存器高三位未被使用，所以要将count拆开低五位到TL，剩下的位放到TH：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo fence="true"&gt;{&lt;/mo&gt;&lt;mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="false"&gt;&lt;mrow&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mi&gt;H&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="false"&gt;&lt;mrow&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;&amp;amp;&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
\begin{cases}TH=count &amp;gt;&amp;gt; 8 \\ TL=count\&amp;amp;0xFF\end{cases}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:3em;vertical-align:-1.25em;"&gt;&lt;/span&gt;&lt;span class="minner"&gt;&lt;span class="mopen delimcenter" style="top:0em;"&gt;&lt;span class="delimsizing size4"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mtable"&gt;&lt;span class="col-align-l"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.69em;"&gt;&lt;span style="top:-3.69em;"&gt;&lt;span class="pstrut" style="height:3.008em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;T&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0813em;"&gt;H&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;co&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-2.25em;"&gt;&lt;span class="pstrut" style="height:3.008em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;T&lt;/span&gt;&lt;span class="mord mathnormal"&gt;L&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;co&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord"&gt;&amp;amp;0&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;F&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.19em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description></item><item><title>3.写操作</title><link>https://blog.simgor.cn/blog/3.%E5%86%99%E6%93%8D%E4%BD%9C/</link><guid>https://blog.simgor.cn/blog/3.%E5%86%99%E6%93%8D%E4%BD%9C/</guid><pubDate>Thu, 03 Jul 2025 22:41:27 +0800</pubDate><description>&lt;p&gt;作者是初学者，水平有限，本文仅作为个人学习笔记使用，不能保证内容的正确性。部分资料来源于网络，参考了SD卡协议2.0手册等资料，如果有歧义，可以与作者联系。&lt;/p&gt;
&lt;h1 data-hextra-search-id="简介"&gt;简介&lt;span class="hx:absolute hx:-mt-20" id="简介"&gt;&lt;/span&gt;
&lt;a href="#%e7%ae%80%e4%bb%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;写入操作有两种类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单次写操作&lt;/li&gt;
&lt;li&gt;连续写操作
其中，每次写入的数据块长度由CMD16（ SET_BLOCKLEN）命令设置。高容量SD卡的块大小固定为512字节，因此起始地址应与块边界对齐。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 data-hextra-search-id="单次写操作"&gt;单次写操作&lt;span class="hx:absolute hx:-mt-20" id="单次写操作"&gt;&lt;/span&gt;
&lt;a href="#%e5%8d%95%e6%ac%a1%e5%86%99%e6%93%8d%e4%bd%9c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令号&lt;/th&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;响应&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CMD24&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;WRITE_BLOCK&lt;/td&gt;
&lt;td&gt;写入一个块的数据，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;通过发送CMD24（WRITE_BLOCK）命令，往参数指定的地址写入一个块的数据。因为高容量卡（SDHC）的块长度固定为512字节，所以发送地址的时候，需要将起始地址对齐到512字节，也就是说，起始地址需要为512的倍数。
在写入一个块的数据之前，需要发送数据起始令牌，该令牌为1个字节，格式为0xFE，表示开始传输数据块。
接下来需要发送一个数据块，该数据块的长度由CMD16（SET_BLOCKLEN）命令设置，一般在初始化时设置完毕。高容量卡（SDHC）的块长度固定为512字节。
发送完数据块之后，需要发送一个CRC，长度为2字节，在SPI模式下，要求不高的情况下可以省略掉，固定为0xFF。
当SD卡收到以上数据的时候，会对这些数据进行计算，并且返回一个数据应答令牌，指示当前数操作是否发生错误。如果接收到的数据块没有错误，将对其进行编程。只要SD卡忙着编程，就会向主机发送连续的忙令牌流，即将DO（对应MCU的MISO）拉低，直到SD卡完成操作，才会将DO拉高，表示空闲。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/02/1507326852.png" alt="SD卡-SPI模式单次写操作.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h1 data-hextra-search-id="连续写操作"&gt;连续写操作&lt;span class="hx:absolute hx:-mt-20" id="连续写操作"&gt;&lt;/span&gt;
&lt;a href="#%e8%bf%9e%e7%bb%ad%e5%86%99%e6%93%8d%e4%bd%9c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令号&lt;/th&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;响应&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CMD25&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;WRITE_MULTIPLE_BLOCK&lt;/td&gt;
&lt;td&gt;连续写入多块数据，直到主机发送CMD12命令，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;通过发送CMD25（WRITE_MULTIPLE_BLOCK）命令，从参数指定的地址开始，连续写入数据块。因为高容量卡（SDHC）的块长度固定为512字节，所以发送地址的时候，需要将起始地址对齐到512字节，也就是说，起始地址需要为512的倍数。
在写入一个块的数据之前，需要发送数据起始令牌，该令牌为1个字节，格式为&lt;strong&gt;0xFC&lt;/strong&gt;，表示开始传输数据块。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：0xFC是连续写入的起始令牌，0xFE是单次读取、连续读取、单次写入的起始令牌。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;接下来需要发送一个数据块，该数据块的长度由CMD16（SET_BLOCKLEN）命令设置，一般在初始化时设置完毕。高容量卡（SDHC）的块长度固定为512字节。
发送完数据块之后，需要发送一个CRC，长度为2字节，在SPI模式下，要求不高的情况下可以省略掉，固定为0xFF。
当SD卡收到以上数据的时候，会对这些数据进行计算，并且返回一个数据应答令牌，指示当前数操作是否发生错误。如果接收到的数据块没有错误，将对其进行编程。只要SD卡忙着编程，就会向主机发送连续的忙令牌流，即将DO（对应MCU的MISO）拉低，直到SD卡完成操作，才会将DO拉高，表示空闲。
这时候，可以继续重复以上的步骤，进行连续传输。当需要结束写入数据的时候，可以发送结束数据令牌，该令牌位1个字节，格式为0xFD。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：连续写入的结束条件是发送结束令牌，而不是发送CMD12命令，CMD12命令只适用于连续读操作。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://mirror.simgor.cn/typecho_img/2023/02/654117237.png" alt="SD卡-SPI模式连续写操作.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;当写入时发生数据错误，SD卡会停止写入，这时候可以发送ACMD12命令获取正确写入的块数。该命令的响应格式为4个字节的块数，以及2字节的CRC。&lt;/p&gt;
&lt;h1 data-hextra-search-id="数据应答令牌格式"&gt;数据应答令牌格式&lt;span class="hx:absolute hx:-mt-20" id="数据应答令牌格式"&gt;&lt;/span&gt;
&lt;a href="#%e6%95%b0%e6%8d%ae%e5%ba%94%e7%ad%94%e4%bb%a4%e7%89%8c%e6%a0%bc%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;在发送完数据块内容和CRC之后，SD卡会返回一个数据应答令牌，指示当前数操作是否发生错误。该令牌为1个字节，低5位有效，第4位固定为0，第0位固定为1：
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/02/390449443.png" alt="Pasted image 20230203183242.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mtext&gt;：&lt;/mtext&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;1：3&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;：&lt;/span&gt;&lt;span class="mord"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;位&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;010&lt;/td&gt;
&lt;td&gt;数据已接受&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;CRC错误，数据被拒绝&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td&gt;写入错误，数据被拒绝&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 data-hextra-search-id="关于写入完成之后的操作可选"&gt;关于写入完成之后的操作（可选）&lt;span class="hx:absolute hx:-mt-20" id="关于写入完成之后的操作可选"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b3%e4%ba%8e%e5%86%99%e5%85%a5%e5%ae%8c%e6%88%90%e4%b9%8b%e5%90%8e%e7%9a%84%e6%93%8d%e4%bd%9c%e5%8f%af%e9%80%89" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;可以继续发送CMD13（SEND_STATUS）命令。要求SD卡发送状态寄存器的内容，以获取SD卡的当前状态。&lt;/p&gt;
&lt;h1 data-hextra-search-id="如果需要评论"&gt;如果需要评论&lt;span class="hx:absolute hx:-mt-20" id="如果需要评论"&gt;&lt;/span&gt;
&lt;a href="#%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81%e8%af%84%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;因为是个人博客，因备案要求不能使用交互服务，如果需要评论，可以前往本文的CSDN页：
&lt;a href="https://blog.csdn.net/Simgo/article/details/128876798" target="_blank" rel="noopener"&gt;CSDN-SD卡 SPI模式操作（3）写操作&lt;/a&gt;&lt;/p&gt;
&lt;h1 data-hextra-search-id="结尾"&gt;结尾&lt;span class="hx:absolute hx:-mt-20" id="结尾"&gt;&lt;/span&gt;
&lt;a href="#%e7%bb%93%e5%b0%be" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;关于SD卡在SPI模式下的操作，到这里也介绍得差不多了，大家可以根据思路去编写代码，也可以去学习正点原子等厂家的代码。后续我会继续给大家介绍FatFS的使用。&lt;/p&gt;</description></item><item><title>2.读操作</title><link>https://blog.simgor.cn/blog/2.%E8%AF%BB%E6%93%8D%E4%BD%9C/</link><guid>https://blog.simgor.cn/blog/2.%E8%AF%BB%E6%93%8D%E4%BD%9C/</guid><pubDate>Thu, 03 Jul 2025 22:40:43 +0800</pubDate><description>&lt;p&gt;作者是初学者，水平有限，本文仅作为个人学习笔记使用，不能保证内容的正确性。部分资料来源于网络，参考了SD卡协议2.0手册等资料，如果有歧义，可以与作者联系。&lt;/p&gt;
&lt;h1 data-hextra-search-id="简介"&gt;简介&lt;span class="hx:absolute hx:-mt-20" id="简介"&gt;&lt;/span&gt;
&lt;a href="#%e7%ae%80%e4%bb%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;SD卡在SPI模式下，初始化完成之后就可以进行块操作，如读操作。SD卡有两种读取数据块的方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单次读数据块&lt;/li&gt;
&lt;li&gt;连续读数据块&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中，每次读取的数据块大小，数据块的长度由CMD16（ SET_BLOCKLEN）命令设置。高容量SD卡的块大小固定为512字节，因此起始地址应与块边界对齐。&lt;/p&gt;
&lt;h1 data-hextra-search-id="单次读数据块"&gt;单次读数据块&lt;span class="hx:absolute hx:-mt-20" id="单次读数据块"&gt;&lt;/span&gt;
&lt;a href="#%e5%8d%95%e6%ac%a1%e8%af%bb%e6%95%b0%e6%8d%ae%e5%9d%97" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令号&lt;/th&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;响应&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CMD17&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;READ_SINGLE_BLOCK&lt;/td&gt;
&lt;td&gt;读取一个块的数据，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;通过发送CMD17（READ_SINGLE_BLOCK）命令，让SD卡按照参数的地址返回一个块的数据。当发生错误的时候，SD卡会响应一个数据错误令牌。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/02/3935951914.png" alt="SD卡-SPI模式单次读操作.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h1 data-hextra-search-id="连续数据块"&gt;连续数据块&lt;span class="hx:absolute hx:-mt-20" id="连续数据块"&gt;&lt;/span&gt;
&lt;a href="#%e8%bf%9e%e7%bb%ad%e6%95%b0%e6%8d%ae%e5%9d%97" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令号&lt;/th&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;响应&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CMD18&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;READ_MULTIPLE_BLOCK&lt;/td&gt;
&lt;td&gt;连续读取多块数据，直到主机发送CMD12命令，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;与单次读扇区相似，通过发送CMD18（READ_MULTIPLE_BLOCK）命令，让SD卡按照参数指定的地址开始连续返回数据块，需要停止读取时，MCU发送CMD12（STOP_TRANSMISSION）命令停止读取。当发生错误的时候，SD卡会响应一个数据错误令牌。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/02/2657434650.png" alt="SD卡-SPI模式连续读数据块.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h1 data-hextra-search-id="数据错误令牌格式"&gt;数据错误令牌格式&lt;span class="hx:absolute hx:-mt-20" id="数据错误令牌格式"&gt;&lt;/span&gt;
&lt;a href="#%e6%95%b0%e6%8d%ae%e9%94%99%e8%af%af%e4%bb%a4%e7%89%8c%e6%a0%bc%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;与R2令牌的内容相似，长度为1字节，其中高4位固定为0。在发送命令CMD17、CMD18之后，如果响应的R1令牌指示发生错误，SD卡将继续响应该令牌。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/02/3992104664.png" alt="数据错误令牌格式.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h1 data-hextra-search-id="如果需要评论"&gt;如果需要评论&lt;span class="hx:absolute hx:-mt-20" id="如果需要评论"&gt;&lt;/span&gt;
&lt;a href="#%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81%e8%af%84%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;因为是个人博客，因备案要求不能使用交互服务，如果需要评论，可以前往本文的CSDN页：
&lt;a href="https://blog.csdn.net/Simgo/article/details/128825969" target="_blank" rel="noopener"&gt;CSDN-SD卡 SPI模式操作（2）读操作&lt;/a&gt;&lt;/p&gt;</description></item><item><title>1.初始化SD卡</title><link>https://blog.simgor.cn/blog/1.%E5%88%9D%E5%A7%8B%E5%8C%96sd%E5%8D%A1/</link><guid>https://blog.simgor.cn/blog/1.%E5%88%9D%E5%A7%8B%E5%8C%96sd%E5%8D%A1/</guid><pubDate>Thu, 03 Jul 2025 22:39:49 +0800</pubDate><description>&lt;p&gt;作者是初学者，水平有限，本文仅作为个人学习笔记使用，不能保证内容的正确性。部分资料来源于网络，参考了SD卡协议2.0手册等资料，如果有歧义，可以与作者联系。&lt;/p&gt;
&lt;h1 data-hextra-search-id="省流直接看图文章下面有比较详细的初始化流程"&gt;省流直接看图，文章下面有比较详细的初始化流程&lt;span class="hx:absolute hx:-mt-20" id="省流直接看图文章下面有比较详细的初始化流程"&gt;&lt;/span&gt;
&lt;a href="#%e7%9c%81%e6%b5%81%e7%9b%b4%e6%8e%a5%e7%9c%8b%e5%9b%be%e6%96%87%e7%ab%a0%e4%b8%8b%e9%9d%a2%e6%9c%89%e6%af%94%e8%be%83%e8%af%a6%e7%bb%86%e7%9a%84%e5%88%9d%e5%a7%8b%e5%8c%96%e6%b5%81%e7%a8%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/1052810562.png" alt="Pasted image 20230128214632.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h1 data-hextra-search-id="常见问题"&gt;常见问题&lt;span class="hx:absolute hx:-mt-20" id="常见问题"&gt;&lt;/span&gt;
&lt;a href="#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;h2 data-hextra-search-id="q1-为什么发送初始化命令之后sd卡一直返回0xff"&gt;Q1、 为什么发送初始化命令之后，SD卡一直返回0xFF？&lt;span class="hx:absolute hx:-mt-20" id="q1-为什么发送初始化命令之后sd卡一直返回0xff"&gt;&lt;/span&gt;
&lt;a href="#q1-%e4%b8%ba%e4%bb%80%e4%b9%88%e5%8f%91%e9%80%81%e5%88%9d%e5%a7%8b%e5%8c%96%e5%91%bd%e4%bb%a4%e4%b9%8b%e5%90%8esd%e5%8d%a1%e4%b8%80%e7%9b%b4%e8%bf%94%e5%9b%9e0xff" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;作者亲自遇到过这个问题，我的工具是某宝上十几块钱的逻辑分析仪，芯片是CH32V203C8T6，开发板长这样子的
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/02/4080687956.png" alt="Pasted image 20230203214636.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;首先检查线路的连接，MCU的MISO连接SD卡的DO，MOSI连接SD卡的DI，如果MCU有多个SPI外设，一定要看清楚SD卡连接的是哪个SPI。
最有效的方法，就是用逻辑分析仪连接到SD卡所连接的线路上，看有没有信号输出。
确定线路连接正常之后，再检查上电需要的时钟信号是否正确，必须在100k~400kHz的频率之间，如果你的MCU主频设置过高，如144MHz，就算SPI用256级的分频，依然是非常大的。144MHz分频256次：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mtext&gt;主频&lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mi&gt;I&lt;/mi&gt;&lt;mtext&gt;分频数&lt;/mtext&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;144&lt;/mn&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;H&lt;/mi&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;256&lt;/mn&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;562.5&lt;/mn&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;/&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;
\frac{MCU主频}{SPI分频数}=\frac{144MHz}{256}=562.5Kbit/s
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.0463em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3603em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0576em;"&gt;S&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.1389em;"&gt;P&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0785em;"&gt;I&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;分频数&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;M&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;U&lt;/span&gt;&lt;span class="mord cjk_fallback"&gt;主频&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.0463em;vertical-align:-0.686em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3603em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;256&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;144&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.109em;"&gt;M&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0813em;"&gt;H&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.044em;"&gt;z&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.686em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:1em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;562.5&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;K&lt;/span&gt;&lt;span class="mord mathnormal"&gt;bi&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord"&gt;/&lt;/span&gt;&lt;span class="mord mathnormal"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;所以在合适的主频下，选择合适的SPI分频数。初始化完成之后，再调高SPI的主频，用于数据通信。
最后一个办法，可以检查初始化步骤是否在上电时操作。
有些开发板上的SD卡槽的电源，是直接连接开发板电源，所以要求SD卡初始化的操作必须在开发板刚上电时完成。但是调试时，一般只会让MCU复位而不会让开发板断电，从而SD卡无法进入初始化模式。
在这种情况下，我建议每次下载完程序之后，让开发板重新上电，或者先购买一个SD卡模块，让GPIO控制SD卡的上电，直到写完初始化部分的功能，代码能正常初始化SD卡之后，再换回开发板的卡槽。&lt;/p&gt;
&lt;h2 data-hextra-search-id="q2关于tf卡"&gt;Q2、关于TF卡&lt;span class="hx:absolute hx:-mt-20" id="q2关于tf卡"&gt;&lt;/span&gt;
&lt;a href="#q2%e5%85%b3%e4%ba%8etf%e5%8d%a1" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;有些TF卡不支持SPI模式操作，这个需要注意，可以多准备几张卡。目前我的8G金士顿TF卡，这个没问题，但是我的32G闪迪没法进入SPI模式。&lt;/p&gt;
&lt;h2 data-hextra-search-id="q3-mcu应该在什么时候发送命令"&gt;Q3、 MCU应该在什么时候发送命令？&lt;span class="hx:absolute hx:-mt-20" id="q3-mcu应该在什么时候发送命令"&gt;&lt;/span&gt;
&lt;a href="#q3-mcu%e5%ba%94%e8%af%a5%e5%9c%a8%e4%bb%80%e4%b9%88%e6%97%b6%e5%80%99%e5%8f%91%e9%80%81%e5%91%bd%e4%bb%a4" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;SD卡的DO线，空闲的情况下应该是高电平，当SD卡忙的时候，DO线会被SD卡拉低，所以应该在DO线为高电平的时候，发送命令。&lt;/p&gt;
&lt;h1 data-hextra-search-id="简介"&gt;简介&lt;span class="hx:absolute hx:-mt-20" id="简介"&gt;&lt;/span&gt;
&lt;a href="#%e7%ae%80%e4%bb%8b" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;SPI模式是MCU在没有SDIO的情况下控制MMC和SD卡的备用操作模式。比起SDIO模式，SPI模式的传输协议稍微简单一些，代价是传输速度也会变慢。&lt;/p&gt;
&lt;h1 data-hextra-search-id="引脚说明"&gt;引脚说明&lt;span class="hx:absolute hx:-mt-20" id="引脚说明"&gt;&lt;/span&gt;
&lt;a href="#%e5%bc%95%e8%84%9a%e8%af%b4%e6%98%8e" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/1515819948.png" alt="Pasted image 20230118202918.png" loading="lazy" /&gt;
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/3533747864.png" alt="Pasted image 20230118202939.png" loading="lazy" /&gt;
（图片来源于网络）&lt;/p&gt;
&lt;h1 data-hextra-search-id="引脚设置"&gt;引脚设置&lt;span class="hx:absolute hx:-mt-20" id="引脚设置"&gt;&lt;/span&gt;
&lt;a href="#%e5%bc%95%e8%84%9a%e8%ae%be%e7%bd%ae" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;在SPI模式下使用SD卡，按照SD卡的要求正确接线之后，需要将MCU的引脚进行如下设置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SD引脚&lt;/th&gt;
&lt;th&gt;MCU引脚&lt;/th&gt;
&lt;th&gt;MCU引脚模式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CS&lt;/td&gt;
&lt;td&gt;NSS&lt;/td&gt;
&lt;td&gt;复用推挽输出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCLK&lt;/td&gt;
&lt;td&gt;SCK&lt;/td&gt;
&lt;td&gt;复用推挽输出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI&lt;/td&gt;
&lt;td&gt;MOSI&lt;/td&gt;
&lt;td&gt;复用推挽输出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DO&lt;/td&gt;
&lt;td&gt;MISO&lt;/td&gt;
&lt;td&gt;浮空输入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VDD&lt;/td&gt;
&lt;td&gt;(任意引脚)&lt;/td&gt;
&lt;td&gt;复用推挽输出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VSS&lt;/td&gt;
&lt;td&gt;GND&lt;/td&gt;
&lt;td&gt;&amp;ndash;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中，SD卡的VDD可以使用一个引脚去控制SD卡的电源，从而使用MCU控制SD卡上电。
注意，有些SD卡的DO引脚需要一个上拉电阻，否则会在初始化的过程中失败。&lt;/p&gt;
&lt;h1 data-hextra-search-id="spi模式设置"&gt;SPI模式设置&lt;span class="hx:absolute hx:-mt-20" id="spi模式设置"&gt;&lt;/span&gt;
&lt;a href="#spi%e6%a8%a1%e5%bc%8f%e8%ae%be%e7%bd%ae" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;SD卡使用的是SPI模式0（CPHA=0，CPOL=0）和SPI模式3（CPHA=1，CPOL=1），一般情况下选择SPI模式3。命令发送模式为高位优先（MSB-first）。&lt;/p&gt;
&lt;h1 data-hextra-search-id="报文格式"&gt;报文格式&lt;span class="hx:absolute hx:-mt-20" id="报文格式"&gt;&lt;/span&gt;
&lt;a href="#%e6%8a%a5%e6%96%87%e6%a0%bc%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;从主机到卡的命令帧的长度是下图所示的固定长度的报文。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/358165483.png" alt="命令报文 1.png" loading="lazy" /&gt;
在SPI通信模式下，数据通信由主机控制，形式为：主机拉低NSS信号，发送命令令牌，SD卡发送响应令牌，如果需要返回数据，那么数据将跟在响应令牌后面。
发送完命令之后，应该继续发送0xFF，并且检查是否收到可用的应答。如果在设定时间内没有收到回应，那么视作超时处理。在收到应答之前，应该将NSS保持低电平。&lt;/p&gt;
&lt;h2 data-hextra-search-id="命令令牌格式"&gt;命令令牌格式&lt;span class="hx:absolute hx:-mt-20" id="命令令牌格式"&gt;&lt;/span&gt;
&lt;a href="#%e5%91%bd%e4%bb%a4%e4%bb%a4%e7%89%8c%e6%a0%bc%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;SPI模式的命令令牌固定为6个字节，命令的传输从最高位开始。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;位号&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;47&lt;/th&gt;
&lt;th&gt;46&lt;/th&gt;
&lt;th&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;45&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;40&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;45:40&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;45&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;40&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;39&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;39:8&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;39&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;7:1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;7&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;位宽&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;0&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;1&amp;rdquo;&lt;/td&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;td&gt;&amp;ldquo;1&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;开始位&lt;/td&gt;
&lt;td&gt;数据传输位&lt;/td&gt;
&lt;td&gt;命令号（CMDx）&lt;/td&gt;
&lt;td&gt;参数&lt;/td&gt;
&lt;td&gt;CRC校验&lt;/td&gt;
&lt;td&gt;结束位&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中，在SPI模式下，CRC仅在初始化卡时有效，如CMD0、CMD8等。不使用CRC时，可将CRC所有位置1。
当命令为CMD0时，低8位应该为0x95，
当命令为CMD8时，低8位应该为0x87。&lt;/p&gt;
&lt;h2 data-hextra-search-id="命令令牌描述"&gt;命令令牌描述&lt;span class="hx:absolute hx:-mt-20" id="命令令牌描述"&gt;&lt;/span&gt;
&lt;a href="#%e5%91%bd%e4%bb%a4%e4%bb%a4%e7%89%8c%e6%8f%8f%e8%bf%b0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;命令令牌分为CMD和ACMD，ACMD是应用程序命令，在发送ACMD之前，应该先发送CMD55（APP_CMD）。填充位和保留位均为&amp;quot;0&amp;quot;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令号&lt;/th&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;响应&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CMD0&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：填充位&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;GO_IDLE_STATE&lt;/td&gt;
&lt;td&gt;将卡复位到IDLE状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD8&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:12&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：保留位，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;11&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;11:8&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;11&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：支持的电压（VHS），&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;7:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;7&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：需要回显的参数（echo-back）&lt;/td&gt;
&lt;td&gt;R7&lt;/td&gt;
&lt;td&gt;SEND_IF_COND&lt;/td&gt;
&lt;td&gt;发送包含主机电源电压信息，询问被访问的卡是否能在供电电压范围内工作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD12&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：填充位&lt;/td&gt;
&lt;td&gt;R1b&lt;/td&gt;
&lt;td&gt;STOP_TRANSMISSION&lt;/td&gt;
&lt;td&gt;强制停止当前SD卡的数据传输，用于多块数据操作，结束传输&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD16&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：块长度&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;SET_BLOCKLEN&lt;/td&gt;
&lt;td&gt;设置SD卡的块大小（字节），后续所有块操作命令（读和写）都是以此设置的大小为准，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD17&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;READ_SINGLE_BLOCK&lt;/td&gt;
&lt;td&gt;读取一个块的数据，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD18&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;READ_MULTIPLE_BLOCK&lt;/td&gt;
&lt;td&gt;连续读取多块数据，直到主机发送CMD12命令，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD24&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;WRITE_BLOCK&lt;/td&gt;
&lt;td&gt;写入一个块的数据，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD25&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据地址，单位：字节（SDSC），单位:512字节（SDHC）&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;WRITE_MULTIPLE_BLOCK&lt;/td&gt;
&lt;td&gt;连续写入多块数据，直到主机发送CMD12命令，参数为块的首地址。块的长度由CMD16设置，对于高容量卡，块大小固定为512字节&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD55&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：填充位&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;APP_CMD&lt;/td&gt;
&lt;td&gt;通知SD卡，接下来发送的命令是特定于应用程序的命令，而不是标准命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMD58&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：填充位&lt;/td&gt;
&lt;td&gt;R3&lt;/td&gt;
&lt;td&gt;READ_OCR&lt;/td&gt;
&lt;td&gt;读取OCR寄存器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACMD23&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;23&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31:23&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;23&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：保留位，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;22&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;22:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;22&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：数据块数&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;SET_WR_BLK_ERASE_COUNT&lt;/td&gt;
&lt;td&gt;需要预擦除的数据块个数，以提升SD卡写入的性能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACMD41&lt;/td&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;31&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：保留位，&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;30&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;30&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;30&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：HCS， &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;29&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;29:0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;29&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;：保留位&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;SD_SEND_OP_COND&lt;/td&gt;
&lt;td&gt;发送主机容量支持信息，并将卡初始化，HCS一般置“1”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-hextra-search-id="响应令牌格式"&gt;响应令牌格式&lt;span class="hx:absolute hx:-mt-20" id="响应令牌格式"&gt;&lt;/span&gt;
&lt;a href="#%e5%93%8d%e5%ba%94%e4%bb%a4%e7%89%8c%e6%a0%bc%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;有几种类型的响应令牌，所有数据都是先传输高位。所有令牌的高8位都是R1令牌。&lt;/p&gt;
&lt;h3 data-hextra-search-id="r１令牌"&gt;R１令牌&lt;span class="hx:absolute hx:-mt-20" id="r１令牌"&gt;&lt;/span&gt;
&lt;a href="#r%ef%bc%91%e4%bb%a4%e7%89%8c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;除SEND_STATUS命令外，SD卡在每次收到命令后都会发送此响应令牌。长度为１字节，MSB始终设置为&amp;quot;0&amp;quot;。&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;6&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;0:6&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;是错误指示，&amp;ldquo;1&amp;quot;为发生错误。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/1522903460.png" alt="Pasted image 20230128211046.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位号&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;处于空闲状态：SD卡处于空闲状态，且正在运行初始化程序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;擦除重置：在执行擦除前，一个擦除指令序列被清除，因为收到了一个超出擦除序列的指令。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;非法指令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;CRC错误：上一条命令的CRC检查失败&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;擦除序列错误：在擦除指令序列中发现错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;地址错误：命令中使用了与块长度不匹配的未对齐地址。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;参数错误：命令的参数（例如地址、块长度）超出了此卡的允许范围。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;固定为0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-hextra-search-id="r1b令牌"&gt;R1b令牌&lt;span class="hx:absolute hx:-mt-20" id="r1b令牌"&gt;&lt;/span&gt;
&lt;a href="#r1b%e4%bb%a4%e7%89%8c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;该响应令牌与R1格式相同，但可选地添加了忙信号。忙信号令牌可以是任意数量的字节。零值表示卡正忙。非零值表示卡已准备好下一个命令。&lt;/p&gt;
&lt;h3 data-hextra-search-id="r2令牌"&gt;R2令牌&lt;span class="hx:absolute hx:-mt-20" id="r2令牌"&gt;&lt;/span&gt;
&lt;a href="#r2%e4%bb%a4%e7%89%8c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;通常情况下只会用到R2令牌的最低位，也就是卡被写保护。该令牌是CMD13（SEND_STATUS）的响应令牌。高8位为R1令牌。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/498398950.png" alt="Pasted image 20230128212104.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3 data-hextra-search-id="r3令牌"&gt;R3令牌&lt;span class="hx:absolute hx:-mt-20" id="r3令牌"&gt;&lt;/span&gt;
&lt;a href="#r3%e4%bb%a4%e7%89%8c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;该令牌是CMD58（READ_OCR）的响应令牌，共5个字节，用于获取OCR寄存器的数据。高8位为R1令牌，低4字节为OCR寄存器的数据。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/4079843275.png" alt="Pasted image 20230128212417.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3 data-hextra-search-id="r7令牌"&gt;R7令牌&lt;span class="hx:absolute hx:-mt-20" id="r7令牌"&gt;&lt;/span&gt;
&lt;a href="#r7%e4%bb%a4%e7%89%8c" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;该令牌是CMD8（SEND_IF_COND）的响应令牌，共5字节，主要用于获取SD卡工作电压信息，高8位为R1令牌。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/2649515220.png" alt="Pasted image 20230128213548.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位号&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;0:7&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;发送CMD8时会发送一个1字节的参数echo-back，这里将返回这个参数，一般用于检查通讯是否正常。一般在CMD8使用10101010b作为参数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;11&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;8:11&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;8&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;11&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;SD卡能接受的电压值（见电压值表，通常为0001b）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;27&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;12:27&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;12&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;27&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;保留位，固定为“00000h”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;28&lt;/mn&gt;&lt;mo&gt;:&lt;/mo&gt;&lt;mn&gt;31&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;28:31&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;28&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.6444em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;31&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;命令号，固定为“001000b”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;电压值如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0000b&lt;/td&gt;
&lt;td&gt;未定义&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0001b&lt;/td&gt;
&lt;td&gt;2.7-3.6V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0010b&lt;/td&gt;
&lt;td&gt;保留为更加低的电压值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0100b&lt;/td&gt;
&lt;td&gt;保留&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000b&lt;/td&gt;
&lt;td&gt;保留&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 data-hextra-search-id="初始化sd卡"&gt;初始化SD卡&lt;span class="hx:absolute hx:-mt-20" id="初始化sd卡"&gt;&lt;/span&gt;
&lt;a href="#%e5%88%9d%e5%a7%8b%e5%8c%96sd%e5%8d%a1" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;由于SD卡进入SPI模式后，只能通过断电退出，为了方便调试，建议使用GPIO控制SD卡的上电。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/1052810562.png" alt="Pasted image 20230128214632.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2 data-hextra-search-id="上电复位"&gt;上电复位&lt;span class="hx:absolute hx:-mt-20" id="上电复位"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%8a%e7%94%b5%e5%a4%8d%e4%bd%8d" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/1323167921.png" alt="Pasted image 20230129042952.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;SD卡上电之后，需要往sclk线发送至少74个时钟信号，注意频率在100k~400kHz之间，建议直接使用低速SPI发送10个0xFF，在此过程中，即使是为了进入SPI模式，CS线也需要保持高电平。
当SD卡上电完毕（可以延迟1ms）之后，需要发送CMD0进行复位操作。为了使SD卡进入SPI模式，需要将CS线拉低，然后发送CMD0，注意CMD0的格式，命令长度固定为6个字节。
对于CMD0命令，应该发送0x40、0x00、0x00、0x00、0x00、0x95，发送完毕之后还需要发送若干个0xFF等待SD卡响应。
当SD卡响应时，应该返回一个R1令牌，且内容为0x01。
接收完毕之后，应该拉高CS，然后再发送一个0xFF。
&lt;img src="https://mirror.simgor.cn/typecho_img/2023/01/4151156777.png" alt="Pasted image 20230129042629.png" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果在此期间，SD卡一直没有返回R1令牌，MISO一直为0xFF，那么有以下几个点需要检查：
1、 检查当前复位操作是否为上电操作，该操作应该是SD卡刚上电时的操作。如果当前是个debug程序，应该将SD卡的VDD引脚接到MCU，由MCU控制SD卡的上电。
2、 检查SD卡的连接是否正确，MOSI和MISO是不是接反了？正确的接法是MOSI接DI，MISO接DO。
3、 检查上电时，SCLK的时钟是否发送正确，必须大于74个时钟，而且频率必须在100k~400kHz之间。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-hextra-search-id="检查卡版本是否为ver-1x"&gt;检查卡版本是否为Ver 1.X&lt;span class="hx:absolute hx:-mt-20" id="检查卡版本是否为ver-1x"&gt;&lt;/span&gt;
&lt;a href="#%e6%a3%80%e6%9f%a5%e5%8d%a1%e7%89%88%e6%9c%ac%e6%98%af%e5%90%a6%e4%b8%baver-1x" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;通过发送一个CMD8命令，如果SD卡响应该命令无效，说明该卡的版本为Ver1.X。如果有响应，说明卡版本为Ver2.X或者更高的版本。
CMD8的参数一般为0x000001AA，SD卡收到响应之后，应该首先检查高8位，也就是R1令牌部分。
当R1的第二位，也就是 R1 &amp;amp; 0x0004为真时，该命令无效，说明卡版本为Ver1.X。
当CMD8有效时，应该抛弃剩余的4字节数据。&lt;/p&gt;
&lt;h2 data-hextra-search-id="检查支持电压范围可选"&gt;检查支持电压范围（可选）&lt;span class="hx:absolute hx:-mt-20" id="检查支持电压范围可选"&gt;&lt;/span&gt;
&lt;a href="#%e6%a3%80%e6%9f%a5%e6%94%af%e6%8c%81%e7%94%b5%e5%8e%8b%e8%8c%83%e5%9b%b4%e5%8f%af%e9%80%89" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;主要通过CMD58命令获取OCR寄存器的信息，以获得SD卡的支持电压范围。&lt;/p&gt;
&lt;h2 data-hextra-search-id="开始初始化sd卡"&gt;开始初始化SD卡&lt;span class="hx:absolute hx:-mt-20" id="开始初始化sd卡"&gt;&lt;/span&gt;
&lt;a href="#%e5%bc%80%e5%a7%8b%e5%88%9d%e5%a7%8b%e5%8c%96sd%e5%8d%a1" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;通过发送ACMD41命令去初始化SD卡。注意，在发送ACMD41之前，应该先发送CMD55命令，而且CMD55命令会响应一个R1令牌，此处的R1令牌可以直接抛弃。&lt;/p&gt;
&lt;p&gt;对于Ver1.X版本的卡，ACMD41的参数应该为0x00000000；
对于Ver2.X以及更高版本的卡，ACMD41的参数一般使用0x40000000。&lt;/p&gt;
&lt;p&gt;这时需要不断发送0xFF同时检查接收R1令牌（其实这里的等待接收步骤和CMD0一样），直到R1为0，表示SD卡初始化成功。这里的循环建议添加超时计数。&lt;/p&gt;
&lt;h2 data-hextra-search-id="获取卡的容量状态"&gt;获取卡的容量状态&lt;span class="hx:absolute hx:-mt-20" id="获取卡的容量状态"&gt;&lt;/span&gt;
&lt;a href="#%e8%8e%b7%e5%8f%96%e5%8d%a1%e7%9a%84%e5%ae%b9%e9%87%8f%e7%8a%b6%e6%80%81" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;通过CMD58命令获取OCR寄存器的信息，其中CCS位位于OCR寄存器的第30位。
1为高容量卡（SDHC）
0为标准容量卡（SDSC）&lt;/p&gt;
&lt;h2 data-hextra-search-id="设置块大小"&gt;设置块大小&lt;span class="hx:absolute hx:-mt-20" id="设置块大小"&gt;&lt;/span&gt;
&lt;a href="#%e8%ae%be%e7%bd%ae%e5%9d%97%e5%a4%a7%e5%b0%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;SD卡的所有读写操作，都是以块为单位去读写，因此需要预先设置一个块的大小。
通过CMD16命令设置SD卡的块大小（字节），后续所有块操作命令（读和写）都是以此设置的大小为准，对于高容量卡，块大小固定为512字节。
对于低容量的卡，为了统一，一般建议将块大小设置为512字节。&lt;/p&gt;
&lt;h1 data-hextra-search-id="结尾"&gt;结尾&lt;span class="hx:absolute hx:-mt-20" id="结尾"&gt;&lt;/span&gt;
&lt;a href="#%e7%bb%93%e5%b0%be" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;SD卡初始化完成之后，可以将SPI总线切换成高速总线，将在下一章继续介绍SD卡的读操作。&lt;/p&gt;
&lt;h1 data-hextra-search-id="参考文章"&gt;参考文章&lt;span class="hx:absolute hx:-mt-20" id="参考文章"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83%e6%96%87%e7%ab%a0" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.0xaa55.com/thread-25692-1-1.html" target="_blank" rel="noopener"&gt;【翻译】如何使用MMC/SD卡&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.csdn.net/weixin_45640197/article/details/126618265" target="_blank" rel="noopener"&gt;SD卡寄存器及对应的CMD命令描述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.csdn.net/weixin_39489470/article/details/103527313" target="_blank" rel="noopener"&gt;SD卡小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 data-hextra-search-id="如果需要评论"&gt;如果需要评论&lt;span class="hx:absolute hx:-mt-20" id="如果需要评论"&gt;&lt;/span&gt;
&lt;a href="#%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81%e8%af%84%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;因为是个人博客，因备案要求不能使用交互服务，如果需要评论，可以前往本文的CSDN页：
&lt;a href="https://blog.csdn.net/Simgo/article/details/128825962" target="_blank" rel="noopener"&gt;CSDN-SD卡 SPI模式操作（1）初始化SD卡&lt;/a&gt;&lt;/p&gt;</description></item><item><title>晶振负载电容</title><link>https://blog.simgor.cn/tools/%E6%99%B6%E6%8C%AF%E8%B4%9F%E8%BD%BD%E7%94%B5%E5%AE%B9%E8%AE%A1%E7%AE%97%E5%B7%A5%E5%85%B7/</link><guid>https://blog.simgor.cn/tools/%E6%99%B6%E6%8C%AF%E8%B4%9F%E8%BD%BD%E7%94%B5%E5%AE%B9%E8%AE%A1%E7%AE%97%E5%B7%A5%E5%85%B7/</guid><pubDate>Thu, 03 Jul 2025 22:34:38 +0800</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="crystal-load" aria-label="晶振负载电容"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="等效负载"&gt;等效负载&lt;span class="hx:absolute hx:-mt-20" id="等效负载"&gt;&lt;/span&gt;
&lt;a href="#%e7%ad%89%e6%95%88%e8%b4%9f%e8%bd%bd" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;晶振手册里的 CL 是晶振两端看到的等效负载。两侧对地电容 C1、C2 串联后，再加上等效寄生电容 Cs：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;L&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; C_{\mathrm{L}} = \frac{C_1C_2}{C_1+C_2}+C_{\mathrm{s}} &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3283em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;L&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.1963em;vertical-align:-0.836em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3603em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.836em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0715em;"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.1514em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;两侧取相同值时，C1 = C2 = 2 × (CL − Cs)。例如 CL = 12.5 pF、Cs = 3 pF，两侧的理想值都是 19 pF；用两颗 18 pF 得到 12 pF，用两颗 20 pF 则得到 13 pF。&lt;/p&gt;
&lt;h2 data-hextra-search-id="非对称选值"&gt;非对称选值&lt;span class="hx:absolute hx:-mt-20" id="非对称选值"&gt;&lt;/span&gt;
&lt;a href="#%e9%9d%9e%e5%af%b9%e7%a7%b0%e9%80%89%e5%80%bc" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;固定 C1 后，C2 = (CL − Cs) × C1 / [C1 − (CL − Cs)]。仍以上面的负载为例，C1 取 22 pF，算出的 C2 为 16.72 pF，可以再比较附近的标准值。&lt;/p&gt;
&lt;p&gt;Cs 是按实际网络折算的寄生电容，包含引脚和布线的影响。容差范围同时计入两侧元件精度与 Cs 的估计偏差。负载差与频率 ppm 并非直接对应关系；频率偏移还取决于晶振的等效参数。&lt;/p&gt;</description></item><item><title>反馈分压</title><link>https://blog.simgor.cn/tools/%E7%A8%B3%E5%8E%8B%E5%99%A8%E5%88%86%E5%8E%8B%E7%94%B5%E9%98%BB%E8%AE%A1%E7%AE%97%E5%B7%A5%E5%85%B7/</link><guid>https://blog.simgor.cn/tools/%E7%A8%B3%E5%8E%8B%E5%99%A8%E5%88%86%E5%8E%8B%E7%94%B5%E9%98%BB%E8%AE%A1%E7%AE%97%E5%B7%A5%E5%85%B7/</guid><pubDate>Thu, 03 Jul 2025 22:24:02 +0800</pubDate><description>&lt;div class="simgor-toolkit not-prose" data-tool-id="voltage-divider" aria-label="反馈分压"&gt;
&lt;p class="tool-loading"&gt;正在准备工具…&lt;/p&gt;
&lt;noscript&gt;&lt;style&gt;.tool-loading{display:none}&lt;/style&gt;&lt;p&gt;请启用 JavaScript 使用工具；下方公式与说明仍可阅读。&lt;/p&gt;&lt;/noscript&gt;
&lt;/div&gt;
&lt;h2 data-hextra-search-id="接法与公式"&gt;接法与公式&lt;span class="hx:absolute hx:-mt-20" id="接法与公式"&gt;&lt;/span&gt;
&lt;a href="#%e6%8e%a5%e6%b3%95%e4%b8%8e%e5%85%ac%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;R1 接在输出 Vout 与反馈端 FB 之间，R2 接在 FB 与地之间。稳压器把 FB 保持在参考电压 Vref，输出便由两只电阻的比值决定：&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;u&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;f&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mrow&gt;&lt;mo fence="true"&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mfrac&gt;&lt;msub&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mfrac&gt;&lt;mo fence="true"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; V_{\mathrm{out}} = V_{\mathrm{ref}}\left(1+\frac{R_1}{R_2}\right) &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.2222em;"&gt;V&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.2806em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.2222em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight"&gt;out&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="katex-base"&gt;&lt;span class="katex-strut" style="height:2.4em;vertical-align:-0.95em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.2222em;"&gt;V&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3361em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.2222em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathrm mtight" style="margin-right:0.0778em;"&gt;ref&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.1667em;"&gt;&lt;/span&gt;&lt;span class="minner"&gt;&lt;span class="mopen delimcenter" style="top:0em;"&gt;&lt;span class="delimsizing size3"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:1.3603em;"&gt;&lt;span style="top:-2.314em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0077em;"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.23em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="frac-line" style="border-bottom-width:0.04em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.677em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal" style="margin-right:0.0077em;"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3011em;"&gt;&lt;span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="katex-sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.836em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose delimcenter" style="top:0em;"&gt;&lt;span class="delimsizing size3"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;例如 Vref = 0.6 V，R1 = 110 kΩ、R2 = 15 kΩ，输出正好是 5 V；换成 68 kΩ 和 15 kΩ，输出为 3.32 V。&lt;/p&gt;
&lt;h2 data-hextra-search-id="选值与容差"&gt;选值与容差&lt;span class="hx:absolute hx:-mt-20" id="选值与容差"&gt;&lt;/span&gt;
&lt;a href="#%e9%80%89%e5%80%bc%e4%b8%8e%e5%ae%b9%e5%b7%ae" class="subheading-anchor" aria-label="此章节的永久链接"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;先按目标电压找比例，再看分压电流和芯片手册允许的阻值范围。电阻越大，静态耗电越小，但反馈偏置电流和漏电带来的影响也越明显。&lt;/p&gt;
&lt;p&gt;候选按电压误差排序；误差相同的组合优先取 R2 接近 10 kΩ。E12、E24、E96 表示标称值系列，实际容差另填。展开“容差与阻值范围”可以调整选值范围、元件精度和 Vref 精度。&lt;/p&gt;
&lt;p&gt;容差范围取 R1、R2 与 Vref 的上下限组合，未计入温漂与反馈偏置电流。功耗和支路电流按标称值计算。&lt;/p&gt;</description></item></channel></rss>