发现论坛里好多都是基于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附件中可下载工程文件)
增益计算表
单片机源程序如下:
- /*------------------------------------------------------------------------------------
- STM32示波器
- 硬件平台:
- 主控器: STM32F103ZET6 64K RAM 512K ROM
- 屏幕器: SSD1963
- 分辨率: 480x272 16位色
- 触摸屏: TSC2046
- 模拟电路: OP - TL084
- OP - u741
- SW - CD4051
- CMP - LM311
- PWR - LM7805
- - LM7905
- - MC34063
- - AMS1117-3.3
- DRI - ULN2003
- 继电器:信号继电器
- 电源: DC +12V
- 软件平台:
- 开发环境: RealView MDK-ARM uVision4.10
- C编译器 : ARMCC
- ASM编译器:ARMASM
- 连接器: ARMLINK
- 实时内核: uC/OS-II 2.90实时操作系统
- GUI内核 : uC/GUI 3.90图形用户接口
- 底层驱动: 各个外设驱动程序
-
- ROM Size = Code + RO-data +RW-data
- RAM Size = RW-data + ZI-data
- Program Size: Code=56024 RO-data=8272 RW-data=256 ZI-data=29912
-
- BoX编写于大二上学期
-
-
- -------------------------------------------------------------------------------------*/
- #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(); //初始化DAC1
- ADC1_Init(); //初始化ADC1
- EXTI_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); //喂狗时间为1000ms
- OS_EXIT_CRITICAL();
- }
复制代码
所有资料51hei提供下载:
STM32示波器.7z
(8.2 MB, 下载次数: 95)
|