窗口看门狗

<!doctype html>窗口看门狗

html { }
:root { }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; background: inherit }
iframe { margin: auto }
a.url { }
a:active,a:hover { outline: 0px }
.in-text-selection,::selection { background: var(--select-text-bg-color); color: var(--select-text-font-color) }
#write { margin: 0px auto; height: auto; width: inherit; position: relative; white-space: normal; padding-top: 40px }
#write.first-line-indent p { text-indent: 2em }
#write.first-line-indent li p,#write.first-line-indent p * { text-indent: 0px }
#write.first-line-indent li { margin-left: 2em }
.for-image #write { padding-left: 8px; padding-right: 8px }
body.typora-export { padding-left: 30px; padding-right: 30px }
.typora-export .footnote-line,.typora-export li,.typora-export p { white-space: pre-wrap }
#write li>figure:first-child { margin-top: -20px }
#write ol,#write ul { position: relative }
img { max-width: 100%; vertical-align: middle }
button,input,select,textarea { color: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-family: inherit }
input[type="checkbox"],input[type="radio"] { line-height: normal; padding: 0px }
*,::after,::before { }
#write h1,#write h2,#write h3,#write h4,#write h5,#write h6,#write p,#write pre { width: inherit }
#write h1,#write h2,#write h3,#write h4,#write h5,#write h6,#write p { position: relative }
h1,h2,h3,h4,h5,h6 { orphans: 2 }
p { orphans: 4 }
h1 { font-size: 2rem }
h2 { font-size: 1.8rem }
h3 { font-size: 1.6rem }
h4 { font-size: 1.4rem }
h5 { font-size: 1.2rem }
h6 { font-size: 1rem }
.md-math-block,.md-rawblock,h1,h2,h3,h4,h5,h6,p { margin-top: 1rem; margin-bottom: 1rem }
.hidden { display: none }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic }
a { cursor: pointer }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); cursor: pointer }
sup.md-footnote a,sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit }
figure { margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px }
figure>table { margin: 0px !important }
tr { }
thead { display: table-header-group }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; text-align: left }
table.md-table td { min-width: 32px }
.CodeMirror-gutters { border-right: 0px; background-color: inherit }
.CodeMirror { text-align: left }
.CodeMirror-placeholder { opacity: 0.3 }
.CodeMirror pre { padding: 0px 4px }
.CodeMirror-lines { padding: 0px }
div.hr:focus { cursor: none }
#write pre { white-space: pre-wrap }
#write.fences-no-line-wrapping pre { white-space: pre }
#write pre.ty-contain-cm { white-space: normal }
.CodeMirror-gutters { margin-right: 4px }
.md-fences { font-size: 0.9rem; display: block; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px }
#write .md-fences.mock-cm { white-space: pre-wrap }
.md-fences.md-fences-with-lineno { padding-left: 0px }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px }
.CodeMirror-line,twitterwidget { }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em }
.footnotes+.footnotes { margin-top: 0px }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; line-height: normal; font-weight: 400; text-align: left; direction: ltr }
li div { padding-top: 0px }
blockquote { margin: 1rem 0px }
li .mathjax-block,li p { margin: 0.5rem 0px }
li { margin: 0px; position: relative }
blockquote>:last-child { margin-bottom: 0px }
blockquote>:first-child,li>:first-child { margin-top: 0px }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal }
#write .footnote-line { white-space: pre-wrap }
.footnote-line { margin-top: 0.714em; font-size: 0.7em }
a img,img a { cursor: pointer }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block }
p>.md-image:only-child:not(.md-img-error) img,p>img:only-child { display: block; margin: auto }
p>.md-image:only-child { display: inline-block; width: 100% }
#write .MathJax_Display { margin: 0.8em 0px 0px }
.md-math-block { width: 100% }
.md-math-block:not(:empty)::after { display: none }
[contenteditable="true"]:active,[contenteditable="true"]:focus { outline: 0px }
.md-task-list-item { position: relative; list-style-type: none }
.task-list-item.md-task-list-item { padding-left: 0px }
.md-task-list-item>input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px) }
.math { font-size: 1rem }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem }
.md-toc-content { position: relative; margin-left: 0px }
.md-toc-content::after,.md-toc::after { display: none }
.md-toc-item { display: block; color: rgb(65, 131, 196) }
.md-toc-item a { text-decoration: none }
.md-toc-inner:hover { text-decoration: underline }
.md-toc-inner { display: inline-block; cursor: pointer }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700 }
.md-toc-h2 .md-toc-inner { margin-left: 2em }
.md-toc-h3 .md-toc-inner { margin-left: 4em }
.md-toc-h4 .md-toc-inner { margin-left: 6em }
.md-toc-h5 .md-toc-inner { margin-left: 8em }
.md-toc-h6 .md-toc-inner { margin-left: 10em }
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit }
.footnote-line a:not(.reversefootnote) { color: inherit }
.md-attr { display: none }
.md-fn-count::after { content: "." }
code,pre,samp,tt { font-family: var(--monospace) }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); white-space: nowrap; vertical-align: middle }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace) }
code { text-align: left; vertical-align: initial }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important }
.md-inline-math .MathJax_SVG .noError { display: none !important }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; display: block !important }
.MathJax_SVG_Display,.md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace) }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px }
.MathJax_SVG * { }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif }
.md-diagram-panel>svg { max-width: 100% }
[lang="mermaid"] svg,[lang="flow"] svg { max-width: 100% }
[lang="mermaid"] .node text { font-size: 1rem }
table tr th { border-bottom: 0px }
video { max-width: 100%; display: block; margin: 0px auto }
iframe { max-width: 100%; width: 100%; border: none }
.highlight td,.highlight tr { border: 0px }
:root { }
pre { }
html { font-size: 16px }
html,body { background-color: rgb(243, 242, 238); font-family: "PT Serif", "Times New Roman", Times, serif; color: rgb(31, 9, 9); line-height: 1.5em }
#write { max-width: 40em }
ol li { list-style-type: decimal; list-style-position: outside }
ul li { list-style-type: disc; list-style-position: outside }
ol,ul { list-style: none }
blockquote,q { quotes: none }
blockquote::before,blockquote::after,q::before,q::after { content: none }
table { border-collapse: collapse; border-spacing: 0px }
h1,h2,h3,h4,h5,h6 { font-weight: bold }
h1 { font-size: 1.875em; line-height: 1.6em; margin-top: 2em }
h2,h3 { font-size: 1.3125em; line-height: 1.15; margin-top: 2.28571em; margin-bottom: 1.15em }
h3 { font-weight: normal }
h4 { font-size: 1.125em; margin-top: 2.67em }
h5,h6 { font-size: 1em }
h1 { border-bottom: 1px solid; margin-bottom: 1.875em; padding-bottom: 0.8125em }
a { text-decoration: none; color: rgb(6, 85, 136) }
a:hover,a:active { text-decoration: underline }
p,blockquote,.md-fences { margin-bottom: 1.5em }
h1,h2,h3,h4,h5,h6 { margin-bottom: 1.5em }
blockquote { font-style: italic; border-left: 5px solid; margin-left: 2em; padding-left: 1em }
ul,ol { margin: 0px 0px 1.5em 1.5em }
.md-meta,.md-before,.md-after { color: rgb(153, 153, 153) }
table { margin-bottom: 1.5em; font-size: 1em }
thead th,tfoot th { padding: 0.25em 0.25em 0.25em 0.4em; text-transform: uppercase }
th { text-align: left }
td { vertical-align: top; padding: 0.25em 0.25em 0.25em 0.4em }
code,.md-fences { background-color: rgb(218, 218, 218) }
code { padding-left: 2px; padding-right: 2px }
.md-fences { margin-left: 2em; margin-bottom: 3em; padding-left: 1ch; padding-right: 1ch }
pre,code,tt { font-size: 0.875em; line-height: 1.71429em }
h1 { line-height: 1.3em; font-weight: normal; margin-bottom: 0.5em }
p+ul,p+ol { margin-top: 0.5em }
h3+ul,h4+ul,h5+ul,h6+ul,h3+ol,h4+ol,h5+ol,h6+ol { margin-top: 0.5em }
li>ul,li>ol { margin-top: inherit; margin-bottom: 0px }
li ol>li { list-style-type: lower-alpha }
li li ol>li { list-style-type: lower-roman }
h2,h3 { margin-bottom: 0.75em }
hr { border-top: none; border-right: none; border-bottom: 1px solid; border-left: none }
h1 { border-color: rgb(197, 197, 197) }
blockquote { border-color: rgb(186, 186, 186); color: rgb(101, 101, 101) }
blockquote ul,blockquote ol { margin-left: 0px }
.ty-table-edit { background-color: transparent }
thead { background-color: rgb(218, 218, 218) }
tr:nth-child(2n) { background: rgb(232, 231, 231) }
hr { border-color: rgb(197, 197, 197) }
.task-list { padding-left: 1rem }
.md-task-list-item { padding-left: 1.5rem; list-style-type: none }
.md-task-list-item>input::before { content: "√"; display: inline-block; width: 1.25rem; height: 1.6rem; vertical-align: middle; text-align: center; color: rgb(221, 221, 221); background-color: rgb(243, 242, 238) }
.md-task-list-item>input:checked::before,.md-task-list-item>input[checked]::before { color: inherit }
#write pre.md-meta-block { min-height: 1.875rem; color: rgb(85, 85, 85); border: 0px; background: transparent; margin-left: 1em; margin-top: 1em }
.md-image>.md-meta { color: rgb(155, 81, 70) }
.md-image>.md-meta { font-family: Menlo, "Ubuntu Mono", Consolas, "Courier New", "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", serif }
#write>h3.md-focus::before { left: -1.5rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153) }
#write>h4.md-focus::before { left: -1.5rem; top: 0.25rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153) }
#write>h5.md-focus::before { left: -1.5rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153) }
#write>h6.md-focus::before { left: -1.5rem; top: 0.3125rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153) }
.md-toc:focus .md-toc-content { margin-top: 19px }
.md-toc-content:empty::before { color: rgb(6, 85, 136) }
.md-toc-item { color: rgb(6, 85, 136) }
#write div.md-toc-tooltip { background-color: rgb(243, 242, 238) }
#typora-sidebar { background-color: rgb(243, 242, 238) }
.pin-outline #typora-sidebar { background: inherit; border-right: 1px dashed }
.pin-outline #typora-sidebar:hover .outline-title-wrapper { border-left: 1px dashed }
.outline-item:hover { background-color: rgb(218, 218, 218); border-left: 28px solid rgb(218, 218, 218); border-right: 18px solid rgb(218, 218, 218) }
.typora-node .outline-item:hover { border-right: 28px solid rgb(218, 218, 218) }
.outline-expander::before { content: "?"; font-family: FontAwesome; font-size: 14px; top: 1px }
.outline-expander:hover::before,.outline-item-open>.outline-item>.outline-expander::before { content: "?" }
.modal-content { background-color: rgb(243, 242, 238) }
.auto-suggest-container ul li { list-style-type: none }
.megamenu-menu,#top-titlebar,#top-titlebar *,.megamenu-content { background: rgb(243, 242, 238); color: rgb(31, 9, 9) }
.megamenu-menu-header { border-bottom: 1px dashed rgb(32, 43, 51) }
.megamenu-menu { border-right: 1px dashed }
header,.context-menu,.megamenu-content,footer { font-family: "PT Serif", "Times New Roman", Times, serif; color: rgb(31, 9, 9) }
#megamenu-back-btn { color: rgb(31, 9, 9); border-color: rgb(31, 9, 9) }
.megamenu-menu-header #megamenu-menu-header-title::before { color: rgb(31, 9, 9) }
.megamenu-menu-list li a:hover,.megamenu-menu-list li a.active { color: inherit; background-color: rgb(232, 231, 223) }
.long-btn:hover { background-color: rgb(232, 231, 223) }
#recent-file-panel tbody tr:nth-child(2n-1) { background-color: transparent !important }
.megamenu-menu-panel tbody tr:hover td:nth-child(0n+2) { color: inherit }
.megamenu-menu-panel .btn { background-color: rgb(210, 209, 209) }
.btn-default { background-color: transparent }
.typora-sourceview-on #toggle-sourceview-btn,.ty-show-word-count #footer-word-count { background: rgb(199, 197, 197) }
#typora-quick-open { background-color: inherit }
.md-diagram-panel { margin-top: 8px }
.file-list-item-file-name { font-weight: initial }
.file-list-item-summary { opacity: 1 }
.file-list-item { color: rgb(119, 119, 119) }
.file-list-item.active { background-color: inherit; color: black }
.ty-side-sort-btn.active { background-color: inherit }
.file-list-item.active .file-list-item-file-name { font-weight: bold }
.file-list-item { opacity: 1 !important }
.file-library-node.active>.file-node-background { background-color: var(--active-file-bg-color) }
.file-tree-node.active>.file-node-content { color: var(--active-file-text-color) }
.md-task-list-item>input { margin-left: -1.6em; margin-top: calc(1rem - 12px) }
input { border: 1px solid rgb(170, 170, 170) }
.megamenu-menu-header #megamenu-menu-header-title,.megamenu-menu-header:hover,.megamenu-menu-header:focus { color: inherit }
.dropdown-menu .divider { border-color: rgb(229, 229, 229) }
.os-windows-7 strong,.os-windows-7 strong { font-weight: 760 }
.typora-export li,.typora-export p,.typora-export,.footnote-line { white-space: normal }

窗口看门狗

STM32F1窗口看门狗简介

窗口关门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常运行而产生的软件故障。在递减计数器(WWDG->CR)的第六位变成零时会产生一个MCU复位。在递减计数器到达窗口配置寄存器(WWDG->CFR)数值之前,如果七位递减计数器的数值被刷新,那么也会产生一个MCU复位。这表明递减计数器需要在一个窗口中被刷新。

图例

寄存器介绍

  1. 控制寄存器(WWDG_CR)

    • 32位寄存器,低八位有效
    • 第七位(WDGA):看门狗激活位,软件置1有效,硬件清零
    • 低7位:存储看门狗计数器值,每个周期( 4096 ×2^ WDGTB)减一
    • 从0x40变到0x3f时,MCU复位
  2. 配置寄存器(WWDG_CFR)
    • 32位寄存器,低10位有效
    • 位9(EWI):提前唤醒中断,此位置一,计数器达0x40时产生中断,硬件复位消除
    • 位8:7:时基,用于修改预分频器数值
    • 6:0:下窗口值
  3. 状态寄存器(WWDG_SR)
    • 32位寄存器,位0有效
    • 计数器到达0x40时,此位由硬件置一,由软件清零

操作流程

  1. 使能WWDG时钟,32khz
  2. 设置WWDG_CFR和WWDG_CR
  3. 开中断
  4. 写中断服务函数,一定要在一个周期内完成喂狗

原文地址:https://www.cnblogs.com/Socthinking/p/10306759.html

时间: 2024-10-07 22:34:45

窗口看门狗的相关文章

独立看门狗和窗口看门狗

独立看门狗没几个寄存器. 1.IWDG_KR,写入0xcccc,启动看门狗.计数器开始从复位值 0xFFF 递减计数.当计数器计数到终值 (0x000) 时会产生一个复位信号( IWDG 复位)2.任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中, IWDG_RLR 的值就会被重载到计数器,从而避免产生看门狗复位.写入键值 5555h 可使能对 IWDG_PR 和 IWDG_RLR 寄存器的访问.3.这个看门狗的时钟源是LSI,IWDG_PR寄存器是这个看门狗时钟的分频设置. 没

STM8S103 独立看门狗和窗口看门狗

独立看门狗时钟来源为LSI:窗口看门狗时钟来源为CPU: 窗口看门狗窗口的含义是:喂狗必须在一定的窗口期内完成,不能过早也不能过晚. 总结:防止程序复位,用独立看门狗.

STM8s窗口看门狗

看看窗口看门狗的框图 从图里看出产生复位信号有2个方式: 1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号: 2 当寄存器WDGCR的值大于WDGWR的时候写WDGCR寄存器会产生复位信号: 解释: WDGCR的最高位WDGA是开启看门狗的(WDGA=1开启),当然如果开启了硬件看门狗这个位就没用了.硬件看门狗在OPTION BYTES里设置. WDGCR的低六位是计数用的从图里可以得出这个计数器的时钟是fCPU时钟分频得来的.这个分频值固定是122

cortex_m3_stm32嵌入式学习笔记(六):窗口看门狗实验(WWDG)

窗口看门狗( WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障. 简单来说,和IWDG的区别就是IWDG要靠手动去喂狗,而WWDG有内置中断,所以可以利用设置中断服务函数去喂狗 首先还是设置WWDG (记得往工程里面添加头文件)大致设置步骤如下: 1)使能 WWDG 时钟(系统内部时钟) 2)设置窗口值和分频数 3)开启 WWDG 中断并分组 4) 设置计数器初始值并使能看门狗 5) 编写中断服务函数 wwdg.c #include "led

cortex_m3_stm32嵌入式学习笔记(七):独立看门狗&amp;窗口看门狗

总结一下这两种狗吧... 1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的.窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器(不受系统时钟限制,即使系统时钟坏了也能工作),窗口看门狗是用的系统时钟APB1ENR(系统时钟要是挂了就完了) 独立看门狗Iwdg--独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器.主要用于监视硬件错误.

STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结

一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生.看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) . 在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗:此时计数器开始从其复位值 0xFFF 递减计数.当计数器计

嵌入式 02 STM32 09 独立/窗口看门狗实验

一.独立看门狗和窗口看门狗 看门狗:单片机系统在外界的干扰下会出现程序跑飞的现象导致死循环,或者崩溃,看门狗电路就是为了避免这种情况的发生,看门狗的作用就是在一定的事件内(通过计数器实现)若没有收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号) 独立看门狗IWDG:独立于系统之外,因为有独立时钟30-60KHz,所以是不受系统影响的系统故障检测器,主要用于监视硬件错误. 窗口看门狗WWDG:系统内部的故障探测器,时钟与系统相同.如果系统时钟不走了,这个狗也就失去了作用

STM32之窗口看门狗

1.有个7位递减计数器(WWDG->CR),就这个计数器和窗口计数器(WWDG->CFR)决定什么时候喂狗.狗喂早了,复位--"早"体现在 计数器值(tr)>窗口值(wr),也就是计数器值还没有减到窗口值以下: 2.当 0x40 < 计数器值(tr) < 窗口值(wr) 时,这时候最适合喂狗了,也只有在这时候喂狗才合适: 3.当 计数器的值 从0x40变到0x3F的时候,将产生看门狗复位:当然在要产生复位的前一段时间,如果开启了提前唤醒中断,那么就会进入中

STM32F0xx_看门狗(独立+窗口)配置详细过程

Ⅰ.概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗. 今天提供两种看门狗的软件工程实例,供大家下载. 两种看门狗各有各的特点,应用在不同的场合,下面将分别简单总结一下独立和窗口看门狗的功能. 本着免费分享的原则,方便大家手机学习知识,每天在微信分享技术知识.如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码.关注,将有更多精彩内容等着你