簡易示波器 stm32f4單片機源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "lcd.h"
- #include "display.h"
- #include "adc.h"
- #include "dma.h"
- #include "Key.h"
- #include "timer.h"
- #include "control.h"
- #include "dac.h"
- u16 buffer[4096]; //緩存區
- u8 pause = 0;
- extern uint32_t TIM5CH1_CAPTURE_VAL; //輸入捕獲值
- extern u8 count_Update;
- extern u16 peakValue;
- extern u16 valleyValue;
- extern u16 points[250];
- extern u8 graphIndex;
- IsSuitable_Type isSuit;
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
- delay_init(168);
- uart_init(9600);
- display_Init();
- DMA_ADCToMemory_Init((u32)buffer,4096);
- Adc_Init();
- Key_Init();
- Control_Init();
- TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1); //以1Mhz的頻率計數
-
-
-
- while(1)
- {
- ADC_DMACmd(ADC1,DISABLE);
- DMA_Cmd(DMA2_Stream0, DISABLE);
- if(count_Update) //成功捕獲到了一次高電平
- {
- float temp = 80000 / (float)TIM5CH1_CAPTURE_VAL;
- display_Frequence(temp);
- count_Update = 0; //開啟下一次捕獲
- }
- if(!pause)
- {
- while(!DMA_GetCurrDataCounter(DMA2_Stream0));
- display_DrawWave(buffer,4096);
- if(graphIndex == 250)
- {
- display_DrawWavePoint();
- graphIndex = 0;
- }
- DMA_ClearFlag(DMA2_Stream0,DMA_FLAG_TEIF0);
- DMA_ClearFlag(DMA2_Stream0,DMA_FLAG_TCIF0);
- DMA_Cmd(DMA2_Stream0,ENABLE);
- ADC_ClearFlag(ADC1,ADC_FLAG_OVR);
- ADC_DMACmd(ADC1,ENABLE);
- ADC_SoftwareStartConv(ADC1);
- delay_ms(10);
- }
- IsSuitable_Type isSuit = Control_NeedToAdjust(peakValue,valleyValue);
- if(isSuit!= OK)//
- {
- if(isSuit == Large)
- Control_DecInput();
- else if(isSuit == Small)
- Control_IncInput();
- }
- }
- }
復制代碼
所有資料51hei提供下載:
stm32Scope_Trainning-master.zip
(670.93 KB, 下載次數: 50)
2018-5-14 21:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|