基于STM32的简易数字示波器 目录一、项目概述1.功能简介2.效果展示二、硬件设计1.主控选型2.显示模块3.信号调理电路4.PWM信号源模块5.人机交互三、软件设计1.工程结构2.系统整体流程四、资料获取一、项目概述1.功能简介本项目基于 STM32F103 微控制器设计并实现了一款低成本、便携式的简易数字示波器集波形显示、频率测量、信号发生与按键交互于一体适合电子爱好者进行信号观测、电路调试以及嵌入式开发学习。系统以 STM32F103 为主控通过 ADC DMA 高速采样输入信号在 1.8 寸 ST7735S TFT 彩屏上实时绘制波形同时利用定时器输入捕获技术对信号频率进行硬件测量实现“波形看得见、频率测得准”的基本示波器功能。主要功能如下实时波形显示支持对模拟输入信号进行高速采样并在 TFT 屏幕上绘制动态波形曲线可清晰观察方波、正弦波等信号形态输入频率测量通过 TIM3 输入捕获引脚测量外部信号频率并在屏幕上实时显示测量原理基于定时器计数值与时间基准的换算。信号幅度测量自动计算并显示输入信号的峰峰值帮助用户快速评估信号强度。可调 PWM 信号源板载 PWM 输出功能可输出频率与占空比可调的方波信号既可独立作为信号源使用也可作为本机示波器的测试输入。按键交互控制通过独立按键实现 PWM 输出状态切换、频率调节、占空比调整等操作配合旋转编码器实现采样时间调节人机交互直观简便。两种输入耦合模式支持 AO直流耦合与 DO交流耦合两种信号输入方式适应不同直流偏置下的信号测量需求。2.效果展示简易数字示波器二、硬件设计1.主控选型STM32F103C8T6最小系统板主要使用其以下外设ADC1 DMA输入信号高速采样TIM2PWM波形输出TIM3输入捕获测量信号频率SPI1TFT屏幕通信EXTI按键/编码器中断、ADCDMA中断、TIM3输入捕获中断系统时钟配置为 72MHzHSE 8MHz × PLL 9 倍频保证 ADC、定时器与 SPI 均工作在较高频率。2.显示模块显示部分采用 1.8 英寸 TFT 彩屏驱动芯片为 ST7735S分辨率 128×160通过 4 线 SPI 接口通信。屏幕引脚与 STM32 的连接如下TFT引脚STM32引脚说明SCLPA5SPI1_SCK时钟线SDAPA7SPI1_MOSI数据线RESPB5复位信号低电平有效DCPB6数据、命令选择低命令高数据CSPB7片选信号低电平有效LEDPB8背光信号高电平点亮VCC3.3V电源GNDGND地SPI 配置为模式 3CPOL1CPHA1与 ST7735S 驱动芯片的时序要求匹配。需要特别注意的是SPI 模式必须与屏幕模块的官方驱动一致否则会出现白屏或花屏现象。3.信号调理电路信号调理电路是整个示波器前端的关键部分负责将待测信号调整到 ADC 可采样的范围内。电路提供两种输入耦合模式AO 模式直流耦合信号直接接入保留直流分量适合测量带直流偏置的信号DO 模式交流耦合信号经过隔直电容后接入滤除直流分量适合测量交流小信号。电路还包含电阻分压与偏置网络将实际输入电压线性映射到 ADC 的 0~3.3V 采样范围内。代码中电压换算关系为V实际 5 - 2 × VADC其中 VADC 为 ADC 引脚实测电压通过该公式可还原被测信号的真实幅度4.PWM信号源模块系统通过 TIM2_CH3 输出可调 PWM 方波作为板载信号源。PWM 输出引脚为 PA2与示波器输入配合可实现“信号源 示波器”一体的自测功能。PWM 的频率与占空比均可通过按键实时调节占空比可覆盖 0~100% 范围。5.人机交互器件引脚功能KEY1PB13占空比调节KEY2PB14PWM 输出开关KEY3PB15频率调节KEYDPB9波形暂停/继续轮询编码器APB4双边沿中断右转采样时间减少编码器BPB3方向判断左转采样时间增加LED1/LED2PC14/PC15指示三、软件设计1.工程结构2.系统整体流程首先我们定义了一个结构体用来储存结构提的一些参数struct Oscilloscope //示波器结构体 { uint8_t showbit; //显示标志位 uint8_t keyValue; //当前按键值位 uint8_t ouptputbit; //PWM输出标志位 uint16_t outputFreq; //PWM输出频率 uint16_t pwmOut; //PWM输出值CCR uint32_t sampletime; //ADC采样时间 uint32_t timerPeriod; //定时器周期ARR 1 __IO uint32_t gatherFreq; //采集频率 float vpp; //最大电压 float voltageValue[300]; //一次ADC采集电压值 };先说说我们用到的中断外部中断按键ADC DMA采集TIM3输入捕获测量频率按键按下会触发外部中断然后在回调函数中给相应的按键状态变量赋值然后在Key_Scanf()函数中则对按键按下后做出一个消抖处理然后将按下按键对应的按键号赋值给示波器结构体的KeyValue值。随后在Key_Handle()函数中处理这些按键相应的逻辑。在main函数开头先是初始化外设和结构体随后先打开ADCDMA采集在ADC中断中对结构体的showbit赋值为1说明可以开始绘制了并且将ADCDMA关闭防止未被处理的数据被覆盖TIM3输入捕获配置为上升沿触发然后在里面计算两次触发时相差多少计数值来计算频率71分频那么频率就是1MHz计一个数是1us那么计n个数的频率为1s/n us也就是1000000 / n随后将频率赋值。其余的就是TFT的驱动和绘制这部分不是项目的重点。四、资料获取由于本项目是嘉立创开源广场的项目相关的源码原理图物料清单等等请看简易数字示波器设计入门版 - 立创开源硬件平台