- include "led.h"
- #include "key.h"
- //#include "beep.h"
- //#include "exti.h"
- //#include "time.h"
- #include "lcd.h"
- #include "adc.h"
- #include "dac.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "stm32_dsp.h"
- #include "table_fft.h"
- #include "math.h"
- #define NPT 1024 //#define PI2 6.28318530717959
- u8 Square_table[256]={ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,};
- u8 Sin_table[256]= { 128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188, 190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235, 237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255, 255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241, 240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198, 196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137, 134,131,128,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65, 62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9, 7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20, 21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88, 90,93,97,100,103,106,109,112,115,118,121,124,};
- u8 Triangle_table[256]={ 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56, 58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108, 110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150, 152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192, 194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234, 236,238,240,242,244,246,248,250,252,254,254,252,250,248,246,244,242,240,238,236,234, 232,230,228,226,224,222,220,218,216,214,212,210,208,206,204,202,200,198,196,194,192, 190,188,186,184,182,180,178,176,174,172,170,168,166,164,162,160,158,156,154,152,150, 148,146,144,142,140,138,136,134,132,130,128,126,124,122,120,118,116,114,112,110,108, 106,104,102,100,98,96,94,92,90,88,86,84,82,80,78,76,74,72,70,68,66,64,62,60,58,56, 54,52,50,48,46,44,42,40,38,36,34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,0,};
- u16 i=0;
- u32 adcx[NPT]; //洢adc
- u32 adcmax = 0; //
- u32 adcmin = 3300; //С
- u16 vpp = 0; //
- int long fftin [NPT]; //
- FFT
- int long fftout[NPT]; //FFT
- u16 t = 0; //ж3
- u16 Set_T = 1000; //TIM3
- u16 Show_T = 1; //λKHZ
- u32 F = 0; //
- u16 U = 41; //u16 V = 660; //λ660mv/div
- u16 get_v=0; //
- u16 save_v=0; //洢
- u8 flag=0; //
- u8 adc_flag=0; //λ
- u8 clear_flag=1; //Hold onλ0>Hold on
- u16 table[15] ={16,32,48,64,80,96,112,128,144,160,176,192,208,224,240};//X
- u16 h=0; //±
- u8 Wave_flag=1; //
- u16 timeSet=39; ////void lcd_huadian(u16 a,u16 b);
- void lcd_huaxian(u16 x1,u16 y1,u16 x2,u16 y2);
- void lcd_init(void);
- void clear_point(void);
- void InitBufInArray(void);
- void GetPowerMag(void);
- void EXTIX_Init(void);
- void TIM5_Init(u32 arr,u32 psc);
- void TIM3_Init(u16 arr,u16 psc);
- int main(void)
- { Stm32_Clock_Init(9); // delay_init(72); // uart_init(72,115200); //// LED_Init(); //LED
- LCD_Init(); //LCD//
- BEEP_Init(); //IO EXTIX_Init(); //ж ADC1_Init(); //ADC
- Dac1_Init(); //721M,T*T1=1000 T=10001kHZ TIM3
- TIM3_Init((Set_T-1),72-1); //(10-1,71)100kHz (1000-1,71)1kHz // TIM_Cmd(TIM3, ENABLE); TIM5_Init(timeSet,71);
- // POINT_COLOR=RED;
- LCD_ShowString(60,40,210,24,24,"Elite STM32F1 ^_^"); LCD_ShowString(82,80,200,24,24,"ini OSC TEST");
- LCD_ShowString(107,120,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(117,145,200,16,16,"By AlphaZcc");
- LCD_ShowString(137,170,200,12,12,"2021/1/3");
- delay_ms(1000);
- LCD_Clear(WHITE);
- lcd_init(); //
- while(1)
- { while(adc_flag == 0); // adc_flag=0; for(i=0;i<NPT;i++) //NPT1024maxmin
- { fftin[i] = 0; fftin[i] = adcx[i] << 16; } GetPowerMag(); adcmax=adcmax*0.80586;adcmin=adcmin*0.80586; //0.8 = 3300/4095 LCD_ShowNum(275,115,adcmax,4,16); LCD_ShowNum(275,150,adcmin,4,16); vpp=adcmax-adcmin; LCD_ShowNum(275,80,vpp,4,16); // clear_point(); // LED0=!LED0; TIM3->CR1|=0x01; //3
- adcmax = 0; adcmin = 3300; //// delay_ms(1); } }
- void lcd_init(void)
- { POINT_COLOR=RED; LCD_ShowString(15,8,200,24,24,"Mini_OSC"); LCD_ShowString(140,15,200,16,16,"INPUT:PA1"); LCD_ShowString(260,28,200,16,16,"mV/div:"); /// LCD_ShowString(260,63,200,16,16,"vpp/mv:"); /// LCD_ShowString(260,98,200,16,16,"max/mv:"); // LCD_ShowString(260,133,200,16,16,"min/mv:"); // LCD_ShowString(260,168,200,16,16,"f/Hz:"); ///Hz LCD_ShowString(260,203,200,16,16,"OSR:"); //
- POINT_COLOR=BLUE; lcd_huaxian(0,0,0,200); //4 lcd_huaxian(256,0,256,200); lcd_huaxian(0,0,256,0); lcd_huaxian(0,200,256,200); POINT_COLOR=BLUE; LCD_ShowString(291,220,120,16,16,"kHz"); LCD_ShowString(268,8,200,16,16,"WORK"); LCD_ShowNum(265,220,Show_T,3,16); //β
- LCD_ShowNum(275,45,V,4,16); //λ660mv/div}
- void clear_point(void)//{ u16 x=0,i=0;
- for(x=0;x<NPT/4 && clear_flag;x++)
- { POINT_COLOR=WHITE;
- lcd_huaxian(x ,1,x ,199); // POINT_COLOR=BLUE; lcd_huaxian(0,0,0,200); // lcd_huadian(x,100); // if(x == table[h]) //С
- { lcd_huaxian(x,1,x,3); lcd_huaxian(x,101,x,103); lcd_huaxian(x,199,x,197);
- h++;
- if(h>=16) h=0; }
- if(x==128) //
- { lcd_huaxian(x,1,x,199); for(i=20;i<200;i+=20)
- { lcd_huaxian(125,i,127,i); } }
- get_v = adcx[x]/U+(90-((adcmax-adcmin)/(2*U)));
- // lcd_huadian(x,get_v); // lcd_huaxian(x,save_v,x+1,get_v); // save_v = get_v; //洢// delay_ms(10); }}/******************************************************************:GetPowerMag():г::lBufOutArray(X)鲿(Y)(sqrt(X*X+Y*Y)*******************************************************************/
- void GetPowerMag(void)
- { u16 temp = 0; float X,Y,Mag;
- float magmax=0; unsigned short i; magmax=0;
- //cr4_fft_1024_stm32 cr4_fft_1024_stm32(fftout, fftin, NPT); for(i=1; i<NPT/2; i++)
- { X = (fftout[i] << 16) >> 16;
- Y = (fftout[i] >> 16);
- Mag = sqrt(X * X + Y * Y);
- if(Mag > magmax)
- { magmax = Mag; temp = i; } } if(Set_T==1000)
- F=(u32)((double)temp/NPT*1000 ); if(Set_T==100)
- F=(u32)((double)temp/NPT*10010 ); if(Set_T==10)
- F=(u32)((double)temp/NPT*100200);
- if(Set_T==2)
- F=(u32)((double)temp/NPT*249760); LCD_ShowNum(265,185,F,5,16); }
- void lcd_huadian(u16 a,u16 b) //廭
- { LCD_Fast_DrawPoint(a,240-b,BLUE);}
- void lcd_huaxian(u16 x1,u16 y1,u16 x2,u16 y2) //廭
- { LCD_DrawLine(x1,240-y1,x2,240-y2);}//3ж // void EXTIX_Init(void)
- { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; KEY_Init(); // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //ù //GPIOE.2 жж GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2); EXTI_InitStructure.EXTI_Line=EXTI_Line2; //KEY2 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //EXTI_InitStructEXTI //GPIOE.3 жж //KEY1 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3); EXTI_InitStructure.EXTI_Line=EXTI_Line3; EXTI_Init(&EXTI_InitStructure); //EXTI_InitStructEXTI //GPIOE.4 жж //KEY0 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4); EXTI_InitStructure.EXTI_Line=EXTI_Line4; EXTI_Init(&EXTI_InitStructure); //EXTI_InitStructEXTI //GPIOA.0 жж PA0 WK_UP GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line0; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStructure); //EXTI_InitStructEXTI NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //WK_UPж NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ж NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //KEY2ж NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ж NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //KEY1ж NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ж NVIC_Init(&NVIC_InitStructure); //NVIC_InitStructNVIC NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; //KEY0ж NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ж NVIC_Init(&NVIC_InitStructure); //NVIC_InitStructNVIC }void TIM5_Init(u32 arr,u32 psc){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//TIM4 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;// TIM_TimeBaseStructure.TIM_Period=arr;// TIM_TimeBaseStructure.TIM_Prescaler=psc;// TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure); TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);//ж TIM_Cmd(TIM5,ENABLE);//4 TIM_SetCounter(TIM5, 0); // CNT NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;//4ж NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0X00; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0X01; NVIC_Init(&NVIC_InitStructure);
- }
- void TIM3_Init(u16 arr,u16 psc)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//TIM3 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV2;// TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;// TIM_TimeBaseStructure.TIM_Period=arr;// TIM_TimeBaseStructure.TIM_Prescaler=psc;// TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//ж TIM_Cmd(TIM3,ENABLE);//3// // TIM_SetCounter(TIM3, 0); // CNT NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//4ж NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0X01; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0X00; NVIC_Init(&NVIC_InitStructure);}//6ж
- void TIM5_IRQHandler(void)
- {
- static u16 intr=0;
- if(TIM5->SR&0X0001) //ж
- { intr++; if(intr==256) intr=0;
- switch (Wave_flag)
- { case 1:Dac1_Set_Vol(Square_table[intr]*12); //DA break;
- case 2:Dac1_Set_Vol(Sin_table[intr]*12); //DA break;
- case 3:Dac1_Set_Vol(Triangle_table[intr]*12); //DA break; default : break; } }
- TIM5->SR&=~(1<<0); //жλ }//ж0
- void EXTI0_IRQHandler(void){ delay_ms(10); // if(WK_UP==1) //WK_UP { if(Wave_flag==1) Wave_flag=2;
- else if(Wave_flag==2) Wave_flag=3;
- else if(Wave_flag==3) Wave_flag=1; while(WK_UP==1); } EXTI->PR=1<<0; //LINE0жλ }//ж2void EXTI2_IRQHandler(void)
- { delay_ms(10); // if(KEY2==0) //KEY2 { if(timeSet==390) timeSet=156; //25Hz else if(timeSet==156) timeSet=78; //50Hz else if(timeSet==78) timeSet=39; //100Hz else if(timeSet==39) timeSet=26; //150Hz else if(timeSet==26) timeSet=19; //200Hz else if(timeSet==19) timeSet=390; //50Hz TIM6->ARR=timeSet; while(KEY1==1); } EXTI->PR=1<<2; //LINE2жλ }
- void TIM3_IRQHandler(void)
- {
- if(TIM3->SR&0X0001)//ж
- { adcx[t]=Get_Adc(ADC_Channel_1); //β// adcx[t]=Get_Adc_Average(ADC_CH1,3);
- //β if(adcx[t] >= adcmax) adcmax = adcx[t];// if(adcx[t] <= adcmin) adcmin = adcx[t];
- t++;
- if(t==NPT)
- { t=0; adc_flag = 1; TIM3->CR1 &= (uint16_t)(~((uint16_t)0x0001));//3 } }
- TIM3->SR&=~(1<<0);//жλ }
- //ж3
- void EXTI3_IRQHandler(void)
- { delay_ms(10); //
- if(KEY1==0) //KEY1
- { if(clear_flag == 1)
- {
- TIM3->CR1 &= (uint16_t)(~((uint16_t)0x0001));//3 clear_flag=0; LCD_ShowString(268,8,200,16,16,"STOP "); }
- else { TIM3->CR1|=0x01; //3 clear_flag=1; LCD_ShowString(268,8,200,16,16,"WORK"); }
- while(KEY1==0); }
- EXTI->PR=1<<3; //LINE3жλ }//ж4
- void EXTI4_IRQHandler(void)
- { delay_ms(10); // if(KEY0==0) //KEY0 { POINT_COLOR=BLUE; flag++; if(flag==1) { Set_T = 100; Show_T = 10; } else if(flag==2) { Set_T=10; Show_T = 100; }
- else if(flag==3) { Set_T=2; Show_T = 500; } else if(flag==4) { Set_T=1000; Show_T = 1; flag=0; } LCD_ShowNum(265,220,Show_T,3,16); TIM3->ARR=(Set_T-1); //趨 while(KEY0==0);
- }
- EXTI->PR=1<<4; //LINE4жλ }
- м
- 1 get_v = adcx[x]/U+(90-((adcmax-adcmin)/(2*U)));
- дadcд 320240
- 2DACDAC
- 3 :GetPowerMag()
- X = (fftout[i] << 16) >> 16;
- Y = (fftout[i] >> 16);
- f(Set_T==1000)
- F=(u32)((double)temp/NPT*1000 ); if(Set_T==100)
- F=(u32)((double)temp/NPT*10010 ); if(Set_T==10)
- F=(u32)((double)temp/NPT*100200); if(Set_T==2)
- F=(u32)((double)temp/NPT*249760);
复制代码 |