低门槛DIY示波器,CH32示波器,完全兼容STM32,ADC+DMA+TIM+USB,仅需一块最小系统板


前言

玩电子不能没有示波器,毕业后也无法再白嫖学校示波器。俗话说:没有条件创造条件。那没有示波器,就创造一个示波器。听起来高大上,其实并不难,网上也有许多开源示波器,最具代表性的是老刘示波器。虽然电路简单,功能强大,懒得动手党来说也有很大的门槛,不想焊接,不想画PCB,更不想挑各种元器件,就想要一个简单实用、成本低廉、快速实现、方便拓展的示波器,懒得找了,还是自己造轮子吧。


提示:本项目仅使用某宝成品CH32F103C8T6开发板,硬件简单,可自行根据需要自行添加软硬件功能。

一、先看成果

上位机软件截图
请添加图片描述
说明:A1管脚为信号输入管脚,A0输出1KHz方波信号进行校正,具有以下功能和特点:

  1. A0口有3.3V 1KHz基础方波输出,用于校准。
  2. A1信号输入口信号测量范围0~3.3V。
  3. 32单片机最高支持1M采样率,但系统时钟为72M时最高支持857.1k采样率(跟ADC时钟分频系数有关)。符合奈奎斯特采样定律,采样精度12位。
  4. 上位机采用Python开发,兼容Linux、Windows系统,通过32单片机的USB虚拟串口通信。
  5. USB虚拟串口通信数据包缓存最大1200字节,故程序中限制单次采样点数为512个(一个采样点占两个字节)。
  6. 具有基础测量功能:测量频率,脉宽,占空比(自己读数)。
  7. 仅有自动上升沿触发功能。
  8. 添加贝塞尔插值功能
  9. 项目开源https://github.com/ClassmateXie/32Oscilloscopes

二、使用步骤

1 运行软件

1.1 Windows用户直接运行打包好的软件

CH32示波器.exe

1.2 安装Python环境运行源代码(入坑)

进入CH32示波器.py文件所在目录,右键打开终端
在这里插入图片描述
输入命令行

python .CH32示波器.py

若报错需根据提示自行安装对应的python库,例如:

pip install pyqtgraph
pip install numpy
pip install pyserial
pip install PyQt5
pip install scipy

2 选择端口

初始界面如下:
请添加图片描述
修改虚拟串口为对应的端口(设备管理器中查看,默认COM7),通信波特率默认1000000
请添加图片描述

三、源码分析

项目开发过程的大部分时间都在巩固基础知识,虽然项目整体难度不大,但是在开发过程中对32单片机的ADC、DMA、TIM、NVIC以及USB等功能有了更加深刻的理解,特此记录开发过程。

1 程序总体流程图

1.1 USB串口中断服务函数

#mermaid-svg-4RpR9o36h0dflZwI .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-4RpR9o36h0dflZwI .label text{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .node rect,#mermaid-svg-4RpR9o36h0dflZwI .node circle,#mermaid-svg-4RpR9o36h0dflZwI .node ellipse,#mermaid-svg-4RpR9o36h0dflZwI .node polygon,#mermaid-svg-4RpR9o36h0dflZwI .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-4RpR9o36h0dflZwI .node .label{text-align:center;fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .node.clickable{cursor:pointer}#mermaid-svg-4RpR9o36h0dflZwI .arrowheadPath{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-4RpR9o36h0dflZwI .flowchart-link{stroke:#333;fill:none}#mermaid-svg-4RpR9o36h0dflZwI .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-4RpR9o36h0dflZwI .edgeLabel rect{opacity:0.9}#mermaid-svg-4RpR9o36h0dflZwI .edgeLabel span{color:#333}#mermaid-svg-4RpR9o36h0dflZwI .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-4RpR9o36h0dflZwI .cluster text{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-4RpR9o36h0dflZwI .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-4RpR9o36h0dflZwI text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-4RpR9o36h0dflZwI .actor-line{stroke:grey}#mermaid-svg-4RpR9o36h0dflZwI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-4RpR9o36h0dflZwI .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-4RpR9o36h0dflZwI #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-4RpR9o36h0dflZwI .sequenceNumber{fill:#fff}#mermaid-svg-4RpR9o36h0dflZwI #sequencenumber{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI #crosshead path{fill:#333;stroke:#333}#mermaid-svg-4RpR9o36h0dflZwI .messageText{fill:#333;stroke:#333}#mermaid-svg-4RpR9o36h0dflZwI .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-4RpR9o36h0dflZwI .labelText,#mermaid-svg-4RpR9o36h0dflZwI .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-4RpR9o36h0dflZwI .loopText,#mermaid-svg-4RpR9o36h0dflZwI .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-4RpR9o36h0dflZwI .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-4RpR9o36h0dflZwI .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-4RpR9o36h0dflZwI .noteText,#mermaid-svg-4RpR9o36h0dflZwI .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-4RpR9o36h0dflZwI .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-4RpR9o36h0dflZwI .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-4RpR9o36h0dflZwI .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-4RpR9o36h0dflZwI .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .section{stroke:none;opacity:0.2}#mermaid-svg-4RpR9o36h0dflZwI .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-4RpR9o36h0dflZwI .section2{fill:#fff400}#mermaid-svg-4RpR9o36h0dflZwI .section1,#mermaid-svg-4RpR9o36h0dflZwI .section3{fill:#fff;opacity:0.2}#mermaid-svg-4RpR9o36h0dflZwI .sectionTitle0{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .sectionTitle1{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .sectionTitle2{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .sectionTitle3{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-4RpR9o36h0dflZwI .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .grid path{stroke-width:0}#mermaid-svg-4RpR9o36h0dflZwI .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-4RpR9o36h0dflZwI .task{stroke-width:2}#mermaid-svg-4RpR9o36h0dflZwI .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .taskText:not([font-size]){font-size:11px}#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-4RpR9o36h0dflZwI .task.clickable{cursor:pointer}#mermaid-svg-4RpR9o36h0dflZwI .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-4RpR9o36h0dflZwI .taskText0,#mermaid-svg-4RpR9o36h0dflZwI .taskText1,#mermaid-svg-4RpR9o36h0dflZwI .taskText2,#mermaid-svg-4RpR9o36h0dflZwI .taskText3{fill:#fff}#mermaid-svg-4RpR9o36h0dflZwI .task0,#mermaid-svg-4RpR9o36h0dflZwI .task1,#mermaid-svg-4RpR9o36h0dflZwI .task2,#mermaid-svg-4RpR9o36h0dflZwI .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutside0,#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutside2{fill:#000}#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutside1,#mermaid-svg-4RpR9o36h0dflZwI .taskTextOutside3{fill:#000}#mermaid-svg-4RpR9o36h0dflZwI .active0,#mermaid-svg-4RpR9o36h0dflZwI .active1,#mermaid-svg-4RpR9o36h0dflZwI .active2,#mermaid-svg-4RpR9o36h0dflZwI .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-4RpR9o36h0dflZwI .activeText0,#mermaid-svg-4RpR9o36h0dflZwI .activeText1,#mermaid-svg-4RpR9o36h0dflZwI .activeText2,#mermaid-svg-4RpR9o36h0dflZwI .activeText3{fill:#000 !important}#mermaid-svg-4RpR9o36h0dflZwI .done0,#mermaid-svg-4RpR9o36h0dflZwI .done1,#mermaid-svg-4RpR9o36h0dflZwI .done2,#mermaid-svg-4RpR9o36h0dflZwI .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-4RpR9o36h0dflZwI .doneText0,#mermaid-svg-4RpR9o36h0dflZwI .doneText1,#mermaid-svg-4RpR9o36h0dflZwI .doneText2,#mermaid-svg-4RpR9o36h0dflZwI .doneText3{fill:#000 !important}#mermaid-svg-4RpR9o36h0dflZwI .crit0,#mermaid-svg-4RpR9o36h0dflZwI .crit1,#mermaid-svg-4RpR9o36h0dflZwI .crit2,#mermaid-svg-4RpR9o36h0dflZwI .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-4RpR9o36h0dflZwI .activeCrit0,#mermaid-svg-4RpR9o36h0dflZwI .activeCrit1,#mermaid-svg-4RpR9o36h0dflZwI .activeCrit2,#mermaid-svg-4RpR9o36h0dflZwI .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-4RpR9o36h0dflZwI .doneCrit0,#mermaid-svg-4RpR9o36h0dflZwI .doneCrit1,#mermaid-svg-4RpR9o36h0dflZwI .doneCrit2,#mermaid-svg-4RpR9o36h0dflZwI .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-4RpR9o36h0dflZwI .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-4RpR9o36h0dflZwI .milestoneText{font-style:italic}#mermaid-svg-4RpR9o36h0dflZwI .doneCritText0,#mermaid-svg-4RpR9o36h0dflZwI .doneCritText1,#mermaid-svg-4RpR9o36h0dflZwI .doneCritText2,#mermaid-svg-4RpR9o36h0dflZwI .doneCritText3{fill:#000 !important}#mermaid-svg-4RpR9o36h0dflZwI .activeCritText0,#mermaid-svg-4RpR9o36h0dflZwI .activeCritText1,#mermaid-svg-4RpR9o36h0dflZwI .activeCritText2,#mermaid-svg-4RpR9o36h0dflZwI .activeCritText3{fill:#000 !important}#mermaid-svg-4RpR9o36h0dflZwI .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-4RpR9o36h0dflZwI g.classGroup text .title{font-weight:bolder}#mermaid-svg-4RpR9o36h0dflZwI g.clickable{cursor:pointer}#mermaid-svg-4RpR9o36h0dflZwI g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-4RpR9o36h0dflZwI g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-4RpR9o36h0dflZwI .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-4RpR9o36h0dflZwI .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-4RpR9o36h0dflZwI .dashed-line{stroke-dasharray:3}#mermaid-svg-4RpR9o36h0dflZwI #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI .commit-id,#mermaid-svg-4RpR9o36h0dflZwI .commit-msg,#mermaid-svg-4RpR9o36h0dflZwI .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-4RpR9o36h0dflZwI g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-4RpR9o36h0dflZwI g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-4RpR9o36h0dflZwI g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-4RpR9o36h0dflZwI .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-4RpR9o36h0dflZwI .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-4RpR9o36h0dflZwI .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-4RpR9o36h0dflZwI .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-4RpR9o36h0dflZwI .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-4RpR9o36h0dflZwI .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-4RpR9o36h0dflZwI .edgeLabel text{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4RpR9o36h0dflZwI .node circle.state-start{fill:black;stroke:black}#mermaid-svg-4RpR9o36h0dflZwI .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-4RpR9o36h0dflZwI #statediagram-barbEnd{fill:#9370db}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-state .divider{stroke:#9370db}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-4RpR9o36h0dflZwI .note-edge{stroke-dasharray:5}#mermaid-svg-4RpR9o36h0dflZwI .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-4RpR9o36h0dflZwI .error-icon{fill:#522}#mermaid-svg-4RpR9o36h0dflZwI .error-text{fill:#522;stroke:#522}#mermaid-svg-4RpR9o36h0dflZwI .edge-thickness-normal{stroke-width:2px}#mermaid-svg-4RpR9o36h0dflZwI .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-4RpR9o36h0dflZwI .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-4RpR9o36h0dflZwI .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-4RpR9o36h0dflZwI .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-4RpR9o36h0dflZwI .marker{fill:#333}#mermaid-svg-4RpR9o36h0dflZwI .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-4RpR9o36h0dflZwI {
color: rgba(0, 0, 0, 0.75);
font: ;
}

USB接收中断
状态机解析数据
重新配置TIM4和DMA
启动TIM4和DMA

1.2 ADC采样过程

#mermaid-svg-Nb54S4jWZ6ANye95 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .label text{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .node rect,#mermaid-svg-Nb54S4jWZ6ANye95 .node circle,#mermaid-svg-Nb54S4jWZ6ANye95 .node ellipse,#mermaid-svg-Nb54S4jWZ6ANye95 .node polygon,#mermaid-svg-Nb54S4jWZ6ANye95 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Nb54S4jWZ6ANye95 .node .label{text-align:center;fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .node.clickable{cursor:pointer}#mermaid-svg-Nb54S4jWZ6ANye95 .arrowheadPath{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Nb54S4jWZ6ANye95 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Nb54S4jWZ6ANye95 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Nb54S4jWZ6ANye95 .edgeLabel rect{opacity:0.9}#mermaid-svg-Nb54S4jWZ6ANye95 .edgeLabel span{color:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Nb54S4jWZ6ANye95 .cluster text{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Nb54S4jWZ6ANye95 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Nb54S4jWZ6ANye95 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Nb54S4jWZ6ANye95 .actor-line{stroke:grey}#mermaid-svg-Nb54S4jWZ6ANye95 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Nb54S4jWZ6ANye95 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .sequenceNumber{fill:#fff}#mermaid-svg-Nb54S4jWZ6ANye95 #sequencenumber{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .messageText{fill:#333;stroke:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Nb54S4jWZ6ANye95 .labelText,#mermaid-svg-Nb54S4jWZ6ANye95 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Nb54S4jWZ6ANye95 .loopText,#mermaid-svg-Nb54S4jWZ6ANye95 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Nb54S4jWZ6ANye95 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Nb54S4jWZ6ANye95 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Nb54S4jWZ6ANye95 .noteText,#mermaid-svg-Nb54S4jWZ6ANye95 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Nb54S4jWZ6ANye95 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Nb54S4jWZ6ANye95 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Nb54S4jWZ6ANye95 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Nb54S4jWZ6ANye95 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .section{stroke:none;opacity:0.2}#mermaid-svg-Nb54S4jWZ6ANye95 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Nb54S4jWZ6ANye95 .section2{fill:#fff400}#mermaid-svg-Nb54S4jWZ6ANye95 .section1,#mermaid-svg-Nb54S4jWZ6ANye95 .section3{fill:#fff;opacity:0.2}#mermaid-svg-Nb54S4jWZ6ANye95 .sectionTitle0{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .sectionTitle1{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .sectionTitle2{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .sectionTitle3{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Nb54S4jWZ6ANye95 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .grid path{stroke-width:0}#mermaid-svg-Nb54S4jWZ6ANye95 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Nb54S4jWZ6ANye95 .task{stroke-width:2}#mermaid-svg-Nb54S4jWZ6ANye95 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .taskText:not([font-size]){font-size:11px}#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Nb54S4jWZ6ANye95 .task.clickable{cursor:pointer}#mermaid-svg-Nb54S4jWZ6ANye95 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Nb54S4jWZ6ANye95 .taskText0,#mermaid-svg-Nb54S4jWZ6ANye95 .taskText1,#mermaid-svg-Nb54S4jWZ6ANye95 .taskText2,#mermaid-svg-Nb54S4jWZ6ANye95 .taskText3{fill:#fff}#mermaid-svg-Nb54S4jWZ6ANye95 .task0,#mermaid-svg-Nb54S4jWZ6ANye95 .task1,#mermaid-svg-Nb54S4jWZ6ANye95 .task2,#mermaid-svg-Nb54S4jWZ6ANye95 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutside0,#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutside2{fill:#000}#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutside1,#mermaid-svg-Nb54S4jWZ6ANye95 .taskTextOutside3{fill:#000}#mermaid-svg-Nb54S4jWZ6ANye95 .active0,#mermaid-svg-Nb54S4jWZ6ANye95 .active1,#mermaid-svg-Nb54S4jWZ6ANye95 .active2,#mermaid-svg-Nb54S4jWZ6ANye95 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Nb54S4jWZ6ANye95 .activeText0,#mermaid-svg-Nb54S4jWZ6ANye95 .activeText1,#mermaid-svg-Nb54S4jWZ6ANye95 .activeText2,#mermaid-svg-Nb54S4jWZ6ANye95 .activeText3{fill:#000 !important}#mermaid-svg-Nb54S4jWZ6ANye95 .done0,#mermaid-svg-Nb54S4jWZ6ANye95 .done1,#mermaid-svg-Nb54S4jWZ6ANye95 .done2,#mermaid-svg-Nb54S4jWZ6ANye95 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Nb54S4jWZ6ANye95 .doneText0,#mermaid-svg-Nb54S4jWZ6ANye95 .doneText1,#mermaid-svg-Nb54S4jWZ6ANye95 .doneText2,#mermaid-svg-Nb54S4jWZ6ANye95 .doneText3{fill:#000 !important}#mermaid-svg-Nb54S4jWZ6ANye95 .crit0,#mermaid-svg-Nb54S4jWZ6ANye95 .crit1,#mermaid-svg-Nb54S4jWZ6ANye95 .crit2,#mermaid-svg-Nb54S4jWZ6ANye95 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Nb54S4jWZ6ANye95 .activeCrit0,#mermaid-svg-Nb54S4jWZ6ANye95 .activeCrit1,#mermaid-svg-Nb54S4jWZ6ANye95 .activeCrit2,#mermaid-svg-Nb54S4jWZ6ANye95 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Nb54S4jWZ6ANye95 .doneCrit0,#mermaid-svg-Nb54S4jWZ6ANye95 .doneCrit1,#mermaid-svg-Nb54S4jWZ6ANye95 .doneCrit2,#mermaid-svg-Nb54S4jWZ6ANye95 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Nb54S4jWZ6ANye95 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Nb54S4jWZ6ANye95 .milestoneText{font-style:italic}#mermaid-svg-Nb54S4jWZ6ANye95 .doneCritText0,#mermaid-svg-Nb54S4jWZ6ANye95 .doneCritText1,#mermaid-svg-Nb54S4jWZ6ANye95 .doneCritText2,#mermaid-svg-Nb54S4jWZ6ANye95 .doneCritText3{fill:#000 !important}#mermaid-svg-Nb54S4jWZ6ANye95 .activeCritText0,#mermaid-svg-Nb54S4jWZ6ANye95 .activeCritText1,#mermaid-svg-Nb54S4jWZ6ANye95 .activeCritText2,#mermaid-svg-Nb54S4jWZ6ANye95 .activeCritText3{fill:#000 !important}#mermaid-svg-Nb54S4jWZ6ANye95 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Nb54S4jWZ6ANye95 g.classGroup text .title{font-weight:bolder}#mermaid-svg-Nb54S4jWZ6ANye95 g.clickable{cursor:pointer}#mermaid-svg-Nb54S4jWZ6ANye95 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Nb54S4jWZ6ANye95 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Nb54S4jWZ6ANye95 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Nb54S4jWZ6ANye95 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Nb54S4jWZ6ANye95 .dashed-line{stroke-dasharray:3}#mermaid-svg-Nb54S4jWZ6ANye95 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 .commit-id,#mermaid-svg-Nb54S4jWZ6ANye95 .commit-msg,#mermaid-svg-Nb54S4jWZ6ANye95 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Nb54S4jWZ6ANye95 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Nb54S4jWZ6ANye95 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Nb54S4jWZ6ANye95 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Nb54S4jWZ6ANye95 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Nb54S4jWZ6ANye95 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Nb54S4jWZ6ANye95 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Nb54S4jWZ6ANye95 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Nb54S4jWZ6ANye95 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Nb54S4jWZ6ANye95 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Nb54S4jWZ6ANye95 .edgeLabel text{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Nb54S4jWZ6ANye95 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Nb54S4jWZ6ANye95 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Nb54S4jWZ6ANye95 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Nb54S4jWZ6ANye95 .note-edge{stroke-dasharray:5}#mermaid-svg-Nb54S4jWZ6ANye95 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Nb54S4jWZ6ANye95 .error-icon{fill:#522}#mermaid-svg-Nb54S4jWZ6ANye95 .error-text{fill:#522;stroke:#522}#mermaid-svg-Nb54S4jWZ6ANye95 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Nb54S4jWZ6ANye95 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Nb54S4jWZ6ANye95 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Nb54S4jWZ6ANye95 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Nb54S4jWZ6ANye95 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Nb54S4jWZ6ANye95 .marker{fill:#333}#mermaid-svg-Nb54S4jWZ6ANye95 .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-Nb54S4jWZ6ANye95 {
color: rgba(0, 0, 0, 0.75);
font: ;
}

触发
请求
产生
TIM4_CH4
ADC采样
DMA搬运
DMA完成中断

1.3 DMA传输过程

#mermaid-svg-IAEaSlpF8T0VzMZq .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .label text{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .node rect,#mermaid-svg-IAEaSlpF8T0VzMZq .node circle,#mermaid-svg-IAEaSlpF8T0VzMZq .node ellipse,#mermaid-svg-IAEaSlpF8T0VzMZq .node polygon,#mermaid-svg-IAEaSlpF8T0VzMZq .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-IAEaSlpF8T0VzMZq .node .label{text-align:center;fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .node.clickable{cursor:pointer}#mermaid-svg-IAEaSlpF8T0VzMZq .arrowheadPath{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-IAEaSlpF8T0VzMZq .flowchart-link{stroke:#333;fill:none}#mermaid-svg-IAEaSlpF8T0VzMZq .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-IAEaSlpF8T0VzMZq .edgeLabel rect{opacity:0.9}#mermaid-svg-IAEaSlpF8T0VzMZq .edgeLabel span{color:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-IAEaSlpF8T0VzMZq .cluster text{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-IAEaSlpF8T0VzMZq .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-IAEaSlpF8T0VzMZq text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-IAEaSlpF8T0VzMZq .actor-line{stroke:grey}#mermaid-svg-IAEaSlpF8T0VzMZq .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-IAEaSlpF8T0VzMZq #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .sequenceNumber{fill:#fff}#mermaid-svg-IAEaSlpF8T0VzMZq #sequencenumber{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq #crosshead path{fill:#333;stroke:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .messageText{fill:#333;stroke:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-IAEaSlpF8T0VzMZq .labelText,#mermaid-svg-IAEaSlpF8T0VzMZq .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-IAEaSlpF8T0VzMZq .loopText,#mermaid-svg-IAEaSlpF8T0VzMZq .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-IAEaSlpF8T0VzMZq .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-IAEaSlpF8T0VzMZq .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-IAEaSlpF8T0VzMZq .noteText,#mermaid-svg-IAEaSlpF8T0VzMZq .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-IAEaSlpF8T0VzMZq .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-IAEaSlpF8T0VzMZq .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-IAEaSlpF8T0VzMZq .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-IAEaSlpF8T0VzMZq .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .section{stroke:none;opacity:0.2}#mermaid-svg-IAEaSlpF8T0VzMZq .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-IAEaSlpF8T0VzMZq .section2{fill:#fff400}#mermaid-svg-IAEaSlpF8T0VzMZq .section1,#mermaid-svg-IAEaSlpF8T0VzMZq .section3{fill:#fff;opacity:0.2}#mermaid-svg-IAEaSlpF8T0VzMZq .sectionTitle0{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .sectionTitle1{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .sectionTitle2{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .sectionTitle3{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-IAEaSlpF8T0VzMZq .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .grid path{stroke-width:0}#mermaid-svg-IAEaSlpF8T0VzMZq .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-IAEaSlpF8T0VzMZq .task{stroke-width:2}#mermaid-svg-IAEaSlpF8T0VzMZq .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .taskText:not([font-size]){font-size:11px}#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-IAEaSlpF8T0VzMZq .task.clickable{cursor:pointer}#mermaid-svg-IAEaSlpF8T0VzMZq .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-IAEaSlpF8T0VzMZq .taskText0,#mermaid-svg-IAEaSlpF8T0VzMZq .taskText1,#mermaid-svg-IAEaSlpF8T0VzMZq .taskText2,#mermaid-svg-IAEaSlpF8T0VzMZq .taskText3{fill:#fff}#mermaid-svg-IAEaSlpF8T0VzMZq .task0,#mermaid-svg-IAEaSlpF8T0VzMZq .task1,#mermaid-svg-IAEaSlpF8T0VzMZq .task2,#mermaid-svg-IAEaSlpF8T0VzMZq .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutside0,#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutside2{fill:#000}#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutside1,#mermaid-svg-IAEaSlpF8T0VzMZq .taskTextOutside3{fill:#000}#mermaid-svg-IAEaSlpF8T0VzMZq .active0,#mermaid-svg-IAEaSlpF8T0VzMZq .active1,#mermaid-svg-IAEaSlpF8T0VzMZq .active2,#mermaid-svg-IAEaSlpF8T0VzMZq .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-IAEaSlpF8T0VzMZq .activeText0,#mermaid-svg-IAEaSlpF8T0VzMZq .activeText1,#mermaid-svg-IAEaSlpF8T0VzMZq .activeText2,#mermaid-svg-IAEaSlpF8T0VzMZq .activeText3{fill:#000 !important}#mermaid-svg-IAEaSlpF8T0VzMZq .done0,#mermaid-svg-IAEaSlpF8T0VzMZq .done1,#mermaid-svg-IAEaSlpF8T0VzMZq .done2,#mermaid-svg-IAEaSlpF8T0VzMZq .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-IAEaSlpF8T0VzMZq .doneText0,#mermaid-svg-IAEaSlpF8T0VzMZq .doneText1,#mermaid-svg-IAEaSlpF8T0VzMZq .doneText2,#mermaid-svg-IAEaSlpF8T0VzMZq .doneText3{fill:#000 !important}#mermaid-svg-IAEaSlpF8T0VzMZq .crit0,#mermaid-svg-IAEaSlpF8T0VzMZq .crit1,#mermaid-svg-IAEaSlpF8T0VzMZq .crit2,#mermaid-svg-IAEaSlpF8T0VzMZq .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-IAEaSlpF8T0VzMZq .activeCrit0,#mermaid-svg-IAEaSlpF8T0VzMZq .activeCrit1,#mermaid-svg-IAEaSlpF8T0VzMZq .activeCrit2,#mermaid-svg-IAEaSlpF8T0VzMZq .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-IAEaSlpF8T0VzMZq .doneCrit0,#mermaid-svg-IAEaSlpF8T0VzMZq .doneCrit1,#mermaid-svg-IAEaSlpF8T0VzMZq .doneCrit2,#mermaid-svg-IAEaSlpF8T0VzMZq .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-IAEaSlpF8T0VzMZq .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-IAEaSlpF8T0VzMZq .milestoneText{font-style:italic}#mermaid-svg-IAEaSlpF8T0VzMZq .doneCritText0,#mermaid-svg-IAEaSlpF8T0VzMZq .doneCritText1,#mermaid-svg-IAEaSlpF8T0VzMZq .doneCritText2,#mermaid-svg-IAEaSlpF8T0VzMZq .doneCritText3{fill:#000 !important}#mermaid-svg-IAEaSlpF8T0VzMZq .activeCritText0,#mermaid-svg-IAEaSlpF8T0VzMZq .activeCritText1,#mermaid-svg-IAEaSlpF8T0VzMZq .activeCritText2,#mermaid-svg-IAEaSlpF8T0VzMZq .activeCritText3{fill:#000 !important}#mermaid-svg-IAEaSlpF8T0VzMZq .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-IAEaSlpF8T0VzMZq g.classGroup text .title{font-weight:bolder}#mermaid-svg-IAEaSlpF8T0VzMZq g.clickable{cursor:pointer}#mermaid-svg-IAEaSlpF8T0VzMZq g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-IAEaSlpF8T0VzMZq g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-IAEaSlpF8T0VzMZq .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-IAEaSlpF8T0VzMZq .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-IAEaSlpF8T0VzMZq .dashed-line{stroke-dasharray:3}#mermaid-svg-IAEaSlpF8T0VzMZq #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq .commit-id,#mermaid-svg-IAEaSlpF8T0VzMZq .commit-msg,#mermaid-svg-IAEaSlpF8T0VzMZq .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-IAEaSlpF8T0VzMZq g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-IAEaSlpF8T0VzMZq g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-IAEaSlpF8T0VzMZq g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-IAEaSlpF8T0VzMZq .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-IAEaSlpF8T0VzMZq .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-IAEaSlpF8T0VzMZq .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-IAEaSlpF8T0VzMZq .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-IAEaSlpF8T0VzMZq .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-IAEaSlpF8T0VzMZq .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-IAEaSlpF8T0VzMZq .edgeLabel text{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IAEaSlpF8T0VzMZq .node circle.state-start{fill:black;stroke:black}#mermaid-svg-IAEaSlpF8T0VzMZq .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-IAEaSlpF8T0VzMZq #statediagram-barbEnd{fill:#9370db}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-state .divider{stroke:#9370db}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-IAEaSlpF8T0VzMZq .note-edge{stroke-dasharray:5}#mermaid-svg-IAEaSlpF8T0VzMZq .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-IAEaSlpF8T0VzMZq .error-icon{fill:#522}#mermaid-svg-IAEaSlpF8T0VzMZq .error-text{fill:#522;stroke:#522}#mermaid-svg-IAEaSlpF8T0VzMZq .edge-thickness-normal{stroke-width:2px}#mermaid-svg-IAEaSlpF8T0VzMZq .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-IAEaSlpF8T0VzMZq .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-IAEaSlpF8T0VzMZq .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-IAEaSlpF8T0VzMZq .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-IAEaSlpF8T0VzMZq .marker{fill:#333}#mermaid-svg-IAEaSlpF8T0VzMZq .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-IAEaSlpF8T0VzMZq {
color: rgba(0, 0, 0, 0.75);
font: ;
}

搬运到
DMA传输完成中断
ADC->DR数据寄存器
ADC_Buf数组
USB发送所有缓存
清空缓存并关闭TIM4和DMA

2 下位机源代码

2.1 TIM配置函数

配置TIM4通道4产生PWM的频率,作为ADC规则组触发源

#mermaid-svg-ZSID3EYszUCqh2Dz .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .label text{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .node rect,#mermaid-svg-ZSID3EYszUCqh2Dz .node circle,#mermaid-svg-ZSID3EYszUCqh2Dz .node ellipse,#mermaid-svg-ZSID3EYszUCqh2Dz .node polygon,#mermaid-svg-ZSID3EYszUCqh2Dz .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-ZSID3EYszUCqh2Dz .node .label{text-align:center;fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .node.clickable{cursor:pointer}#mermaid-svg-ZSID3EYszUCqh2Dz .arrowheadPath{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-ZSID3EYszUCqh2Dz .flowchart-link{stroke:#333;fill:none}#mermaid-svg-ZSID3EYszUCqh2Dz .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-ZSID3EYszUCqh2Dz .edgeLabel rect{opacity:0.9}#mermaid-svg-ZSID3EYszUCqh2Dz .edgeLabel span{color:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-ZSID3EYszUCqh2Dz .cluster text{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-ZSID3EYszUCqh2Dz .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-ZSID3EYszUCqh2Dz text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-ZSID3EYszUCqh2Dz .actor-line{stroke:grey}#mermaid-svg-ZSID3EYszUCqh2Dz .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-ZSID3EYszUCqh2Dz #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .sequenceNumber{fill:#fff}#mermaid-svg-ZSID3EYszUCqh2Dz #sequencenumber{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz #crosshead path{fill:#333;stroke:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .messageText{fill:#333;stroke:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-ZSID3EYszUCqh2Dz .labelText,#mermaid-svg-ZSID3EYszUCqh2Dz .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-ZSID3EYszUCqh2Dz .loopText,#mermaid-svg-ZSID3EYszUCqh2Dz .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-ZSID3EYszUCqh2Dz .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-ZSID3EYszUCqh2Dz .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-ZSID3EYszUCqh2Dz .noteText,#mermaid-svg-ZSID3EYszUCqh2Dz .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-ZSID3EYszUCqh2Dz .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-ZSID3EYszUCqh2Dz .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-ZSID3EYszUCqh2Dz .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-ZSID3EYszUCqh2Dz .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .section{stroke:none;opacity:0.2}#mermaid-svg-ZSID3EYszUCqh2Dz .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-ZSID3EYszUCqh2Dz .section2{fill:#fff400}#mermaid-svg-ZSID3EYszUCqh2Dz .section1,#mermaid-svg-ZSID3EYszUCqh2Dz .section3{fill:#fff;opacity:0.2}#mermaid-svg-ZSID3EYszUCqh2Dz .sectionTitle0{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .sectionTitle1{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .sectionTitle2{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .sectionTitle3{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-ZSID3EYszUCqh2Dz .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .grid path{stroke-width:0}#mermaid-svg-ZSID3EYszUCqh2Dz .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-ZSID3EYszUCqh2Dz .task{stroke-width:2}#mermaid-svg-ZSID3EYszUCqh2Dz .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .taskText:not([font-size]){font-size:11px}#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-ZSID3EYszUCqh2Dz .task.clickable{cursor:pointer}#mermaid-svg-ZSID3EYszUCqh2Dz .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-ZSID3EYszUCqh2Dz .taskText0,#mermaid-svg-ZSID3EYszUCqh2Dz .taskText1,#mermaid-svg-ZSID3EYszUCqh2Dz .taskText2,#mermaid-svg-ZSID3EYszUCqh2Dz .taskText3{fill:#fff}#mermaid-svg-ZSID3EYszUCqh2Dz .task0,#mermaid-svg-ZSID3EYszUCqh2Dz .task1,#mermaid-svg-ZSID3EYszUCqh2Dz .task2,#mermaid-svg-ZSID3EYszUCqh2Dz .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutside0,#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutside2{fill:#000}#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutside1,#mermaid-svg-ZSID3EYszUCqh2Dz .taskTextOutside3{fill:#000}#mermaid-svg-ZSID3EYszUCqh2Dz .active0,#mermaid-svg-ZSID3EYszUCqh2Dz .active1,#mermaid-svg-ZSID3EYszUCqh2Dz .active2,#mermaid-svg-ZSID3EYszUCqh2Dz .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-ZSID3EYszUCqh2Dz .activeText0,#mermaid-svg-ZSID3EYszUCqh2Dz .activeText1,#mermaid-svg-ZSID3EYszUCqh2Dz .activeText2,#mermaid-svg-ZSID3EYszUCqh2Dz .activeText3{fill:#000 !important}#mermaid-svg-ZSID3EYszUCqh2Dz .done0,#mermaid-svg-ZSID3EYszUCqh2Dz .done1,#mermaid-svg-ZSID3EYszUCqh2Dz .done2,#mermaid-svg-ZSID3EYszUCqh2Dz .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-ZSID3EYszUCqh2Dz .doneText0,#mermaid-svg-ZSID3EYszUCqh2Dz .doneText1,#mermaid-svg-ZSID3EYszUCqh2Dz .doneText2,#mermaid-svg-ZSID3EYszUCqh2Dz .doneText3{fill:#000 !important}#mermaid-svg-ZSID3EYszUCqh2Dz .crit0,#mermaid-svg-ZSID3EYszUCqh2Dz .crit1,#mermaid-svg-ZSID3EYszUCqh2Dz .crit2,#mermaid-svg-ZSID3EYszUCqh2Dz .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-ZSID3EYszUCqh2Dz .activeCrit0,#mermaid-svg-ZSID3EYszUCqh2Dz .activeCrit1,#mermaid-svg-ZSID3EYszUCqh2Dz .activeCrit2,#mermaid-svg-ZSID3EYszUCqh2Dz .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-ZSID3EYszUCqh2Dz .doneCrit0,#mermaid-svg-ZSID3EYszUCqh2Dz .doneCrit1,#mermaid-svg-ZSID3EYszUCqh2Dz .doneCrit2,#mermaid-svg-ZSID3EYszUCqh2Dz .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-ZSID3EYszUCqh2Dz .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-ZSID3EYszUCqh2Dz .milestoneText{font-style:italic}#mermaid-svg-ZSID3EYszUCqh2Dz .doneCritText0,#mermaid-svg-ZSID3EYszUCqh2Dz .doneCritText1,#mermaid-svg-ZSID3EYszUCqh2Dz .doneCritText2,#mermaid-svg-ZSID3EYszUCqh2Dz .doneCritText3{fill:#000 !important}#mermaid-svg-ZSID3EYszUCqh2Dz .activeCritText0,#mermaid-svg-ZSID3EYszUCqh2Dz .activeCritText1,#mermaid-svg-ZSID3EYszUCqh2Dz .activeCritText2,#mermaid-svg-ZSID3EYszUCqh2Dz .activeCritText3{fill:#000 !important}#mermaid-svg-ZSID3EYszUCqh2Dz .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-ZSID3EYszUCqh2Dz g.classGroup text .title{font-weight:bolder}#mermaid-svg-ZSID3EYszUCqh2Dz g.clickable{cursor:pointer}#mermaid-svg-ZSID3EYszUCqh2Dz g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-ZSID3EYszUCqh2Dz g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-ZSID3EYszUCqh2Dz .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-ZSID3EYszUCqh2Dz .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-ZSID3EYszUCqh2Dz .dashed-line{stroke-dasharray:3}#mermaid-svg-ZSID3EYszUCqh2Dz #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz .commit-id,#mermaid-svg-ZSID3EYszUCqh2Dz .commit-msg,#mermaid-svg-ZSID3EYszUCqh2Dz .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-ZSID3EYszUCqh2Dz g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-ZSID3EYszUCqh2Dz g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-ZSID3EYszUCqh2Dz g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-ZSID3EYszUCqh2Dz .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-ZSID3EYszUCqh2Dz .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-ZSID3EYszUCqh2Dz .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-ZSID3EYszUCqh2Dz .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-ZSID3EYszUCqh2Dz .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-ZSID3EYszUCqh2Dz .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-ZSID3EYszUCqh2Dz .edgeLabel text{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ZSID3EYszUCqh2Dz .node circle.state-start{fill:black;stroke:black}#mermaid-svg-ZSID3EYszUCqh2Dz .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-ZSID3EYszUCqh2Dz #statediagram-barbEnd{fill:#9370db}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-state .divider{stroke:#9370db}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-ZSID3EYszUCqh2Dz .note-edge{stroke-dasharray:5}#mermaid-svg-ZSID3EYszUCqh2Dz .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-ZSID3EYszUCqh2Dz .error-icon{fill:#522}#mermaid-svg-ZSID3EYszUCqh2Dz .error-text{fill:#522;stroke:#522}#mermaid-svg-ZSID3EYszUCqh2Dz .edge-thickness-normal{stroke-width:2px}#mermaid-svg-ZSID3EYszUCqh2Dz .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-ZSID3EYszUCqh2Dz .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-ZSID3EYszUCqh2Dz .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-ZSID3EYszUCqh2Dz .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-ZSID3EYszUCqh2Dz .marker{fill:#333}#mermaid-svg-ZSID3EYszUCqh2Dz .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-ZSID3EYszUCqh2Dz {
color: rgba(0, 0, 0, 0.75);
font: ;
}

触发
TIM4_CH4
ADC采样

请添加图片描述

/*******************************************************************************
* 函 数 名         : TIM_ReSet
* 函数功能		   : TIM重启	
* 输    入         : Period重装载值,Prescaler分频因子
* 输    出         : 无
*******************************************************************************/
void TIM_ReSet(u16 Period,u16 Prescaler)
{
	static TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	static TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_TimeBaseStructure.TIM_Period = Period-1; //设置TIM2比较的周期
	TIM_TimeBaseStructure.TIM_Prescaler = Prescaler-1;//系统主频72M,这里分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//下面详细说明
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM_OutputState_Disable;
	TIM_OCInitStructure.TIM_Pulse = Period>>1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//如果是PWM1要为Low,PWM2则为High
	TIM_OC4Init(TIM4, &TIM_OCInitStructure);
	TIM_Cmd(TIM4, ENABLE);
}

2.2 DMA配置函数

#mermaid-svg-q6JhmECiVzNapTQ9 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .label text{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .node rect,#mermaid-svg-q6JhmECiVzNapTQ9 .node circle,#mermaid-svg-q6JhmECiVzNapTQ9 .node ellipse,#mermaid-svg-q6JhmECiVzNapTQ9 .node polygon,#mermaid-svg-q6JhmECiVzNapTQ9 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-q6JhmECiVzNapTQ9 .node .label{text-align:center;fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .node.clickable{cursor:pointer}#mermaid-svg-q6JhmECiVzNapTQ9 .arrowheadPath{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-q6JhmECiVzNapTQ9 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-q6JhmECiVzNapTQ9 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-q6JhmECiVzNapTQ9 .edgeLabel rect{opacity:0.9}#mermaid-svg-q6JhmECiVzNapTQ9 .edgeLabel span{color:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-q6JhmECiVzNapTQ9 .cluster text{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-q6JhmECiVzNapTQ9 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-q6JhmECiVzNapTQ9 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-q6JhmECiVzNapTQ9 .actor-line{stroke:grey}#mermaid-svg-q6JhmECiVzNapTQ9 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-q6JhmECiVzNapTQ9 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .sequenceNumber{fill:#fff}#mermaid-svg-q6JhmECiVzNapTQ9 #sequencenumber{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .messageText{fill:#333;stroke:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-q6JhmECiVzNapTQ9 .labelText,#mermaid-svg-q6JhmECiVzNapTQ9 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-q6JhmECiVzNapTQ9 .loopText,#mermaid-svg-q6JhmECiVzNapTQ9 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-q6JhmECiVzNapTQ9 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-q6JhmECiVzNapTQ9 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-q6JhmECiVzNapTQ9 .noteText,#mermaid-svg-q6JhmECiVzNapTQ9 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-q6JhmECiVzNapTQ9 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-q6JhmECiVzNapTQ9 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-q6JhmECiVzNapTQ9 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-q6JhmECiVzNapTQ9 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .section{stroke:none;opacity:0.2}#mermaid-svg-q6JhmECiVzNapTQ9 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-q6JhmECiVzNapTQ9 .section2{fill:#fff400}#mermaid-svg-q6JhmECiVzNapTQ9 .section1,#mermaid-svg-q6JhmECiVzNapTQ9 .section3{fill:#fff;opacity:0.2}#mermaid-svg-q6JhmECiVzNapTQ9 .sectionTitle0{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .sectionTitle1{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .sectionTitle2{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .sectionTitle3{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-q6JhmECiVzNapTQ9 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .grid path{stroke-width:0}#mermaid-svg-q6JhmECiVzNapTQ9 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-q6JhmECiVzNapTQ9 .task{stroke-width:2}#mermaid-svg-q6JhmECiVzNapTQ9 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .taskText:not([font-size]){font-size:11px}#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-q6JhmECiVzNapTQ9 .task.clickable{cursor:pointer}#mermaid-svg-q6JhmECiVzNapTQ9 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-q6JhmECiVzNapTQ9 .taskText0,#mermaid-svg-q6JhmECiVzNapTQ9 .taskText1,#mermaid-svg-q6JhmECiVzNapTQ9 .taskText2,#mermaid-svg-q6JhmECiVzNapTQ9 .taskText3{fill:#fff}#mermaid-svg-q6JhmECiVzNapTQ9 .task0,#mermaid-svg-q6JhmECiVzNapTQ9 .task1,#mermaid-svg-q6JhmECiVzNapTQ9 .task2,#mermaid-svg-q6JhmECiVzNapTQ9 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutside0,#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutside2{fill:#000}#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutside1,#mermaid-svg-q6JhmECiVzNapTQ9 .taskTextOutside3{fill:#000}#mermaid-svg-q6JhmECiVzNapTQ9 .active0,#mermaid-svg-q6JhmECiVzNapTQ9 .active1,#mermaid-svg-q6JhmECiVzNapTQ9 .active2,#mermaid-svg-q6JhmECiVzNapTQ9 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-q6JhmECiVzNapTQ9 .activeText0,#mermaid-svg-q6JhmECiVzNapTQ9 .activeText1,#mermaid-svg-q6JhmECiVzNapTQ9 .activeText2,#mermaid-svg-q6JhmECiVzNapTQ9 .activeText3{fill:#000 !important}#mermaid-svg-q6JhmECiVzNapTQ9 .done0,#mermaid-svg-q6JhmECiVzNapTQ9 .done1,#mermaid-svg-q6JhmECiVzNapTQ9 .done2,#mermaid-svg-q6JhmECiVzNapTQ9 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-q6JhmECiVzNapTQ9 .doneText0,#mermaid-svg-q6JhmECiVzNapTQ9 .doneText1,#mermaid-svg-q6JhmECiVzNapTQ9 .doneText2,#mermaid-svg-q6JhmECiVzNapTQ9 .doneText3{fill:#000 !important}#mermaid-svg-q6JhmECiVzNapTQ9 .crit0,#mermaid-svg-q6JhmECiVzNapTQ9 .crit1,#mermaid-svg-q6JhmECiVzNapTQ9 .crit2,#mermaid-svg-q6JhmECiVzNapTQ9 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-q6JhmECiVzNapTQ9 .activeCrit0,#mermaid-svg-q6JhmECiVzNapTQ9 .activeCrit1,#mermaid-svg-q6JhmECiVzNapTQ9 .activeCrit2,#mermaid-svg-q6JhmECiVzNapTQ9 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-q6JhmECiVzNapTQ9 .doneCrit0,#mermaid-svg-q6JhmECiVzNapTQ9 .doneCrit1,#mermaid-svg-q6JhmECiVzNapTQ9 .doneCrit2,#mermaid-svg-q6JhmECiVzNapTQ9 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-q6JhmECiVzNapTQ9 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-q6JhmECiVzNapTQ9 .milestoneText{font-style:italic}#mermaid-svg-q6JhmECiVzNapTQ9 .doneCritText0,#mermaid-svg-q6JhmECiVzNapTQ9 .doneCritText1,#mermaid-svg-q6JhmECiVzNapTQ9 .doneCritText2,#mermaid-svg-q6JhmECiVzNapTQ9 .doneCritText3{fill:#000 !important}#mermaid-svg-q6JhmECiVzNapTQ9 .activeCritText0,#mermaid-svg-q6JhmECiVzNapTQ9 .activeCritText1,#mermaid-svg-q6JhmECiVzNapTQ9 .activeCritText2,#mermaid-svg-q6JhmECiVzNapTQ9 .activeCritText3{fill:#000 !important}#mermaid-svg-q6JhmECiVzNapTQ9 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-q6JhmECiVzNapTQ9 g.classGroup text .title{font-weight:bolder}#mermaid-svg-q6JhmECiVzNapTQ9 g.clickable{cursor:pointer}#mermaid-svg-q6JhmECiVzNapTQ9 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-q6JhmECiVzNapTQ9 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-q6JhmECiVzNapTQ9 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-q6JhmECiVzNapTQ9 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-q6JhmECiVzNapTQ9 .dashed-line{stroke-dasharray:3}#mermaid-svg-q6JhmECiVzNapTQ9 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 .commit-id,#mermaid-svg-q6JhmECiVzNapTQ9 .commit-msg,#mermaid-svg-q6JhmECiVzNapTQ9 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-q6JhmECiVzNapTQ9 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-q6JhmECiVzNapTQ9 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-q6JhmECiVzNapTQ9 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-q6JhmECiVzNapTQ9 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-q6JhmECiVzNapTQ9 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-q6JhmECiVzNapTQ9 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-q6JhmECiVzNapTQ9 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-q6JhmECiVzNapTQ9 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-q6JhmECiVzNapTQ9 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-q6JhmECiVzNapTQ9 .edgeLabel text{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-q6JhmECiVzNapTQ9 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-q6JhmECiVzNapTQ9 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-q6JhmECiVzNapTQ9 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-q6JhmECiVzNapTQ9 .note-edge{stroke-dasharray:5}#mermaid-svg-q6JhmECiVzNapTQ9 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-q6JhmECiVzNapTQ9 .error-icon{fill:#522}#mermaid-svg-q6JhmECiVzNapTQ9 .error-text{fill:#522;stroke:#522}#mermaid-svg-q6JhmECiVzNapTQ9 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-q6JhmECiVzNapTQ9 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-q6JhmECiVzNapTQ9 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-q6JhmECiVzNapTQ9 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-q6JhmECiVzNapTQ9 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-q6JhmECiVzNapTQ9 .marker{fill:#333}#mermaid-svg-q6JhmECiVzNapTQ9 .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-q6JhmECiVzNapTQ9 {
color: rgba(0, 0, 0, 0.75);
font: ;
}

搬运到
ADC->DR数据寄存器
ADC_Buf数组
u16 buf_len = 512; //USB发送缓存最大1200字节,buf_len必须小于600
u16 ADC_Buf[512]={0};
/*******************************************************************************
* 函 数 名         : DMA_ReSet
* 函数功能		   : DMA重启	
* 输    入         : len传输数据量
* 输    出         : 无
*******************************************************************************/
void DMA_ReSet(u16 len)
{
	static DMA_InitTypeDef DMA_InitStructure;
	buf_len = len;
	//========DMA配置=============/
	DMA_ClearFlag(DMA1_FLAG_TC1);
	DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;//ADC地址
	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_Buf; //内存地址
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //方向(从外设到内存)
	DMA_InitStructure.DMA_BufferSize = len; //传输内容的大小
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址固定
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址递增
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord ; //外设数据单位
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord ;    //内存数据单位
	DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //DMA模式:单次传输
	DMA_InitStructure.DMA_Priority = DMA_Priority_High ; //优先级:高
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;   //禁止内存到内存的传输
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);  //配置DMA1的1通道
	DMA_Cmd(DMA1_Channel1,ENABLE);
}

2.3 ADC配置函数

#mermaid-svg-Lz7Y6tpqZanGya1u .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .label text{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .node rect,#mermaid-svg-Lz7Y6tpqZanGya1u .node circle,#mermaid-svg-Lz7Y6tpqZanGya1u .node ellipse,#mermaid-svg-Lz7Y6tpqZanGya1u .node polygon,#mermaid-svg-Lz7Y6tpqZanGya1u .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Lz7Y6tpqZanGya1u .node .label{text-align:center;fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .node.clickable{cursor:pointer}#mermaid-svg-Lz7Y6tpqZanGya1u .arrowheadPath{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Lz7Y6tpqZanGya1u .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Lz7Y6tpqZanGya1u .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Lz7Y6tpqZanGya1u .edgeLabel rect{opacity:0.9}#mermaid-svg-Lz7Y6tpqZanGya1u .edgeLabel span{color:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Lz7Y6tpqZanGya1u .cluster text{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Lz7Y6tpqZanGya1u .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Lz7Y6tpqZanGya1u text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Lz7Y6tpqZanGya1u .actor-line{stroke:grey}#mermaid-svg-Lz7Y6tpqZanGya1u .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Lz7Y6tpqZanGya1u #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .sequenceNumber{fill:#fff}#mermaid-svg-Lz7Y6tpqZanGya1u #sequencenumber{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .messageText{fill:#333;stroke:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Lz7Y6tpqZanGya1u .labelText,#mermaid-svg-Lz7Y6tpqZanGya1u .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Lz7Y6tpqZanGya1u .loopText,#mermaid-svg-Lz7Y6tpqZanGya1u .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Lz7Y6tpqZanGya1u .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Lz7Y6tpqZanGya1u .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Lz7Y6tpqZanGya1u .noteText,#mermaid-svg-Lz7Y6tpqZanGya1u .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Lz7Y6tpqZanGya1u .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Lz7Y6tpqZanGya1u .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Lz7Y6tpqZanGya1u .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Lz7Y6tpqZanGya1u .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .section{stroke:none;opacity:0.2}#mermaid-svg-Lz7Y6tpqZanGya1u .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Lz7Y6tpqZanGya1u .section2{fill:#fff400}#mermaid-svg-Lz7Y6tpqZanGya1u .section1,#mermaid-svg-Lz7Y6tpqZanGya1u .section3{fill:#fff;opacity:0.2}#mermaid-svg-Lz7Y6tpqZanGya1u .sectionTitle0{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .sectionTitle1{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .sectionTitle2{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .sectionTitle3{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Lz7Y6tpqZanGya1u .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .grid path{stroke-width:0}#mermaid-svg-Lz7Y6tpqZanGya1u .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Lz7Y6tpqZanGya1u .task{stroke-width:2}#mermaid-svg-Lz7Y6tpqZanGya1u .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .taskText:not([font-size]){font-size:11px}#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Lz7Y6tpqZanGya1u .task.clickable{cursor:pointer}#mermaid-svg-Lz7Y6tpqZanGya1u .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Lz7Y6tpqZanGya1u .taskText0,#mermaid-svg-Lz7Y6tpqZanGya1u .taskText1,#mermaid-svg-Lz7Y6tpqZanGya1u .taskText2,#mermaid-svg-Lz7Y6tpqZanGya1u .taskText3{fill:#fff}#mermaid-svg-Lz7Y6tpqZanGya1u .task0,#mermaid-svg-Lz7Y6tpqZanGya1u .task1,#mermaid-svg-Lz7Y6tpqZanGya1u .task2,#mermaid-svg-Lz7Y6tpqZanGya1u .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutside0,#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutside2{fill:#000}#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutside1,#mermaid-svg-Lz7Y6tpqZanGya1u .taskTextOutside3{fill:#000}#mermaid-svg-Lz7Y6tpqZanGya1u .active0,#mermaid-svg-Lz7Y6tpqZanGya1u .active1,#mermaid-svg-Lz7Y6tpqZanGya1u .active2,#mermaid-svg-Lz7Y6tpqZanGya1u .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Lz7Y6tpqZanGya1u .activeText0,#mermaid-svg-Lz7Y6tpqZanGya1u .activeText1,#mermaid-svg-Lz7Y6tpqZanGya1u .activeText2,#mermaid-svg-Lz7Y6tpqZanGya1u .activeText3{fill:#000 !important}#mermaid-svg-Lz7Y6tpqZanGya1u .done0,#mermaid-svg-Lz7Y6tpqZanGya1u .done1,#mermaid-svg-Lz7Y6tpqZanGya1u .done2,#mermaid-svg-Lz7Y6tpqZanGya1u .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Lz7Y6tpqZanGya1u .doneText0,#mermaid-svg-Lz7Y6tpqZanGya1u .doneText1,#mermaid-svg-Lz7Y6tpqZanGya1u .doneText2,#mermaid-svg-Lz7Y6tpqZanGya1u .doneText3{fill:#000 !important}#mermaid-svg-Lz7Y6tpqZanGya1u .crit0,#mermaid-svg-Lz7Y6tpqZanGya1u .crit1,#mermaid-svg-Lz7Y6tpqZanGya1u .crit2,#mermaid-svg-Lz7Y6tpqZanGya1u .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Lz7Y6tpqZanGya1u .activeCrit0,#mermaid-svg-Lz7Y6tpqZanGya1u .activeCrit1,#mermaid-svg-Lz7Y6tpqZanGya1u .activeCrit2,#mermaid-svg-Lz7Y6tpqZanGya1u .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Lz7Y6tpqZanGya1u .doneCrit0,#mermaid-svg-Lz7Y6tpqZanGya1u .doneCrit1,#mermaid-svg-Lz7Y6tpqZanGya1u .doneCrit2,#mermaid-svg-Lz7Y6tpqZanGya1u .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Lz7Y6tpqZanGya1u .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Lz7Y6tpqZanGya1u .milestoneText{font-style:italic}#mermaid-svg-Lz7Y6tpqZanGya1u .doneCritText0,#mermaid-svg-Lz7Y6tpqZanGya1u .doneCritText1,#mermaid-svg-Lz7Y6tpqZanGya1u .doneCritText2,#mermaid-svg-Lz7Y6tpqZanGya1u .doneCritText3{fill:#000 !important}#mermaid-svg-Lz7Y6tpqZanGya1u .activeCritText0,#mermaid-svg-Lz7Y6tpqZanGya1u .activeCritText1,#mermaid-svg-Lz7Y6tpqZanGya1u .activeCritText2,#mermaid-svg-Lz7Y6tpqZanGya1u .activeCritText3{fill:#000 !important}#mermaid-svg-Lz7Y6tpqZanGya1u .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Lz7Y6tpqZanGya1u g.classGroup text .title{font-weight:bolder}#mermaid-svg-Lz7Y6tpqZanGya1u g.clickable{cursor:pointer}#mermaid-svg-Lz7Y6tpqZanGya1u g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Lz7Y6tpqZanGya1u g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Lz7Y6tpqZanGya1u .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Lz7Y6tpqZanGya1u .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Lz7Y6tpqZanGya1u .dashed-line{stroke-dasharray:3}#mermaid-svg-Lz7Y6tpqZanGya1u #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u .commit-id,#mermaid-svg-Lz7Y6tpqZanGya1u .commit-msg,#mermaid-svg-Lz7Y6tpqZanGya1u .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Lz7Y6tpqZanGya1u g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Lz7Y6tpqZanGya1u g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Lz7Y6tpqZanGya1u g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Lz7Y6tpqZanGya1u .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Lz7Y6tpqZanGya1u .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Lz7Y6tpqZanGya1u .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Lz7Y6tpqZanGya1u .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Lz7Y6tpqZanGya1u .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Lz7Y6tpqZanGya1u .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Lz7Y6tpqZanGya1u .edgeLabel text{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Lz7Y6tpqZanGya1u .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Lz7Y6tpqZanGya1u .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Lz7Y6tpqZanGya1u #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Lz7Y6tpqZanGya1u .note-edge{stroke-dasharray:5}#mermaid-svg-Lz7Y6tpqZanGya1u .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Lz7Y6tpqZanGya1u .error-icon{fill:#522}#mermaid-svg-Lz7Y6tpqZanGya1u .error-text{fill:#522;stroke:#522}#mermaid-svg-Lz7Y6tpqZanGya1u .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Lz7Y6tpqZanGya1u .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Lz7Y6tpqZanGya1u .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Lz7Y6tpqZanGya1u .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Lz7Y6tpqZanGya1u .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Lz7Y6tpqZanGya1u .marker{fill:#333}#mermaid-svg-Lz7Y6tpqZanGya1u .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-Lz7Y6tpqZanGya1u {
color: rgba(0, 0, 0, 0.75);
font: ;
}

触发
请求
产生
TIM4_CH4
ADC采样
DMA搬运
DMA完成中断
void ADC1_CH1_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量	
	ADC_InitTypeDef  ADC_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
  	/* Configure one bit for preemption priority */
  	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);//设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
	//==========端口设置====================//
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;	//模拟输入
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	//==========ADC配置====================//
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式	
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T4_CC4;//定时器4通道4触发检测
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐	
	ADC_InitStructure.ADC_NbrOfChannel = 1;//1个转换在规则序列中 也就是只转换规则序列1 
	ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
	
	ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
	
	//=========定时器配置==============//
//	TIM_ReSet(100,72);//10K采样率
	//========DMA配置=============/
	DMA_DeInit(DMA1_Channel1);
	DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE);//开启DMA传输完成中断
//	DMA_DeInit(DMA1_Channel1);
//	DMA_ReSet(buf_len);
//	DMA_ITConfig(DMA1_Channel1,DMA_IT_HT,ENABLE);
//	DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE);
//	DMA_ITConfig(DMA1_Channel1,DMA_IT_TE,ENABLE);
	//=======NVIC配置============//
	/* 配置DMA1_Channel1为中断源 */
	NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	ADC_Cmd(ADC1, ENABLE);//开启AD转换器
	ADC_ResetCalibration(ADC1);//重置指定的ADC的校准寄存器
	while(ADC_GetResetCalibrationStatus(ADC1)){};//获取ADC重置校准寄存器的状态
	ADC_StartCalibration(ADC1);//开始指定ADC的校准状态
	while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC的校准程序
	ADC_ExternalTrigConvCmd(ADC1, ENABLE);
	ADC_RegularChannelConfig(ADC1, 1, 1, ADC_SampleTime_1Cycles5);	//ADC1,ADC通道1,序号1,1.5个周期
	
	TIM_InternalClockConfig(TIM4);
	TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
	TIM_UpdateDisableConfig(TIM4, DISABLE);
}

2.4 USB串口中断服务函数

//处理从USB虚拟串口接收到的数据
//databuffer:数据缓存区
//Nb_bytes:接收到的字节数.
void USB_To_USART_Send_Data(u8* data_buffer, u16 Nb_bytes)
{
	u16 i,arr,div,num;
	static u8 temp,step,buf[6],cnt;
	for(i=0;i<Nb_bytes;i++)
	{
		temp = data_buffer[i];
		switch(step)
		{
			case 0:if(temp==0xa5)step=1;break;
			case 1:if(temp==0x5a)step=2;else if(temp==0xa5)step=1;else step=0;break;
			case 2:buf[cnt++]=temp;if(cnt>=6)step=3,cnt=0;break;
			case 3:if(temp==0xff)
						{
							arr=buf[0]*256+buf[1];
							div=buf[2]*256+buf[3];	
							num=buf[4]*256+buf[5];	
							DMA_ReSet(num);
							TIM_ReSet(arr,div);
							step=0;
						}
						else if(temp==0xa5)step=1;
						else step=0;
						break;
		}	
	}
} 

接收数据帧格式

帧头 重装载值 分频因子 采样点数 帧尾
A5 5A XX XX XX XX XX XX FF

2.5 DMA传输完成中断

#mermaid-svg-3PauPo4X1aWgJpW4 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .label text{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .node rect,#mermaid-svg-3PauPo4X1aWgJpW4 .node circle,#mermaid-svg-3PauPo4X1aWgJpW4 .node ellipse,#mermaid-svg-3PauPo4X1aWgJpW4 .node polygon,#mermaid-svg-3PauPo4X1aWgJpW4 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-3PauPo4X1aWgJpW4 .node .label{text-align:center;fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .node.clickable{cursor:pointer}#mermaid-svg-3PauPo4X1aWgJpW4 .arrowheadPath{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-3PauPo4X1aWgJpW4 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-3PauPo4X1aWgJpW4 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-3PauPo4X1aWgJpW4 .edgeLabel rect{opacity:0.9}#mermaid-svg-3PauPo4X1aWgJpW4 .edgeLabel span{color:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-3PauPo4X1aWgJpW4 .cluster text{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-3PauPo4X1aWgJpW4 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-3PauPo4X1aWgJpW4 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-3PauPo4X1aWgJpW4 .actor-line{stroke:grey}#mermaid-svg-3PauPo4X1aWgJpW4 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-3PauPo4X1aWgJpW4 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .sequenceNumber{fill:#fff}#mermaid-svg-3PauPo4X1aWgJpW4 #sequencenumber{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .messageText{fill:#333;stroke:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-3PauPo4X1aWgJpW4 .labelText,#mermaid-svg-3PauPo4X1aWgJpW4 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-3PauPo4X1aWgJpW4 .loopText,#mermaid-svg-3PauPo4X1aWgJpW4 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-3PauPo4X1aWgJpW4 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-3PauPo4X1aWgJpW4 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-3PauPo4X1aWgJpW4 .noteText,#mermaid-svg-3PauPo4X1aWgJpW4 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-3PauPo4X1aWgJpW4 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-3PauPo4X1aWgJpW4 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-3PauPo4X1aWgJpW4 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-3PauPo4X1aWgJpW4 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .section{stroke:none;opacity:0.2}#mermaid-svg-3PauPo4X1aWgJpW4 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-3PauPo4X1aWgJpW4 .section2{fill:#fff400}#mermaid-svg-3PauPo4X1aWgJpW4 .section1,#mermaid-svg-3PauPo4X1aWgJpW4 .section3{fill:#fff;opacity:0.2}#mermaid-svg-3PauPo4X1aWgJpW4 .sectionTitle0{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .sectionTitle1{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .sectionTitle2{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .sectionTitle3{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-3PauPo4X1aWgJpW4 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .grid path{stroke-width:0}#mermaid-svg-3PauPo4X1aWgJpW4 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-3PauPo4X1aWgJpW4 .task{stroke-width:2}#mermaid-svg-3PauPo4X1aWgJpW4 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .taskText:not([font-size]){font-size:11px}#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-3PauPo4X1aWgJpW4 .task.clickable{cursor:pointer}#mermaid-svg-3PauPo4X1aWgJpW4 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-3PauPo4X1aWgJpW4 .taskText0,#mermaid-svg-3PauPo4X1aWgJpW4 .taskText1,#mermaid-svg-3PauPo4X1aWgJpW4 .taskText2,#mermaid-svg-3PauPo4X1aWgJpW4 .taskText3{fill:#fff}#mermaid-svg-3PauPo4X1aWgJpW4 .task0,#mermaid-svg-3PauPo4X1aWgJpW4 .task1,#mermaid-svg-3PauPo4X1aWgJpW4 .task2,#mermaid-svg-3PauPo4X1aWgJpW4 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutside0,#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutside2{fill:#000}#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutside1,#mermaid-svg-3PauPo4X1aWgJpW4 .taskTextOutside3{fill:#000}#mermaid-svg-3PauPo4X1aWgJpW4 .active0,#mermaid-svg-3PauPo4X1aWgJpW4 .active1,#mermaid-svg-3PauPo4X1aWgJpW4 .active2,#mermaid-svg-3PauPo4X1aWgJpW4 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-3PauPo4X1aWgJpW4 .activeText0,#mermaid-svg-3PauPo4X1aWgJpW4 .activeText1,#mermaid-svg-3PauPo4X1aWgJpW4 .activeText2,#mermaid-svg-3PauPo4X1aWgJpW4 .activeText3{fill:#000 !important}#mermaid-svg-3PauPo4X1aWgJpW4 .done0,#mermaid-svg-3PauPo4X1aWgJpW4 .done1,#mermaid-svg-3PauPo4X1aWgJpW4 .done2,#mermaid-svg-3PauPo4X1aWgJpW4 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-3PauPo4X1aWgJpW4 .doneText0,#mermaid-svg-3PauPo4X1aWgJpW4 .doneText1,#mermaid-svg-3PauPo4X1aWgJpW4 .doneText2,#mermaid-svg-3PauPo4X1aWgJpW4 .doneText3{fill:#000 !important}#mermaid-svg-3PauPo4X1aWgJpW4 .crit0,#mermaid-svg-3PauPo4X1aWgJpW4 .crit1,#mermaid-svg-3PauPo4X1aWgJpW4 .crit2,#mermaid-svg-3PauPo4X1aWgJpW4 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-3PauPo4X1aWgJpW4 .activeCrit0,#mermaid-svg-3PauPo4X1aWgJpW4 .activeCrit1,#mermaid-svg-3PauPo4X1aWgJpW4 .activeCrit2,#mermaid-svg-3PauPo4X1aWgJpW4 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-3PauPo4X1aWgJpW4 .doneCrit0,#mermaid-svg-3PauPo4X1aWgJpW4 .doneCrit1,#mermaid-svg-3PauPo4X1aWgJpW4 .doneCrit2,#mermaid-svg-3PauPo4X1aWgJpW4 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-3PauPo4X1aWgJpW4 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-3PauPo4X1aWgJpW4 .milestoneText{font-style:italic}#mermaid-svg-3PauPo4X1aWgJpW4 .doneCritText0,#mermaid-svg-3PauPo4X1aWgJpW4 .doneCritText1,#mermaid-svg-3PauPo4X1aWgJpW4 .doneCritText2,#mermaid-svg-3PauPo4X1aWgJpW4 .doneCritText3{fill:#000 !important}#mermaid-svg-3PauPo4X1aWgJpW4 .activeCritText0,#mermaid-svg-3PauPo4X1aWgJpW4 .activeCritText1,#mermaid-svg-3PauPo4X1aWgJpW4 .activeCritText2,#mermaid-svg-3PauPo4X1aWgJpW4 .activeCritText3{fill:#000 !important}#mermaid-svg-3PauPo4X1aWgJpW4 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-3PauPo4X1aWgJpW4 g.classGroup text .title{font-weight:bolder}#mermaid-svg-3PauPo4X1aWgJpW4 g.clickable{cursor:pointer}#mermaid-svg-3PauPo4X1aWgJpW4 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-3PauPo4X1aWgJpW4 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-3PauPo4X1aWgJpW4 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-3PauPo4X1aWgJpW4 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-3PauPo4X1aWgJpW4 .dashed-line{stroke-dasharray:3}#mermaid-svg-3PauPo4X1aWgJpW4 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 .commit-id,#mermaid-svg-3PauPo4X1aWgJpW4 .commit-msg,#mermaid-svg-3PauPo4X1aWgJpW4 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-3PauPo4X1aWgJpW4 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-3PauPo4X1aWgJpW4 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-3PauPo4X1aWgJpW4 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-3PauPo4X1aWgJpW4 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-3PauPo4X1aWgJpW4 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-3PauPo4X1aWgJpW4 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-3PauPo4X1aWgJpW4 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-3PauPo4X1aWgJpW4 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-3PauPo4X1aWgJpW4 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-3PauPo4X1aWgJpW4 .edgeLabel text{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-3PauPo4X1aWgJpW4 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-3PauPo4X1aWgJpW4 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-3PauPo4X1aWgJpW4 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-3PauPo4X1aWgJpW4 .note-edge{stroke-dasharray:5}#mermaid-svg-3PauPo4X1aWgJpW4 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-3PauPo4X1aWgJpW4 .error-icon{fill:#522}#mermaid-svg-3PauPo4X1aWgJpW4 .error-text{fill:#522;stroke:#522}#mermaid-svg-3PauPo4X1aWgJpW4 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-3PauPo4X1aWgJpW4 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-3PauPo4X1aWgJpW4 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-3PauPo4X1aWgJpW4 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-3PauPo4X1aWgJpW4 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-3PauPo4X1aWgJpW4 .marker{fill:#333}#mermaid-svg-3PauPo4X1aWgJpW4 .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-3PauPo4X1aWgJpW4 {
color: rgba(0, 0, 0, 0.75);
font: ;
}

USB发送所有缓存
清空缓存并关闭TIM4和DMA
清楚中断标志位
/*******************************************************************************
* 函 数 名         : DMA1_Channel1_IRQHandler
* 函数功能		   	 : DMA通道1的中断
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void DMA1_Channel1_IRQHandler(void)
{
	u16 i;
	if(DMA_GetFlagStatus(DMA1_FLAG_TC1))
	{
		TIM_Cmd(TIM4, DISABLE);
		DMA_Cmd(DMA1_Channel1,DISABLE);
		for(i=0;i<buf_len;i++)USB_USART_SendData((ADC_Buf[i]>>8)),USB_USART_SendData(ADC_Buf[i]&0xff);
		DMA_ClearFlag(DMA1_FLAG_TC1); //清除全部中断标志
		LED=!LED;
	}
}

2.6 方波发生器及主函数

#mermaid-svg-5QJxGStczt7LGUJv .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-5QJxGStczt7LGUJv .label text{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .node rect,#mermaid-svg-5QJxGStczt7LGUJv .node circle,#mermaid-svg-5QJxGStczt7LGUJv .node ellipse,#mermaid-svg-5QJxGStczt7LGUJv .node polygon,#mermaid-svg-5QJxGStczt7LGUJv .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-5QJxGStczt7LGUJv .node .label{text-align:center;fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .node.clickable{cursor:pointer}#mermaid-svg-5QJxGStczt7LGUJv .arrowheadPath{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-5QJxGStczt7LGUJv .flowchart-link{stroke:#333;fill:none}#mermaid-svg-5QJxGStczt7LGUJv .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-5QJxGStczt7LGUJv .edgeLabel rect{opacity:0.9}#mermaid-svg-5QJxGStczt7LGUJv .edgeLabel span{color:#333}#mermaid-svg-5QJxGStczt7LGUJv .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-5QJxGStczt7LGUJv .cluster text{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-5QJxGStczt7LGUJv .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-5QJxGStczt7LGUJv text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-5QJxGStczt7LGUJv .actor-line{stroke:grey}#mermaid-svg-5QJxGStczt7LGUJv .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-5QJxGStczt7LGUJv .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-5QJxGStczt7LGUJv #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-5QJxGStczt7LGUJv .sequenceNumber{fill:#fff}#mermaid-svg-5QJxGStczt7LGUJv #sequencenumber{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv #crosshead path{fill:#333;stroke:#333}#mermaid-svg-5QJxGStczt7LGUJv .messageText{fill:#333;stroke:#333}#mermaid-svg-5QJxGStczt7LGUJv .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-5QJxGStczt7LGUJv .labelText,#mermaid-svg-5QJxGStczt7LGUJv .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-5QJxGStczt7LGUJv .loopText,#mermaid-svg-5QJxGStczt7LGUJv .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-5QJxGStczt7LGUJv .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-5QJxGStczt7LGUJv .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-5QJxGStczt7LGUJv .noteText,#mermaid-svg-5QJxGStczt7LGUJv .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-5QJxGStczt7LGUJv .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-5QJxGStczt7LGUJv .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-5QJxGStczt7LGUJv .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-5QJxGStczt7LGUJv .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .section{stroke:none;opacity:0.2}#mermaid-svg-5QJxGStczt7LGUJv .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-5QJxGStczt7LGUJv .section2{fill:#fff400}#mermaid-svg-5QJxGStczt7LGUJv .section1,#mermaid-svg-5QJxGStczt7LGUJv .section3{fill:#fff;opacity:0.2}#mermaid-svg-5QJxGStczt7LGUJv .sectionTitle0{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .sectionTitle1{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .sectionTitle2{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .sectionTitle3{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-5QJxGStczt7LGUJv .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .grid path{stroke-width:0}#mermaid-svg-5QJxGStczt7LGUJv .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-5QJxGStczt7LGUJv .task{stroke-width:2}#mermaid-svg-5QJxGStczt7LGUJv .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .taskText:not([font-size]){font-size:11px}#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-5QJxGStczt7LGUJv .task.clickable{cursor:pointer}#mermaid-svg-5QJxGStczt7LGUJv .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-5QJxGStczt7LGUJv .taskText0,#mermaid-svg-5QJxGStczt7LGUJv .taskText1,#mermaid-svg-5QJxGStczt7LGUJv .taskText2,#mermaid-svg-5QJxGStczt7LGUJv .taskText3{fill:#fff}#mermaid-svg-5QJxGStczt7LGUJv .task0,#mermaid-svg-5QJxGStczt7LGUJv .task1,#mermaid-svg-5QJxGStczt7LGUJv .task2,#mermaid-svg-5QJxGStczt7LGUJv .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutside0,#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutside2{fill:#000}#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutside1,#mermaid-svg-5QJxGStczt7LGUJv .taskTextOutside3{fill:#000}#mermaid-svg-5QJxGStczt7LGUJv .active0,#mermaid-svg-5QJxGStczt7LGUJv .active1,#mermaid-svg-5QJxGStczt7LGUJv .active2,#mermaid-svg-5QJxGStczt7LGUJv .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-5QJxGStczt7LGUJv .activeText0,#mermaid-svg-5QJxGStczt7LGUJv .activeText1,#mermaid-svg-5QJxGStczt7LGUJv .activeText2,#mermaid-svg-5QJxGStczt7LGUJv .activeText3{fill:#000 !important}#mermaid-svg-5QJxGStczt7LGUJv .done0,#mermaid-svg-5QJxGStczt7LGUJv .done1,#mermaid-svg-5QJxGStczt7LGUJv .done2,#mermaid-svg-5QJxGStczt7LGUJv .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-5QJxGStczt7LGUJv .doneText0,#mermaid-svg-5QJxGStczt7LGUJv .doneText1,#mermaid-svg-5QJxGStczt7LGUJv .doneText2,#mermaid-svg-5QJxGStczt7LGUJv .doneText3{fill:#000 !important}#mermaid-svg-5QJxGStczt7LGUJv .crit0,#mermaid-svg-5QJxGStczt7LGUJv .crit1,#mermaid-svg-5QJxGStczt7LGUJv .crit2,#mermaid-svg-5QJxGStczt7LGUJv .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-5QJxGStczt7LGUJv .activeCrit0,#mermaid-svg-5QJxGStczt7LGUJv .activeCrit1,#mermaid-svg-5QJxGStczt7LGUJv .activeCrit2,#mermaid-svg-5QJxGStczt7LGUJv .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-5QJxGStczt7LGUJv .doneCrit0,#mermaid-svg-5QJxGStczt7LGUJv .doneCrit1,#mermaid-svg-5QJxGStczt7LGUJv .doneCrit2,#mermaid-svg-5QJxGStczt7LGUJv .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-5QJxGStczt7LGUJv .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-5QJxGStczt7LGUJv .milestoneText{font-style:italic}#mermaid-svg-5QJxGStczt7LGUJv .doneCritText0,#mermaid-svg-5QJxGStczt7LGUJv .doneCritText1,#mermaid-svg-5QJxGStczt7LGUJv .doneCritText2,#mermaid-svg-5QJxGStczt7LGUJv .doneCritText3{fill:#000 !important}#mermaid-svg-5QJxGStczt7LGUJv .activeCritText0,#mermaid-svg-5QJxGStczt7LGUJv .activeCritText1,#mermaid-svg-5QJxGStczt7LGUJv .activeCritText2,#mermaid-svg-5QJxGStczt7LGUJv .activeCritText3{fill:#000 !important}#mermaid-svg-5QJxGStczt7LGUJv .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-5QJxGStczt7LGUJv g.classGroup text .title{font-weight:bolder}#mermaid-svg-5QJxGStczt7LGUJv g.clickable{cursor:pointer}#mermaid-svg-5QJxGStczt7LGUJv g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-5QJxGStczt7LGUJv g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-5QJxGStczt7LGUJv .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-5QJxGStczt7LGUJv .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-5QJxGStczt7LGUJv .dashed-line{stroke-dasharray:3}#mermaid-svg-5QJxGStczt7LGUJv #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv .commit-id,#mermaid-svg-5QJxGStczt7LGUJv .commit-msg,#mermaid-svg-5QJxGStczt7LGUJv .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-5QJxGStczt7LGUJv g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-5QJxGStczt7LGUJv g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-5QJxGStczt7LGUJv g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-5QJxGStczt7LGUJv .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-5QJxGStczt7LGUJv .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-5QJxGStczt7LGUJv .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-5QJxGStczt7LGUJv .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-5QJxGStczt7LGUJv .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-5QJxGStczt7LGUJv .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-5QJxGStczt7LGUJv .edgeLabel text{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5QJxGStczt7LGUJv .node circle.state-start{fill:black;stroke:black}#mermaid-svg-5QJxGStczt7LGUJv .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-5QJxGStczt7LGUJv #statediagram-barbEnd{fill:#9370db}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-state .divider{stroke:#9370db}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-5QJxGStczt7LGUJv .note-edge{stroke-dasharray:5}#mermaid-svg-5QJxGStczt7LGUJv .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-5QJxGStczt7LGUJv .error-icon{fill:#522}#mermaid-svg-5QJxGStczt7LGUJv .error-text{fill:#522;stroke:#522}#mermaid-svg-5QJxGStczt7LGUJv .edge-thickness-normal{stroke-width:2px}#mermaid-svg-5QJxGStczt7LGUJv .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-5QJxGStczt7LGUJv .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-5QJxGStczt7LGUJv .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-5QJxGStczt7LGUJv .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-5QJxGStczt7LGUJv .marker{fill:#333}#mermaid-svg-5QJxGStczt7LGUJv .marker.cross{stroke:#333}

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-5QJxGStczt7LGUJv {
color: rgba(0, 0, 0, 0.75);
font: ;
}

产生
产生
产生
改变
赋值给
TIM2配置为1KHz
1通道PWM方波
A0口输出
3通道PWM方波
A2口输出
定时器更新中断
3通道占空比
LED端口PC13
呼吸灯效果
u16 LED_Breathe_Buf[1000];
void Buf_Dataset(u16* buf)
{
	u16 temp;
	for(temp=0;temp<500;temp++)buf[temp]=temp*2+100;
	for(temp=0;temp<500;temp++)buf[temp+500]=999-temp*2+100;
}

void TIM2_Init(u16 Period,u16 Prescaler)
{
	GPIO_InitTypeDef GPIO_InitStructure; 
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	TIM_TimeBaseStructure.TIM_Period = Period-1; //设置TIM2比较的周期
	TIM_TimeBaseStructure.TIM_Prescaler = Prescaler-1;//系统主频72M,这里分频
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//下面详细说明
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM_OutputState_Disable;
	TIM_OCInitStructure.TIM_Pulse = Period>>1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//如果是PWM1要为Low,PWM2则为High
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);
	TIM_OC3Init(TIM2, &TIM_OCInitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
	NVIC_Init(&NVIC_InitStructure);//初始化中断,设置中断的优先级
	
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启定时器中断
	
	TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);//定时器2 通道1
	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);//定时器2 通道2
	
	TIM_Cmd(TIM2, ENABLE);
}

int main(void)
{	
	Buf_Dataset(LED_Breathe_Buf);
	delay_init();	  	 	//延时函数初始化
 	LED_Init();			   	//LED端口初始化
	USB_Init();				 	//USB虚拟串口初始化
	ADC1_CH1_Init();		//ADC初始化
	TIM2_Init(1200,60); //72000000/1200/60=1000Hz
	while(1)
	{
		LED=PAin(2);
	}	 
}

void TIM2_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
	{
		static u16 cnt;
		TIM_SetCompare3(TIM2,LED_Breathe_Buf[cnt]);
		if(cnt++>=1000)cnt=0;
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位
	}
}

3 上位机源代码

  1. pyqtgraph库进行科学绘图,官方文档:https://www.pyqtgraph.org/
  2. pyserial库进行串口通信,官方文档:https://pyserial.readthedocs.io/
  3. PyQt5库设计GUI

完整代码:

import pyqtgraph as pg
import numpy as np
import serial
import time,struct
import pyqtgraph.parametertree as ptree
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets, QT_LIB
from scipy import interpolate 
from PyQt5.QtWidgets import *

N = 512 # 采样点数
k = 3.3/4096 # 比例因子
arr = 400 # 重装载值
div = 72 # 分频因子
Fs = 72000000/arr/div # 采样率
Ts = 1/Fs # 采样周期
COM = 'COM7'

# GUI设计
app = pg.mkQApp()

#============波形显示窗口=====================#
w = pg.GraphicsLayoutWidget()
w.setWindowTitle("CH32示波器-By纯粹")
# 坐标系控件
p = w.addPlot()
p.showGrid(x=True,y=True)
p.setRange(xRange=[-80,80],yRange=[-1,4],padding=0)
p.setLabels(left='电压 / V',bottom="t / ms",title='CH32示波器')
# 时基线和触发门限
inf1 = pg.InfiniteLine(movable=True, angle=90, label='时基={value:0.2f}ms', 
                       labelOpts={'position':0.1, 'color': (200,200,100), 'fill': (200,200,200,50), 'movable': True})
inf2 = pg.InfiniteLine(movable=True, angle=0, pen=(0, 0, 200), bounds = [-20, 20], hoverPen=(0,200,0), label='触发={value:0.2f}V', 
                       labelOpts={'color': (0,200,200), 'movable': True, 'fill': (0, 0, 200, 100)})
inf1.setPos([0,0])
inf2.setPos([0,1])

p.addItem(inf1)
p.addItem(inf2)

curve = p.plot(pen='y') # 曲线控件
#============参数调节窗口=====================#
children=[
	dict(name='采样配置', title='采样配置', type='group', children=[
		dict(name='采样率', type='float', limits=[0.0001, 857.143], value=Fs/1000, units='kHz'),
        dict(name='重装载值', type='int', limits=[2, 65535], value=arr),
        dict(name='分频因子', type='int', limits=[1, 65536], value=div),
		dict(name='采样点数', type='int', limits=[0, 512], value=N),
		dict(name='比例系数', type='float', value=1),
    ]),
	dict(name='虚拟串口', type='str', value=COM),
	dict(name='波特率', type='int', limits=[4800, 20000000], value=1000000),
	dict(name='触发', type='float', value=inf2.getYPos(), units='V'),
	dict(name='时基', type='float', value=inf1.getXPos(), units='ms'),
	dict(name='曲线样式', type='pen', value=pg.mkPen()),
	dict(name='贝塞尔插值', type='bool', value=True),
]
params = ptree.Parameter.create(name='调整参数', type='group', children=children)

def onChanged0(param, val):
	global arr,div,Fs,Ts
	temp = int(72000/val/arr)
	if 1 < temp < 65536:
		params.child('采样配置').child('分频因子').setValue(temp)
	else:
		params.child('采样配置').child('分频因子').setValue(1)
		temp = int(72000/val)
		if 2 < temp < 65536:
			params.child('采样配置').child('重装载值').setValue(temp)	


def onChanged1(param, val):
	global arr,div,Fs,Ts
	if 72000000/val/div > 857143:
		params.child('采样配置').child('重装载值').setValue(arr)
		return
	arr = val
	Fs = 72000000/arr/div
	Ts = 1/Fs
	params.child('采样配置').child('采样率').setValue(Fs/1000)

def onChanged2(param, val):
	global arr,div,Fs,Ts
	if 72000000/val/arr > 857143:
		params.child('采样配置').child('分频因子').setValue(div)
		return
	div = val
	Fs = 72000000/arr/div
	Ts = 1/Fs
	params.child('采样配置').child('采样率').setValue(Fs/1000)

def onChanged3(param, val):
	global N
	N = val
def onChanged4(param, val):
	inf1.setPos([val,0])

def onChanged5(param, val):
	inf2.setPos([0,val])

def onPenChanged(param, pen):
    curve.setPen(pen)

params.child('采样配置').child('采样率').sigValueChanged.connect(onChanged0)
params.child('采样配置').child('重装载值').sigValueChanged.connect(onChanged1)
params.child('采样配置').child('分频因子').sigValueChanged.connect(onChanged2)
params.child('采样配置').child('采样点数').sigValueChanged.connect(onChanged3)

params.child('时基').sigValueChanged.connect(onChanged4)
params.child('触发').sigValueChanged.connect(onChanged5)
params.child('曲线样式').sigValueChanged.connect(onPenChanged)

def On_inf1Changed():
	params.child('时基').setValue(inf1.getXPos())
inf1.sigPositionChanged.connect(On_inf1Changed)

def On_inf2Changed():
	params.child('触发').setValue(inf2.getYPos())
inf2.sigPositionChanged.connect(On_inf2Changed)

pt = ptree.ParameterTree(showHeader=False)
pt.setParameters(params)
# 按钮
StartBtn = QtGui.QPushButton('开始')
StopBtn = QtGui.QPushButton('暂停')
ContinueBtn = QtGui.QPushButton('继续')
EndBtn = QtGui.QPushButton('停止')

run_flag = False
def On_Start():
	global run_flag,ser
	try:
		ser = serial.Serial(params.child('虚拟串口').value(),params.child('波特率').value())
		run_flag = True
		StartBtn.setEnabled(False)
		StopBtn.setEnabled(True)
		ContinueBtn.setEnabled(False)
		EndBtn.setEnabled(True)
	except:
		QtWidgets.QMessageBox(QMessageBox.Warning, '警告', '虚拟串口打开失败').exec_()
	

def On_Continue():
	global run_flag
	run_flag = True
	StartBtn.setEnabled(False)
	StopBtn.setEnabled(True)
	ContinueBtn.setEnabled(False)
	EndBtn.setEnabled(True)

def On_Stop():
	global run_flag
	run_flag = False
	StartBtn.setEnabled(False)
	StopBtn.setEnabled(False)
	ContinueBtn.setEnabled(True)
	EndBtn.setEnabled(False)

def On_End():
	global run_flag,ser
	ser.close()
	run_flag = False
	StartBtn.setEnabled(True)
	StopBtn.setEnabled(False)
	ContinueBtn.setEnabled(False)
	EndBtn.setEnabled(False)

StartBtn.clicked.connect(On_Start)
StopBtn.clicked.connect(On_Stop)
ContinueBtn.clicked.connect(On_Continue)
EndBtn.clicked.connect(On_End)

StartBtn.setEnabled(True)
StopBtn.setEnabled(False)
ContinueBtn.setEnabled(False)
EndBtn.setEnabled(False)

#================主窗口=====================#
win = QtGui.QMainWindow()
win.resize(1000,600)
win.setWindowTitle("CH32示波器-By纯粹")
#================主窗口内添加控件=====================#
cw = QtGui.QWidget()
win.setCentralWidget(cw)

layout = QtGui.QGridLayout()
layout.addWidget(w, 1, 1, 6, 1)
layout.addWidget(pt, 1, 2, 1, 2)
layout.addWidget(StartBtn, 2, 2, 1, 2)
layout.addWidget(StopBtn, 3, 2, 1, 2)
layout.addWidget(ContinueBtn, 4, 2, 1, 2)
layout.addWidget(EndBtn, 5, 2, 1, 2)
cw.setLayout(layout)
win.show()

#================打开虚拟串口=====================#
# ser = serial.Serial(params.child('虚拟串口').value(),params.child('波特率').value())

#=======滑动均值滤波器======#
fps_buf = np.linspace(0,0,100)
fps_buf_ptr = 0
def fps_mean(fps):
	global fps_buf,fps_buf_ptr
	fps_buf[fps_buf_ptr] = fps
	fps_buf_ptr += 1
	if fps_buf_ptr >= 100:
		fps_buf_ptr = 0
	return np.mean(fps_buf)
#==========================#
#=======滑动均值滤波器======#
fc_buf = np.linspace(0,0,20)
fc_buf_ptr = 0
def fc_mean(fc):
	global fc_buf,fc_buf_ptr
	fc_buf[fc_buf_ptr] = fc
	fc_buf_ptr += 1
	if fc_buf_ptr >= 20:
		fc_buf_ptr = 0
	return np.mean(fc_buf)
#==========================#

fps_t0 = cnt = data0 = data1 = 0
start_flag = False
data_buf = np.array([]) # 数据缓存

#更新数据并显示波形
def display_data():
	global cnt,start_flag,data0,data1,data_buf,t0,fps_t0,run_flag
	if run_flag == False:
		return
	if start_flag:
		buf_len = ser.in_waiting
		if buf_len == N*2:
			num = buf_len>>1
			temp = struct.unpack('>%dH'%(num),ser.read(num*2)) # 读取并解析数据

			if temp[0] > 4096: # 12位ADC数据小于4096
				ser.read() # 数据出错,清空接收缓存
				return

			if len(data_buf) < N:
				data_buf = np.append(data_buf,temp)
			else:
				data_buf = np.append(data_buf,temp)
				data_buf = data_buf[-N:]

			output = data_buf*k*params.child('采样配置').child('比例系数').value() # 单位转换 转化为电压
			output_len = len(output)
			t = np.linspace(-500*Ts*output_len,500*Ts*output_len,output_len) # 生成初始时间轴 单位ms
			if params.child('贝塞尔插值').value():
				t_new = np.linspace(-500*Ts*output_len,500*Ts*output_len,output_len*10)
				tck = interpolate.splrep(t, output)
				output_bspline = interpolate.splev(t_new, tck)
				output_bspline_len = len(output_bspline)

				comparator = np.array(output_bspline > inf2.getYPos(),dtype='int8')
				rising = np.where(np.diff(comparator) == 1)[0]
				if len(rising) > 1:
					dt = np.mean(np.diff(rising))*Ts/10
					fc = fc_mean(1/dt)
					start_point = int(output_bspline_len/2+inf1.getXPos()/Ts/100) # 开始触发点索引
					end_point_index = np.where( rising > start_point)[0]
					if len(end_point_index) > 0:
						# 触发成功生成新时间轴 单位ms
						t_new = np.linspace(-100*Ts*(rising[end_point_index[0]]+1)+inf1.getXPos(),
										 100*Ts*(output_bspline_len-rising[end_point_index[0]]-1)+inf1.getXPos(),output_bspline_len)
				else:
					fc = 0

				curve.setData(t_new,output_bspline) # 绘制曲线
			else:
				comparator = np.array(output > inf2.getYPos(),dtype='int8')
				rising = np.where(np.diff(comparator) == 1)[0]
				if len(rising) > 1:
					dt = np.mean(np.diff(rising))*Ts
					fc = fc_mean(1/dt)
					start_point = int(output_len/2+inf1.getXPos()/Ts/1000) # 开始触发点索引
					end_point_index = np.where( rising > start_point)[0]
					if len(end_point_index) > 0:
						# 触发成功生成新时间轴 单位ms
						t = np.linspace(-1000*Ts*(rising[end_point_index[0]]+1)+inf1.getXPos(),
										 1000*Ts*(output_len-rising[end_point_index[0]]-1)+inf1.getXPos(),output_len)
				else:
					fc = 0
				curve.setData(t,output) # 绘制曲线

			fps_t = fps_mean(time.time()-fps_t0) # 帧率均值滤波
			fps_t0 = time.time()

			p.setTitle('CH32示波器 %0.2f fps Fs = %0.3f kHz fc = %0.3f Hz' % (1/fps_t,Fs/1000,fc))
			cnt += num
		if cnt >= N or time.time() - t0 > N*Ts+0.01:# 接收数据满或接收超时
			cnt = 0
			start_flag = False

	else:
		ser.read(ser.in_waiting)
		data_buf = np.array([]) 
		result=ser.write(bytes([0xa5, 0x5a, arr>>8, arr&0xff, div>>8, div&0xff, N>>8, N&0xff, 0xff]))# 发送数据

		t0 = time.time()
		while time.time() - t0 < N*Ts+0.01:# 等待回应
			if ser.in_waiting:
				start_flag = True
				t0 = time.time()
				break


timer = pg.QtCore.QTimer()
timer.timeout.connect(display_data)
timer.start(0)
app.exec_()

四、性能测试

1 再造信号发送器

在这里插入图片描述
对比STM32和CH32惊奇的发现CH32还有DAC功能,正好根据官方库撸个信号发送器代码,如下:

/********************************** (C) COPYRIGHT *******************************
* File Name          : main.c
* Author             : WCH
* Version            : V1.0.0
* Date               : 2019/10/15
* Description        : Main program body.
*******************************************************************************/ 
#include "debug.h"
#include "math.h"
/* Global define */
#define LED PCout(13)
#define buf_len 50
/* Global Variable */ 
u32 DAC_Buf[buf_len];

/*******************************************************************************
* Function Name  : Gpio_Init
* Description    : Initializes GPIO collection.
* Input          : None
* Return         : None
*******************************************************************************/ 
void Gpio_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;				 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 
	GPIO_Init(GPIOC, &GPIO_InitStructure);					 
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
}

/*******************************************************************************
* Function Name  : Dac_Init
* Description    : Initializes DAC collection.
* Input          : None
* Return         : None
*******************************************************************************/ 
void Dac_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	DAC_InitTypeDef DAC_InitType;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE );
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				          
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 		     
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_4);

	DAC_InitType.DAC_Trigger=DAC_Trigger_T3_TRGO;	                         
	DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;             
	DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;	         
	DAC_Init(DAC_Channel_1,&DAC_InitType);

	DAC_Cmd(DAC_Channel_1, ENABLE); 
	DAC_DMACmd(DAC_Channel_1,ENABLE); 
}


/*******************************************************************************
* Function Name  : DAC1_DMA_INIT
* Description    : Initializes DMA of DAC1 collection.
* Input          : None
* Return         : None
*******************************************************************************/
void DAC1_DMA_Init(void)
{
	DMA_InitTypeDef DMA_InitStructure;
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        

	DMA_StructInit( &DMA_InitStructure);
	/* Note:DAC1--->DMA1.CH3   DAC2--->DMA1.CH4 */
	DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&(DAC->R12BDHR1);
	DMA_InitStructure.DMA_MemoryBaseAddr = (u32)DAC_Buf;   
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
	DMA_InitStructure.DMA_BufferSize = buf_len*4;    
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;   
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; 
	DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Word;
	DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                              
	DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  

	DMA_Init(DMA1_Channel3, &DMA_InitStructure);
	DMA_Cmd(DMA1_Channel3, ENABLE); 
}

/*******************************************************************************
* Function Name  : DAC_Data_Init
* Description    : Initializes Data of DMA.
* Input          : None
* Return         : None
*******************************************************************************/
void DAC_Data_Init(void)
{
	uint32_t Idx = 0;  
	for (Idx = 0; Idx < buf_len; Idx++)
	{
		DAC_Buf[Idx] = 2000*sin(Idx*3.14159265*2/buf_len)+2048;
	}
}

/*******************************************************************************
* Function Name  : TIM3_Init
* Description    : Initializes TIM3 collection.
* Input          : arr: TIM_Period
*                  psc: TIM_Prescaler
* Return         : None
*******************************************************************************/
void TIM3_Init(u16 arr,u16 psc)
{
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	GPIO_InitTypeDef GPIO_InitStructure; 
	TIM_OCInitTypeDef TIM_OCInitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);

	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);

	TIM_TimeBaseStructure.TIM_Period = arr-1;             
	TIM_TimeBaseStructure.TIM_Prescaler = psc-1;           
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 

	TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);  

	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//下面详细说明
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM_OutputState_Disable;
	TIM_OCInitStructure.TIM_Pulse = arr>>1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//如果是PWM1要为Low,PWM2则为High
	TIM_OC1Init(TIM3, &TIM_OCInitStructure);
	TIM_Cmd(TIM3, ENABLE); 				 
}


/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Return         : None
*******************************************************************************/
int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	Delay_Init();

	Gpio_Init();
	Dac_Init();
	DAC_Data_Init();
	DAC1_DMA_Init(); 
	TIM3_Init(10,36); //溢出率200kHz产生1kHz正弦波

	while(1)
	{	
		LED = !LED;
		Delay_Ms(500);
	}
}

2 方波测试

2.1 1kHz方波量结果

在这里插入图片描述

2.2 10kHz方波量结果

在这里插入图片描述

2.3 100kHz方波量结果

在这里插入图片描述

2.4 400kHz方波量结果

在这里插入图片描述

3 正弦波测试

3.1 50Hz正弦波量结果

在这里插入图片描述

3.2 1kHz正弦波量结果

在这里插入图片描述

3.3 10kHz正弦波量结果

在这里插入图片描述
提示:CH32 DAC不便产生高频正弦波。测量结果仅供参考

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>