找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3527|回复: 0
收起左侧

STM32数字示波器设计 含PCB电路 上位机C#源程序

[复制链接]
ID:328014 发表于 2020-6-20 02:56 | 显示全部楼层 |阅读模式
发现论坛里好多都是基于51单片机设计的,分享一下手里关于STM32的设计资料,同时楼主也在学习相关知识

基于STM32F103ZET6数字示波器

设计指标:
主控:                    STM32F103ZET6
液晶屏:                  4.3寸TFT480×272  65K彩色LCD显示屏  FSMC
AD:                      12位1MHz采样速率
最高实时取样率:        1Msps  8Bits
取样缓冲器深度:        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功能

功能预留:
1、波形发生器:使用STM32一路DA实现正弦,三角波,方波输出。 任意一种波形幅值在
               0-3.3V任意可调、频率在一定范围任意可调、方波占空比可调。调节选项
               可以通过触摸屏完成设置。
2、SD卡存储: SD卡波形存储输出,能够对当前屏幕截屏,以JPG格式存储在SD卡上。能够存储1S内的波形数据,可以随时调用查看。
3、数据传输:  用C#编写上位机,通过串口完成对下位机的控制。初步功能为:(1)实现STOP/RUN功能(2)输出波形电压、时间参数(3)控制截屏(4)控制波形发生器(5)其他
4、图形接口:  完成UCGUI的移植和使用工作。
5、远期计划:  添加FFT等等
1、采样速率:600Sa/s,6kSa/s ,60kSa/s,600kSa/s ,3MSa/s,,6MSa/s,30MSa/s ,60MSa/s
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、被测信号的各种参数屏幕显示,包括频率、电压峰峰值等。

硬件电路
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
51hei.png 51hei.png 51hei.png 51hei.png



增益计算表
51hei.png

单片机源程序如下:
  1. /*------------------------------------------------------------------------------------
  2.                                                                    STM32示波器
  3. 硬件平台:
  4.                          主控器: STM32F103ZET6 64K RAM 512K ROM
  5.                         屏幕器: SSD1963
  6.                         分辨率: 480x272 16位色
  7.                    触摸屏: TSC2046
  8.                         模拟电路: OP  - TL084
  9.                                           OP  - u741
  10.                                           SW  - CD4051
  11.                                           CMP - LM311
  12.                                           PWR - LM7805
  13.                                               - LM7905
  14.                                                   - MC34063
  15.                                                   - AMS1117-3.3
  16.                                           DRI - ULN2003
  17.                         继电器:信号继电器
  18.                     电源:   DC +12V

  19. 软件平台:
  20.                          开发环境: RealView MDK-ARM uVision4.10
  21.                         C编译器 : ARMCC
  22.                         ASM编译器:ARMASM
  23.                         连接器:   ARMLINK
  24.                         实时内核: uC/OS-II 2.90实时操作系统
  25.                         GUI内核 : uC/GUI   3.90图形用户接口
  26.                         底层驱动: 各个外设驱动程序
  27.         
  28.         ROM Size = Code + RO-data +RW-data
  29.         RAM Size = RW-data + ZI-data
  30.         Program Size: Code=56024 RO-data=8272 RW-data=256 ZI-data=29912         

  31.      BoX编写于大二上学期

  32.                                 
  33. -------------------------------------------------------------------------------------*/   
  34. #include "stm32f10x.h"
  35. #include "ucos_ii.h"
  36. #include "app.h"
  37. #include "GUI.h"

  38. #include "usart1.h"
  39. #include "pincfg.h"
  40. #include "delay.h"
  41. #include "tft_api.h"
  42. #include "dac.h"
  43. #include "adc.h"
  44. #include "iwdg.h"
  45. #include "timer.h"
  46. #include "EXTI.H"
  47. #include "oscilloscope.h"
  48. #include "indkey.h"
  49. #include "tsc2046.h"

  50. #include "task_rtc.h"
  51. #include "task_gui.h"
  52. #include "task_sd.h"


  53. /*-----------------------------------------
  54.                                 声明起始任务栈
  55. ------------------------------------------*/
  56. OS_STK  Task_Start_Stk[TASK_START_STK_SIZE];

  57. /*-----------------------------------------
  58. 因为涉及到对共享资源的访问,创建互斥信号量
  59. ------------------------------------------*/
  60. OS_EVENT *LCD_Buffer_MUTEX;
  61. OS_EVENT *USART_Buffer_MUTEX;
  62. OS_EVENT *SDtoRAM_Buffer_MUTEX;
  63. /*-----------------------------------------
  64.                                 主 函 数
  65. ------------------------------------------*/   
  66. int main(void)   
  67. {   
  68.          INT8U err;
  69.      SystemInit();                 //初始化RCC时钟
  70.          OSInit();
  71.                            
  72.          LCD_Buffer_MUTEX     = OSMutexCreate(4,&err);        //创建3个共享资源互斥信号量
  73.          USART_Buffer_MUTEX   = OSMutexCreate(4,&err);
  74.          SDtoRAM_Buffer_MUTEX = OSMutexCreate(4,&err);
  75.             
  76.      OSTaskCreate(Task_Start,(void *)0,&Task_Start_Stk[TASK_START_STK_SIZE-1],TASK_START_PRIO); //起始任务   
  77.          
  78.          OSStart();      
  79. }
  80. /*-------------------------------------------------------------------------------
  81. 函数功能:初始化各种外设
  82. 说    明:因为跑操作系统,所以外设的初始化应该放在操作系统的初始任务中完成,不能
  83.           在while(1)循环外部完成外设的初始化工作,否则操作系统可能无法启动.
  84.                   本函数在app.c中被调用
  85. -------------------------------------------------------------------------------*/
  86. void BSP_Init(void)
  87. {
  88.         OS_CPU_SR  cpu_sr = 0u;
  89.         OS_ENTER_CRITICAL();
  90.         DelayInit();                 //初始化延时
  91.         PinCfg();                         //外部器件控制配置
  92.         FSMC_LCD_Init();         //FSMC总线配置                  
  93.         GUI_Init();                         //初始化UCGUI界面
  94.         TSC2046_Config();         //初始化触摸控制器
  95.         USART1_Config();         //初始化串口
  96.         DAC_Config();                 //初始化DAC1
  97.         ADC1_Init();                 //初始化ADC1
  98.         EXTI_Config();                 //初始化外部中断
  99.         Key_EXTI_Config();         //初始化按键中断
  100.         TIM5_Config(1999,71);  //TIM5以1MHz频率计数,每2ms溢出中断
  101. //        TIM4_Config(59999,71); //TIM4以1MHz频率计数,每60ms溢出中断
  102.         RTC_Init();                            //初始化RTC
  103. //        SD_Init();
  104.         JDQ_ACDC = 1;                  //交流耦合
  105.         ManualGainScan(3);    //调试用
  106.         IWDG_Init(4,625);     //喂狗时间为1000ms
  107.         OS_EXIT_CRITICAL();         
  108. }
复制代码
51hei.png
所有资料51hei提供下载:
STM32示波器.7z (8.2 MB, 下载次数: 92)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表