久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5222|回復: 5
打印 上一主題 下一主題
收起左側

STM32系統示波器設計 C#上位機及下位機源程序,硬件電路圖

  [復制鏈接]
跳轉到指定樓層
樓主
用于STM32F103V的示波器制作 。
有2個通道
個人愛好設計都DIY可以用20MHZ這樣
專的的200MHZ以上去買現成的。

設計指標:
主控:                    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附件中可下載工程文件)

Multisim原理圖如下(仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /*------------------------------------------------------------------------------------
  2.                                      STM32+UCOS+UCGUI示波器
  3.            
  4.                                                        任務列表
  5.            +---------------------+-------------+-----------+
  6.            |      任務名稱       | 任務優先級  |  任務堆棧 |
  7.            +---------------------+-------------+-----------+           
  8.            |   TASK_MAIN         |     11      |   2048    |
  9.            +---------------------+-------------+-----------+
  10.            |   TASK_RTC                |     12      |    512    |
  11.            +---------------------+-------------+-----------+
  12.            |   TASK_SD                 |     13      |    512    |
  13.            +---------------------+-------------+-----------+
  14.            |   TASK_TOUCHSCREEN         |     14      |    512    |
  15.            +---------------------+-------------+-----------+
  16.            |   TASK_GUI                          |     15      |   1024    |
  17.            +---------------------+-------------+-----------+
  18.            |   TASK_START             |     5       |    64     |
  19.            +---------------------+-------------+-----------+
  20.            

  21. 時間: 2013年11月13日       BoX編寫                                
  22. -------------------------------------------------------------------------------------*/  
  23. #include "ucos_ii.h"   
  24. #include "stdio.h"
  25. #include "app.h"
  26. #include "pincfg.h"
  27. #include "delay.h"
  28. #include "tft_api.h"
  29. #include "oscilloscope.h"
  30. #include "indkey.h"
  31. #include "timer.h"
  32. #include "EXTI.H"
  33. #include "adc.h"
  34. #include "iwdg.h"
  35. #include "tsc2046.h"

  36. #include "task_main.h"
  37. #include "task_gui.h"
  38. #include "task_rtc.h"
  39. #include "task_sd.h"
  40. #include "task_touchscreen.h"

  41. #include "GUI.h"
  42. /*-----------------------------------------
  43.                                 聲明任務棧
  44. UCOSII的任務堆棧沒有8字節對齊,在聲明任務堆
  45. 棧時,強制8字節對齊就可以了,系統默認是4字節
  46. 對齊.否則sprintf時會出問題,系統會崩潰.
  47. ------------------------------------------*/
  48. __align(8) OS_STK Task_TouchScreen_Stk[TASK_TOUCHSCREEN_STK_SIZE];
  49. __align(8) OS_STK Task_Main_Stk[TASK_MAIN_STK_SIZE];
  50. __align(8) OS_STK Task_RTC_Stk[TASK_RTC_STK_SIZE];
  51. __align(8) OS_STK Task_SD_Stk [TASK_SD_STK_SIZE];
  52. __align(8) OS_STK Task_GUI_Stk[TASK_GUI_STK_SIZE];
  53. /*-----------------------------------------
  54.                             聲明變量
  55. ------------------------------------------*/
  56. extern u16  ADC1_DMA_Value;
  57. extern u8   LCD_Buffer[LCD_BUFFER_SIZE];
  58. extern u16  Tpx,Tpy,ZBX,ZBY;                  //觸摸屏AD值,坐標值
  59. extern void BSP_Init(void);

  60. extern  WaveType    WaveInfo;                          //波形參數
  61. extern  WaveMode    WaveCtrl;                          //控制參數
  62. extern  FG_WaveType FG_WaveInfo;              //信號發生器參數
  63. /*-----------------------------------------
  64.                             開始任務
  65. ------------------------------------------*/
  66. void Task_Start(void *pdata)
  67. {
  68.           pdata = pdata;
  69.          BSP_Init();                //完成片上外設的初始化
  70.          OSStatInit();                //初始化統計任務
  71.          
  72.          while(1)
  73.          {         
  74. //                  ShowWelcomeScreen();
  75. //                 OSTimeDlyHMSM(0,0,3,0);
  76.                   /*觸摸屏任務*/
  77.                  
  78.                    OSTaskCreateExt(Task_TouchScreen,
  79.                             (void *)0,
  80.                             &Task_TouchScreen_Stk[TASK_TOUCHSCREEN_STK_SIZE - 1],
  81.                             TASK_TOUCHSCREEN_PRIO,
  82.                             TASK_TOUCHSCREEN_PRIO,
  83.                             &Task_TouchScreen_Stk[0],
  84.                             TASK_TOUCHSCREEN_STK_SIZE,
  85.                             (void *)0,
  86.                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
  87.                
  88.         /*實時時鐘任務*/
  89.         OSTaskCreateExt(Task_RTC,
  90.                             (void *)0,
  91.                             &Task_RTC_Stk[TASK_RTC_STK_SIZE - 1],
  92.                             TASK_RTC_PRIO,
  93.                             TASK_RTC_PRIO,
  94.                             &Task_RTC_Stk[0],
  95.                             TASK_RTC_STK_SIZE,
  96.                             (void *)0,
  97.                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
  98.         /*SD卡任務*/
  99.         OSTaskCreateExt(Task_SD,
  100.                             (void *)0,
  101.                             &Task_SD_Stk[TASK_SD_STK_SIZE - 1],
  102.                             TASK_SD_PRIO,
  103.                             TASK_SD_PRIO,
  104.                             &Task_SD_Stk[0],
  105.                             TASK_SD_STK_SIZE,
  106.                             (void *)0,
  107.                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
  108.                 /*GUI任務*/
  109.                 OSTaskCreateExt(Task_GUI,
  110.                             (void *)0,
  111.                             &Task_GUI_Stk[TASK_GUI_STK_SIZE - 1],
  112.                             TASK_GUI_PRIO,
  113.                             TASK_GUI_PRIO,
  114.                             &Task_GUI_Stk[0],
  115.                             TASK_GUI_STK_SIZE,
  116.                             (void *)0,
  117.                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

  118.                 /*主任務*/
  119.                 OSTaskCreateExt(Task_Main,
  120.                             (void *)0,
  121.                             &Task_Main_Stk[TASK_MAIN_STK_SIZE - 1],
  122.                             TASK_MAIN_PRIO,
  123.                             TASK_MAIN_PRIO,
  124.                             &Task_Main_Stk[0],
  125.                             TASK_MAIN_STK_SIZE,
  126.                             (void *)0,
  127.                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
  128.               
  129. //                PinCfg_Beep(1);                            //蜂鳴器響起提示系統啟動成功
  130.         OSTaskSuspend(OS_PRIO_SELF);   //掛起Task_Start任務               
  131.          }
  132. }
  133. /*-----------------------------------------
  134.                             觸摸屏任務
  135. ------------------------------------------*/         
  136. void Task_TouchScreen(void *pdata)
  137. {
  138.         pdata = pdata;
  139.         while(1)
  140.         {        
  141.                 TP_Read(&Tpx,&Tpy);
  142.                 TP_ADtoZB(&Tpx,&Tpy,&ZBX,&ZBY);         //計算觸摸坐標
  143.                 TouchEventDetected();                         //檢測觸摸事件
  144.                 BOARD_LED1 = !BOARD_LED1;
  145.                 OSTimeDlyHMSM(0,0,0,100);
  146.         }
  147. }
  148. /*-----------------------------------------
  149.                             Real Time Clock任務
  150. ------------------------------------------*/
  151. void Task_RTC(void *pdata)
  152. {
  153.         pdata = pdata;        
  154.         while(1)
  155.         {        
  156.                 u8 AlarmTemp;
  157.                 GetFrequence();                   //獲取時間參數并顯示
  158.                 AlarmTemp = GetTempSensor();        
  159.                
  160.                 if(AlarmTemp>60)           //芯片保護溫度報警定值60℃
  161.                         BEEP = 1;
  162.                 else if(AlarmTemp>50)
  163.                         PinCfg_Beep(3);           //接近紅線短鳴3聲
  164.                 else
  165.                         BEEP = 0;
  166.                  OSTimeDlyHMSM(0,0,1,500);
  167.         }         
  168. }
  169. /*-----------------------------------------
  170.                              主任務
  171. ------------------------------------------*/
  172. void Task_Main(void *pdata)
  173. {        
  174.         pdata = pdata;                                       
  175.         WaveCtrl.TimeBase = 99;                        //上電默認時基99
  176.         WaveCtrl.Gain = 3;                                //上電默認增益號3
  177.         while(1)
  178.         {
  179. //                TaskStackChack();                        //是否堆棧使用情況檢查
  180.                 GetWaveADCValue();                        //核心函數
  181.                 IWDG_Feed();                               //1000ms內喂狗
  182.                 BOARD_LED2 = !BOARD_LED2;
  183.                 OSTimeDlyHMSM(0,0,0,50);
  184.         }        
  185. }
  186. /*-----------------------------------------
  187.                             SD任務
  188. ------------------------------------------*/
  189. void Task_SD(void *pdata)
  190. {
  191.         pdata = pdata;
  192.         while(1)
  193.         {
  194.                 SendDataToPC();                                //發送編碼數據到上位機
  195.                  OSTimeDlyHMSM(0,0,0,999);
  196.         }
  197. }
  198. /*-----------------------------------------
  199.                             GUI任務
  200. ------------------------------------------*/

  201. void Task_GUI(void *pdata)
  202. {
  203.         pdata = pdata;
  204.         DrawControlPanel();
  205.         while(1)
  206.         {        
  207.                 DisplayWaveInfo();                          //顯示參數        
  208.                 OSTimeDlyHMSM(0,0,0,500);
  209.         }
  210. }
復制代碼

所有資料51hei提供下載:
上位機exe文件以及上位機源碼.zip (6.59 MB, 下載次數: 118)
設計文檔.zip (60.19 KB, 下載次數: 79)
硬件設計.zip (2.65 MB, 下載次數: 82)
程序.7z (1.07 MB, 下載次數: 84)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏17 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:117977 發表于 2022-5-5 16:56 | 只看該作者
PCB看起來很丑 功能缺很強大
回復

使用道具 舉報

板凳
ID:203661 發表于 2022-5-14 09:55 | 只看該作者
上位機上個圖看一下效果啊
回復

使用道具 舉報

地板
ID:1063483 發表于 2023-5-5 20:33 | 只看該作者
這是本站最好的、完整的代碼之一,謝謝!
回復

使用道具 舉報

5#
ID:1063483 發表于 2023-5-5 20:36 | 只看該作者
C#上位機,剛剛下載,謝謝!

上位機圖.PNG (92.46 KB, 下載次數: 97)

上位機運行圖

上位機運行圖
回復

使用道具 舉報

6#
ID:291668 發表于 2023-5-7 15:01 | 只看該作者
高人的東西,一直值得學習借鑒!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频精品 | 热re99久久精品国99热观看 | 国产a区| 欧美激情亚洲 | a级毛片毛片免费观看久潮喷 | 久久久91| 国产精品久久久久久久久久久久冷 | 色婷婷精品国产一区二区三区 | 欧美综合一区二区三区 | 亚洲激精日韩激精欧美精品 | 欧美一区二区三区在线 | 成人一级黄色毛片 | 激情五月激情综合网 | 中文字幕在线网 | 精品久久久久久国产 | 中文字幕精品一区二区三区在线 | 精品国产乱码久久久久久蜜退臀 | 久久久www | 欧美激情一区二区三级高清视频 | 国产一级特黄aaa大片评分 | 国产精品色 | 97精品一区二区 | 亚洲品质自拍视频 | 亚洲午夜精品视频 | 蜜桃精品视频在线 | 欧美成人精品二区三区99精品 | 浮生影院免费观看中文版 | 蜜桃视频麻豆 | 欧美黑人一区二区三区 | 色综合一区二区三区 | 午夜影院普通用户体验区 | 超碰人人爱 | 国产精品久久久久久久久久 | 欧美性一级 | 亚洲视频www| 国产九一精品 | 国产乱码精品1区2区3区 | 天天看天天爽 | 国产一区免费视频 | 国产精品毛片av一区 | 欧美一级艳情片免费观看 |