рдЖрдзреБрдирд┐рдХ рдкреАрд╕реА рдореЗрдВ, рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдХрдореА рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред USB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрдЯрд┐рд▓ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ UART рдХреЗ рд▓рд┐рдП USB-COM рдПрдбрд╛рдкреНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдмрд╛рд╣рд░реА рдбрд┐рд╡рд╛рдЗрд╕ рд╕рд░рд▓ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдСрдбрд┐рдпреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреЗ рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЗрдирдкреБрдЯ рдореЗрдВ STM32VLDISCOVERY рдмреЛрд░реНрдб рд╕реЗ рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рдЗрдирдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Windows XP рдХреЗ рд╕рд╛рде рдкреАрд╕реА рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдбрд┐рдЬрд┐рдЯрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдЬрд┐рдЯрд▓-рдПрдирд╛рд▓реЙрдЧ рд╣реИред рдмреЛрд░реНрдб рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдбреАрдПрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдпрд╛рдореЛрдВ рдХреЗ 4 рдЖрдпрддрд╛рдХрд╛рд░ рджрд╛рд▓реЛрдВ рдХреЗ рдмреИрдЪреЛрдВ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд╛рдбрд╝реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рджрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рдХреЗ рдЗрдирдкреБрдЯ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреА рдКрдкрд░реА рдЖрд╡реГрддреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ - 20 рдХрд┐рд▓реЛрд╣рд░реНрдЯреНрдЬрд╝ред рдкреИрдХ рдХреА рд╢реБрд░реБрдЖрдд рджреЛрдЧреБрдиреА рдЪреМрдбрд╝рд╛рдИ рдХреА рдПрдХ рдирд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рдЕрдЧрд▓реЗ 3 рджрд╛рд▓реЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗ рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ рдирд╛рдбрд╝реА рдХреЗ рдЖрдпрд╛рдо рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реЛрддреА рд╣реИрдВред 4-рдмрд┐рдЯ рдЖрдпрд╛рдо рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рджрд░ рд▓рдЧрднрдЧ 45 kbit / s рд╣реИред
рдлрд░реНрдорд╡реЗрдпрд░ STM32VLDISCOVERY рдХреЗ рд▓рд┐рдП рдХреЛрдб:
#include "stm32f10x.h" #define DAC_DHR12RD_Address 0x40007420 #define BUF_SIZE 640 DAC_InitTypeDef DAC_InitStructure; DMA_InitTypeDef DMA_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; uint32_t DualSine12bit[BUF_SIZE], Idx = 0, Idx2 = 0, Idx3 = 0, a1,a2,a3,a4, cc; int RR; double R; void RCC_Configuration(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); } void Timebase_Configuration(void) { TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 0x120;
рдкреАрд╕реА рдЖрд╡реЗрджрди рдХреЛрдб:
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #include <fstream.h> #include <iomanip.h> #include <windows.h> #include <math.h> #include <vcl.h> #include <mmsystem.h> #include "mainF_dbl.h" #pragma hdrstop #pragma package(smart_init) #pragma resource "*.dfm" #define INP_BUFFER_SIZE 16384 #define SAMPLE_RATE 192000 TForm1 *Form1; static HWAVEIN hWaveIn = NULL; static WAVEHDR WaveHdr1, WaveHdr2; static WAVEFORMATEX waveformat ; static unsigned short Buffer1[INP_BUFFER_SIZE], Buffer2[INP_BUFFER_SIZE], saveBuffer[INP_BUFFER_SIZE]; static signed int RR, saveBuffer2[INP_BUFFER_SIZE]; static BOOL bEnding, bGraph, flag; BOOL bShutOff; long int RR_max, RR_min, LLL; int ix, iy, iz, k, kx, ky, m, kp ; void CALLBACK waveInProc1(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) { switch(uMsg) { case WIM_OPEN: break; case WIM_DATA: CopyMemory (saveBuffer, ((PWAVEHDR) dwParam1)->lpData, ((PWAVEHDR) dwParam1)->dwBytesRecorded) ; if (bEnding){ waveInReset (hWaveIn); waveInClose (hWaveIn); return; } waveInAddBuffer (hwi, (PWAVEHDR) dwParam1, sizeof (WAVEHDR)) ; // Send out a new buffer break; case WIM_CLOSE: waveInUnprepareHeader (hWaveIn, &WaveHdr1, sizeof (WAVEHDR)) ; waveInUnprepareHeader (hWaveIn, &WaveHdr2, sizeof (WAVEHDR)) ; } } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx void __fastcall TForm1::startButtonClick(TObject *Sender) { bGraph=false; } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx void __fastcall TForm1::formDestroy(TObject *Sender) { bEnding=false; } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx void __fastcall TForm1::Button1Click(TObject *Sender) { bGraph=true; } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { waveformat.wFormatTag = WAVE_FORMAT_PCM ; waveformat.nChannels = 1; //2 ; waveformat.wBitsPerSample = 16 ; waveformat.nSamplesPerSec = SAMPLE_RATE ; waveformat.nBlockAlign = waveformat.nChannels * (waveformat.wBitsPerSample / 8); waveformat.nAvgBytesPerSec = waveformat.nBlockAlign * waveformat.nSamplesPerSec; waveformat.cbSize = 0 ; if (waveInOpen (&hWaveIn, WAVE_MAPPER, &waveformat, (DWORD)waveInProc1, 0, CALLBACK_FUNCTION)){ Application->MessageBox( "000000000","Error",MB_OK ); return; } bShutOff=false; // Set up headers and prepare them WaveHdr1.lpData = (BYTE *)Buffer1 ; WaveHdr1.dwBufferLength = INP_BUFFER_SIZE*2 ; // WaveHdr1.dwBytesRecorded = 0 ; WaveHdr1.dwUser = 0 ; WaveHdr1.dwFlags = 0 ; WaveHdr1.dwLoops = 1 ; WaveHdr1.lpNext = NULL ; WaveHdr1.reserved = 0 ; waveInPrepareHeader (hWaveIn, &WaveHdr1, sizeof (WAVEHDR)) ; WaveHdr2.lpData = (BYTE *)Buffer2 ; WaveHdr2.dwBufferLength = INP_BUFFER_SIZE*2 ; // WaveHdr2.dwBytesRecorded = 0 ; WaveHdr2.dwUser = 0 ; WaveHdr2.dwFlags = 0 ; WaveHdr2.dwLoops = 1 ; WaveHdr2.lpNext = NULL ; WaveHdr2.reserved = 0 ; waveInPrepareHeader (hWaveIn, &WaveHdr2, sizeof (WAVEHDR)) ; waveInAddBuffer (hWaveIn, &WaveHdr1, sizeof (WAVEHDR)) ; waveInAddBuffer (hWaveIn, &WaveHdr2, sizeof (WAVEHDR)) ; waveInStart (hWaveIn) ; bGraph=true; bEnding = FALSE; } void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (bGraph){ kp++; if (kp>20){kp=0; Canvas->Brush->Color = Color; Canvas->FillRect(Rect(0,0,512,512));} k=0; m=0; RR_min=0; RR_max=0; kx=0; ky=0; for(int LLL=0; LLL<INP_BUFFER_SIZE; LLL++) { short)(saveBuffer[LL*2]); RR = (signed short)(saveBuffer[LLL]); if (RR > 0) { if(RR_max < RR) RR_max = RR; if((kx>6)&&(RR_min<30000)) { //&&(k==0)){ m=0; } if(RR_min < 0) { if (m==1) ix = -RR_min*16/1024; if (m==2) iy = -RR_min*16/1024; if (m==3) iz = -RR_min*4/512; } flag=false; kx=0; RR_min = 0; ky++; } if (RR < 0) { if(RR_min > RR) RR_min = RR; if (ky>6){ if (m==3) {Canvas->Brush->Color = TColor(RGB(iz, iz, iz)); Canvas->FillRect(Rect(ix,iy,ix+16,iy+16));} } if(!flag) m++; RR_max = 0; flag=true; ky=0; kx++; } } } }
рдкреНрд░рдкрддреНрд░ рдкрд░ 2 рдмрдЯрди "рд╕реНрдЯреЙрдк" рдФрд░ "рд░рди", рд╕рд╛рде рд╣реА рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ x рдФрд░ y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░ рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ 2 рджрд╛рд▓реЛрдВ рдХреЗ рдЖрдпрд╛рдо рдФрд░ 3 рдХреЗ рдЖрдпрд╛рдо рджреНрд╡рд╛рд░рд╛ рдЪрдордХ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИред рдмреЛрд░реНрдб рдЯреЗрд▓реАрдлреЛрди рддрд╛рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдкреАрд╕реА рдХреА рддрд░рдл рдореЛрдиреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЬреИрдХ рд╣реЛрддрд╛ рд╣реИ, STM32VLDISCOVERY рдкрд░ PA.04 рдкрд┐рди рдПрдХ рдПрдорд┐рдЯрд░ рдлреЙрд▓реЛрдЕрд░ (STM32VLDISCOVERY рдореЗрдВ DAC рдЖрдЙрдЯрдкреБрдЯ рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рд░реЛрдз рд╣реЛрддрд╛ рд╣реИ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдВрд╢рд╛рдВрдХрди (рдЪрд░ рдЕрд╡рд░реЛрдз) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рднрдХреНрдд рд╣реЛрддрд╛ рд╣реИред

STM32VLDISCOVERY рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рдЗрдирдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрд╕реА рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рдЯреЗрд╕реНрдЯ рдЫрд╡рд┐ (рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рд╡рд░реНрдЧреЛрдВ рдХреА рдЪрдордХ рдХреЗ рдПрдХ рдврд╛рд▓ рдХреЗ рд╕рд╛рде 32x32 рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░):
