STM32数字示波器+详细注释+上位机程序+硬件

2024-05-04 02:20

本文主要是介绍STM32数字示波器+详细注释+上位机程序+硬件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、设计指标:

2、功能:

3、上位机的程序

​4、测试的照片

5、PCB 

6、模拟电路板

7、程序

资料下载地址:STM32数字示波器+详细注释+上位机程序+硬件

1、设计指标:

主控:                                        STM32F103ZET6
液晶屏:                                      4.3寸TFT480×272  65K彩色LCD显示屏  FSMC
AD:                                         12位1MHz采样率
最高实时取样率:                   1MSa/s  12Bits
取样缓冲器深度:                   5K  
垂直灵敏度:                            5V,1V,500mV,200mV,100mV,50mV,20mV,10mV;  
水平时基范围:2S,1S,500mS,200mS,100mS,50mS,20mS,10mS,5mS,2mS,1mS,500uS,200uS,100uS,50uS,20uS,10uS,5uS,2uS,1uS
输入阻抗:                                 ≥1MΩ
最高输入电压:                       30Vpp
耦合方式:                                 AC/DC
触发功能:                                 实现自动、常规、单次触发方式 ,上升或下降边沿触发  
参数计算:                                 频率、周期、占空比、交流峰-峰值、平均值、光标追踪显示
RUN/STOP

2、功能:

        1、波形发生器:使用STM32一路DA实现正弦,三角波,方波,白噪声输出。 任意一种波形幅值在0-3.3V任意可调、频率在一定范围任意可调、方波占空比可调。调节选项可以通过触摸屏完成设置。
        2、SD卡存储: SD卡波形存储输出,能够对当前屏幕截屏,以JPG格式存储在SD卡上。能够存储1S内的波形数据,可以随时调用查看。
        3、数据传输:  用C#编写上位机,通过串口完成对下位机的控制。
        (1)实现STOP/RUN功能
        (2)输出波形电压、时间参数
        (3)控制截屏
        (4)控制波形发生器
        (5)控制完成FFT
        (6)波形的存储和显示
        4、图形接口:  UCGUI
        2、水平扫速:  250 ns*、500ns、1μs、5 μs、10μs、50μs、500 μs、5ms 、50ms
        3、垂直电压灵敏度:10mV/div, 20mV/div, 50mV/div, 0.1V/div, 0,2V/div, 0.5V/div, 1V/div,
2V/div, 5V/div
        4、被测信号的各种参数屏幕显示,包括频率、电压峰峰值等。

3、上位机的程序

 4、测试的照片

 

5、PCB 

 

6、模拟电路板

 

 

7、程序

/*------------------------------------------------------------------------------------STM32示波器硬件平台:主控器: STM32F103ZET6 64K RAM 512K ROM屏幕器: SSD1963 分辨率: 480x272 16位色触摸屏: TSC2046模拟电路: OP  - TL084OP  - u741SW  - CD4051CMP - LM311PWR - LM7805- LM7905- MC34063- AMS1117-3.3DRI - ULN2003继电器:信号继电器电源:   DC +12V软件平台:开发环境: RealView MDK-ARM uVision4.10C编译器 : ARMCCASM编译器:ARMASM连接器:   ARMLINK实时内核: uC/OS-II 2.90实时操作系统GUI内核 : uC/GUI   3.90图形用户接口底层驱动: 各个外设驱动程序ROM Size = Code + RO-data +RW-dataRAM Size = RW-data + ZI-dataProgram Size: Code=56024 RO-data=8272 RW-data=256 ZI-data=29912          时间: 2013年11月9日       BoX编写于大二上学期版本: V1.0 - 2013/11/9V1.1 - 2014/2/8V3.0 - 2014/2/19                                
-------------------------------------------------------------------------------------*/   
#include "stm32f10x.h"
#include "ucos_ii.h"
#include "app.h"
#include "GUI.h"#include "usart1.h"
#include "pincfg.h"
#include "delay.h"
#include "tft_api.h"
#include "dac.h"
#include "adc.h"
#include "iwdg.h"
#include "timer.h"
#include "EXTI.H"
#include "oscilloscope.h"
#include "indkey.h"
#include "tsc2046.h"#include "task_rtc.h"
#include "task_gui.h"
#include "task_sd.h"/*-----------------------------------------声明起始任务栈
------------------------------------------*/
OS_STK  Task_Start_Stk[TASK_START_STK_SIZE]; /*-----------------------------------------因为涉及到对共享资源的访问,创建互斥信号量
------------------------------------------*/
OS_EVENT *LCD_Buffer_MUTEX;
OS_EVENT *USART_Buffer_MUTEX;
OS_EVENT *SDtoRAM_Buffer_MUTEX;
/*-----------------------------------------主 函 数
------------------------------------------*/    
int main(void)    
{    INT8U err;SystemInit();                 //初始化RCC时钟OSInit(); LCD_Buffer_MUTEX     = OSMutexCreate(4,&err);        //创建3个共享资源互斥信号量USART_Buffer_MUTEX   = OSMutexCreate(4,&err);SDtoRAM_Buffer_MUTEX = OSMutexCreate(4,&err);OSTaskCreate(Task_Start,(void *)0,&Task_Start_Stk[TASK_START_STK_SIZE-1],TASK_START_PRIO); //起始任务   OSStart();       
}
/*-------------------------------------------------------------------------------函数功能:初始化各种外设说    明:因为跑操作系统,所以外设的初始化应该放在操作系统的初始任务中完成,不能在while(1)循环外部完成外设的初始化工作,否则操作系统可能无法启动.本函数在app.c中被调用
-------------------------------------------------------------------------------*/
void BSP_Init(void)
{OS_CPU_SR  cpu_sr = 0u;OS_ENTER_CRITICAL();DelayInit();                 //初始化延时PinCfg();                         //外部器件控制配置FSMC_LCD_Init();         //FSMC总线配置                  GUI_Init();                         //初始化UCGUI界面TSC2046_Config();         //初始化触摸控制器USART1_Config();         //初始化串口DAC_Config();                 //初始化DAC1ADC1_Init();                 //初始化ADC1EXTI_Config();                 //初始化外部中断Key_EXTI_Config();         //初始化按键中断TIM5_Config(1999,71);  //TIM5以1MHz频率计数,每2ms溢出中断
//        TIM4_Config(59999,71); //TIM4以1MHz频率计数,每60ms溢出中断RTC_Init();                            //初始化RTC
//        SD_Init();JDQ_ACDC = 1;                  //交流耦合ManualGainScan(3);    //调试用IWDG_Init(4,625);     //喂狗时间为1000msOS_EXIT_CRITICAL();         
}

 

这篇关于STM32数字示波器+详细注释+上位机程序+硬件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958152

相关文章

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具