|
基于STM32虛擬示波器,有興趣可以看看,附件里面包含全部的制作資料
1. 分析儀功能介紹
以“低成本和高性能”為設(shè)計(jì)思想,借助虛擬儀器的概念和高速的數(shù)字信號(hào)處理算法將
傳統(tǒng)的函數(shù)發(fā)生器、示波器、數(shù)據(jù)記錄儀、頻率計(jì)、譜分析儀以及濾波器設(shè)計(jì)和仿真等功能
高度集成、統(tǒng)一平臺(tái)方便使用。
軟件環(huán)境支持聲卡、USB 模塊和虛擬仿真,三種模式。聲卡模式,可以借助電腦的聲
卡來(lái)完成對(duì)音頻范圍內(nèi)信號(hào)的分析和處理;USB 模塊,可以完成對(duì)帶寬允許內(nèi)的信號(hào)的分
析和處理;其中演示模式采用軟件模擬來(lái)實(shí)現(xiàn)所有的功能,便于教學(xué)和理論的演示。
公開軟件通信協(xié)議,可以按照協(xié)議將自己的硬件加入我們的軟件環(huán)境,使用所有的分析
功能。
函數(shù)發(fā)生器
支持產(chǎn)生“正弦波”、“三角波”、“矩形波”、“上鋸齒波”、“下鋸齒波”、“白噪聲”和“合
成波形”,并提供峰值、頻率、輸出相位差的調(diào)整功能。
波形文件輸出,可以支持“正弦波”、“三角波”、“矩形波”、“上鋸齒波”、“下鋸齒波”、
“白噪聲”和“合成波形”,提供峰值、頻率、輸出相位差的調(diào)整功能,支持以wav、txt、
hex 和mif 文件形式的輸出。
示波器/譜分析儀
可以工作在“聲卡”、“USB 模塊”、“仿真”和“串口捕獲”四種模式。支持任意多畫
面的同時(shí)顯示,便于波形的多樣分析;支持輸入波形硬件和軟件觸發(fā);支持輸入波形的插值
和等效采樣;支持輸入波形的“相加”、“相減”和“相乘”合成;支持對(duì)輸入波形加“矩形
窗”、“三角窗”、“海明窗”、“漢寧窗”和“布萊克曼窗”;支持對(duì)輸入波形的濾波處理; 支
持對(duì)輸入波形的“李薩茹圖形”、“幅頻”、“相頻”、“對(duì)數(shù)幅頻”、“自功率譜”、“對(duì)數(shù)自功率
譜”、“自相關(guān)”和“互相關(guān)”的分析。
說(shuō)明:本協(xié)議中B 代表 bit,即8B=1 字節(jié)
1.重啟序列
改序列用于整個(gè)下位機(jī)的重啟,收到該序列后,需重新握手,其過(guò)程如下:
PC ---------->0xff,0xff,0xff,0xff,0xff,0x11,0x22,0x33,0x44,0x55
0xff,0xff,0xff,0xff,0xff,0x11,0x22,0x33,0x44,0x55<-------------CE
2.握手
握手用于上位機(jī)和下位機(jī)的相互識(shí)別過(guò)程。其過(guò)程如下:
PC ---------->XX XX XX XX XX (5 個(gè)隨機(jī)數(shù))
XX XX XX XX XX (5 個(gè)隨機(jī)數(shù)) <-------------CE
PC---------->XX XX XX XX XX XX XX XX XX XX (上面10 個(gè)隨機(jī)數(shù))
版本信息 <-------------CE
PC----------> AA
(握手成功) 55 <-------------CE
版本信息(32B):
static const unsigned char banben[]=
{ ‘Y’,’i’,’X’,’i’,’n’,’g’,’d’,’i’,’a’,’n’,’z’,‘i’, 0, 0, 0, 0,
‘S’,’t’,’u‘,’-’,’0’ ‘.’, ‘1’, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
3.控制
控制協(xié)議用于PC 控制下位機(jī)工作和獲得一些必要的信息。包含兩種格式,第一種:“PC
控制特定通道”用于 PC 控制通道 ID 指定的下位機(jī)通道;第二種:“PC 控制所有通道”用
于 PC 控制下位機(jī)中支持的所有通道。例如發(fā)送 0x01,0x01,0x00 表示開啟通道 0x01;發(fā)送
0xff,0x12,0x00 表示要求下位機(jī)的所有通道開始采集數(shù)據(jù),并上傳。
需要說(shuō)明的是,假如你有兩個(gè)通道,則這兩個(gè)通道的ID,默認(rèn)為0x01 和0x02。PC 就
用這兩個(gè)ID 兩控制下位機(jī)響應(yīng)的通道。
3.1 控制信息格式
PC 控制特定通道:
通道ID(8B) 控制碼(8B) 控制信息(32B) 附加信息
PC 控制所有通道:
通道ID (0xFF) 控制碼(8B) 控制信息(32B) 附加信息
3.2 控制碼
開啟 控制碼 01
關(guān)閉 控制碼 10
通道數(shù) 控制碼 02
采樣位數(shù) 控制碼 04
采樣符號(hào) 控制碼 08
采集并上傳數(shù)據(jù) 控制碼 12
3.3 CE 應(yīng)答信息格式:
通道ID(8B) 應(yīng)答碼(8B) 應(yīng)答信息(32B) 附加信息
成功 應(yīng)答碼 01
失敗 應(yīng)答碼 10
例如:
通道數(shù) 控制碼 02 回復(fù)信息: 0xFF(8B) 0x01(8B) 0x00000002(32B)
通道ID:所有通道 應(yīng)答碼:成功 應(yīng)答信息:2 個(gè)通道
采樣位數(shù) 控制碼 04 回復(fù)信息: 0xFF(8B) 0x01(8B) 0x00000008(32B)
通道ID:所有通道 應(yīng)答碼:成功 應(yīng)答信息:8 位
采樣符號(hào) 控制碼 08 回復(fù)信息: 0xFF(8B) 0x01(8B) 0x00000001(32B)
通道ID:所有通道 應(yīng)答碼:成功 應(yīng)答信息:有符號(hào) 1,無(wú)符號(hào)0
4.數(shù)據(jù)傳輸
數(shù)據(jù)傳輸格式(CE---->PC)
通道數(shù)N(8B) 放大倍數(shù) (N *32B) 偏置 (N *32B) 數(shù)據(jù)長(zhǎng)度32B) 數(shù)據(jù)(n*8B)
下位機(jī)傳輸采集數(shù)據(jù)的格式,通道數(shù)N 表示這次傳輸中的通道個(gè)數(shù),N 個(gè)通道ID 的表
示后面的數(shù)據(jù),各個(gè)通道的排列順序,放大倍數(shù),表示這次數(shù)據(jù) N 個(gè)通道的每個(gè)的放大倍
數(shù)是多少。數(shù)據(jù)長(zhǎng)度表示后面有多少字節(jié)數(shù)據(jù)。
例如:
0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x00
兩個(gè)通道 通道 0x01 放大 1 倍 通道 0x02 放大2 倍 通道 0x01 偏置
0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00
通道 0x01 偏置 256 字節(jié)數(shù)據(jù)
0x11 0xA3 0x12 0x43………
通道 0x01 數(shù)據(jù) 通道0x02 數(shù)據(jù) 通道 0x01 數(shù)據(jù) 通道0x02 數(shù)據(jù)
- /*
- * Copyright (c) 2010 儀星電子
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
- /*
- * 著作權(quán)所有(C) 2010 儀星電子
- *
- * 本程序?yàn)樽杂绍浖荒梢罁?jù)自由軟件基金會(huì)所發(fā)表的GNU通用公共授權(quán)條款規(guī)定,
- * 就本程序再為發(fā)布與/或修改;無(wú)論您依據(jù)的是本授權(quán)的第二版或(您自行選擇的)
- * 任一日后發(fā)行的版本。
- * 本程序是基于使用目的而加以發(fā)布,然而不負(fù)任何擔(dān)保責(zé)任;亦無(wú)對(duì)適售性或特定
- * 目的適用性所為的默示性擔(dān)保。詳情請(qǐng)參照GNU通用公共授權(quán)。
- * 您應(yīng)已收到附隨于本程序的GNU通用公共授權(quán)的副本;如果沒(méi)有,請(qǐng)寫信至自由軟件
- * 基金會(huì):59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA。
- * Email yixingdianzi@126.com
- * Email/MSN yixingdianzi@hotmail.com
- * QQ 648887464
- */
- /******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
- * File Name : main.c
- * Author : MCD Application Team
- * Version : V3.1.0
- * Date : 10/30/2009
- * Description : Virtual Com Port Demo main file
- ********************************************************************************
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
- * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
- * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
- * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
- * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *******************************************************************************/
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include "stm32f10x_gpio.h"
- #include "usb_lib.h"
- #include "usb_desc.h"
- #include "usb_pwr.h"
- #include "qdmx_usb.h"
- #include "qdmx_adc.h"
- #define SEND 32
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- /* Extern variables ----------------------------------------------------------*/
- extern __IO uint32_t count_in;
- extern uint8_t Controla_a;
- extern uint8_t Controla_b;
- /* Private function prototypes -----------------------------------------------*/
- /* Private functions ---------------------------------------------------------*/
- void Set_System(void);
- void Callback(uint8_t *p);
- void Delay(__IO uint32_t nCount);
- void GPIO_configure(void);
- /*******************************************************************************
- * Function Name : main.
- * Description : Main routine.
- * Input : None.
- * Output : None.
- * Return : None.
- *******************************************************************************/
- int main(void)
- {
- vu8 s;
- /*設(shè)置系統(tǒng)時(shí)鐘*/
- Set_System();
-
- /*初始化USB模塊*/
- Set_USBClock();
- USB_Interrupts_Config();
- USB_Init();
- /*初始化AD模塊*/
- m_adc_clk_config();
- m_adc_gpio_config();
- m_adc_Interrupts_Config();
- m_adc_init();
- /*初始化GPIO引腳作為放大控制引腳*/
- GPIO_configure();
-
- count_in=0;
- /*默認(rèn)初始值為放大1倍*/
- GPIO_ResetBits(GPIOA,GPIO_Pin_0);
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- GPIO_ResetBits(GPIOA,GPIO_Pin_2);
- GPIO_ResetBits(GPIOB,GPIO_Pin_12);
- GPIO_ResetBits(GPIOB,GPIO_Pin_13);
- GPIO_ResetBits(GPIOB,GPIO_Pin_14);
- while (1)
- {
- }
- }
- void GPIO_configure(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
-
- RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
- RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- void Delay(__IO uint32_t nCount)
- {
- for(; nCount != 0; nCount--);
- }
- void Callback(uint8_t *p)
- {
- if (GetENDPOINT(ENDP1) & EP_DTOG_RX)
- {
- FreeUserBuffer(ENDP1, EP_DBUF_IN);
- UserToPMABufferCopy((uint8_t*) p, ENDP1_TX1ADDR, SEND);
- SetEPDblBuf1Count(ENDP1,EP_DBUF_IN,SEND);
- }
- else
- {
- FreeUserBuffer(ENDP1, EP_DBUF_IN);
- UserToPMABufferCopy((uint8_t*) p, ENDP1_TX0ADDR, SEND);
- SetEPDblBuf0Count(ENDP1,EP_DBUF_IN,SEND);
- }
- }
- #ifdef USE_FULL_ASSERT
- /*******************************************************************************
- * Function Name : assert_failed
- * Description : Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * Input : - file: pointer to the source file name
- * - line: assert_param error line source number
- * Output : None
- * Return : None
- *******************************************************************************/
- void assert_failed(uint8_t* file, uint32_t line)
- {
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* Infinite loop */
- while (1)
- {}
- }
- #endif
- /*******************************************************************************
- * Function Name : Set_System
- * Description : Configures Main system clocks & power
- * Input : None.
- * Return : None.
- *******************************************************************************/
- void Set_System(void)
- {
- ErrorStatus HSEStartUpStatus;
- /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
- /* RCC system reset(for debug purpose) */
- RCC_DeInit();
- /* Enable HSE */
- RCC_HSEConfig(RCC_HSE_ON);
- /* Wait till HSE is ready */
- HSEStartUpStatus = RCC_WaitForHSEStartUp();
- if (HSEStartUpStatus == SUCCESS)
- {
- /* Enable Prefetch Buffer */
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
- /* Flash 2 wait state */
- FLASH_SetLatency(FLASH_Latency_2);
-
- /* HCLK = SYSCLK */
- RCC_HCLKConfig(RCC_SYSCLK_Div1);
-
- /* PCLK2 = HCLK */
- RCC_PCLK2Config(RCC_HCLK_Div1);
- /* PCLK1 = HCLK/2 */
- RCC_PCLK1Config(RCC_HCLK_Div2);
- #ifdef STM32F10X_CL
- /* Configure PLLs *********************************************************/
- /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
- RCC_PREDIV2Config(RCC_PREDIV2_Div5);
- RCC_PLL2Config(RCC_PLL2Mul_8);
- /* Enable PLL2 */
- RCC_PLL2Cmd(ENABLE);
- /* Wait till PLL2 is ready */
- while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET)
- {}
- /* PLL configuration: PLLCLK = (PLL2 / 5) * 9 = 72 MHz */
- RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
- RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
- #else
- /* PLLCLK = 8MHz * 9 = 72 MHz */
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
- #endif
- /* Enable PLL */
- RCC_PLLCmd(ENABLE);
- /* Wait till PLL is ready */
- while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
- {
- }
- /* Select PLL as system clock source */
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
- /* Wait till PLL is used as system clock source */
- while(RCC_GetSYSCLKSource() != 0x08)
- {
- }
- }
- else
- { /* If HSE fails to start-up, the application will have wrong clock configuration.
- User can add here some code to deal with this error */
- /* Go to infinite loop */
- while (1)
- {
- }
- }
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
資料下載:
|
-
-
STM32F103C8源工程.7z
2021-8-24 17:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
236.57 KB, 下載次數(shù): 316, 下載積分: 黑幣 -5
-
-
多功能虛擬信號(hào)分析儀.rar
2017-5-7 11:24 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.47 MB, 下載次數(shù): 223, 下載積分: 黑幣 -5
-
-
驅(qū)動(dòng).rar
2017-5-7 11:24 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
2.26 KB, 下載次數(shù): 186, 下載積分: 黑幣 -5
-
-
使用說(shuō)明書.rar
2017-5-7 11:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.06 MB, 下載次數(shù): 192, 下載積分: 黑幣 -5
-
-
學(xué)習(xí)版協(xié)議.rar
2017-5-7 11:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
113.39 KB, 下載次數(shù): 176, 下載積分: 黑幣 -5
-
-
原理圖.rar
2017-5-7 11:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
45.43 KB, 下載次數(shù): 254, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|