|
基于stm32f103測試,103存儲較少,自己寫的fft程序不適合在103上運(yùn)行,使用STM32官方的庫,可以做128點(diǎn)、256點(diǎn)的fft,運(yùn)算時(shí)間很短;運(yùn)算所需要的官方庫文件在user目錄下。
QFL%){$R0{$T8Y`0IV~NPH2.png (17.36 KB, 下載次數(shù): 79)
下載附件
2019-12-24 20:22 上傳
單片機(jī)源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "adc.h"
- #include "timer.h"
- #include "oled.h"
- #include "bmp.h"
- #include "stm32_dsp.h"
- #include "table_fft.h"
- #include "GetADValueBuffer.h"
- /*感謝大壯提供的頻率采集部分程序*/
- /*************************************************************************************************** 很重要
- //#define Fs 400 //采樣頻率,在函數(shù)中沒定義,但是出的波形和它有關(guān),具體體現(xiàn)在AD采樣頻率上,調(diào)節(jié)AD的采樣周期,
- 和采樣函數(shù)GetADValueBuffer()的delay時(shí)間,可以設(shè)置其大小。數(shù)據(jù)裝入MATLAB,橫軸為點(diǎn)數(shù),乘以頻域的分辨率即可。
- Fs=1/T;Tp=NT;Fs=NF;
- 其中:
- Fs--時(shí)域采樣頻率;
- Tp--數(shù)據(jù)時(shí)間長度;
- T--時(shí)域采樣間隔;
- N--采樣點(diǎn)數(shù);
- F--頻域采樣間隔;�。。。。�!分辨率
- PS:記得#include<math.h>,不然做sqrt時(shí)會出錯!并且編譯器不報(bào)錯�。�!
- ***************************************************************************************************/
- #define NPT 256 //fft點(diǎn)數(shù),即N
- extern u16 count;
- extern u16 pinlv;
- extern long lBufInArray[NPT]; //輸入緩沖區(qū)
- extern long lBufOutArray[NPT/2]; //輸出緩沖區(qū)
- extern long lBufMagArray[NPT/2]; //變換后緩沖區(qū)
- int main(void)
- {
- int i;
- u16 adcx;
- int gewei,shifenwei,baifenwei,qianfenwei;
- float temp;
- delay_init(); //延時(shí)函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- uart_init(115200); //串口初始化為115200
-
- Adc_Init(); //ADC初始化
-
- TIM3_Int_Init(9999,7199);//改成1s
- TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計(jì)數(shù)
-
- OLED_Init(); //初始化OLED
- OLED_Clear() ;
- while(1)
- {
- // adcx=Get_Adc_Average(ADC_Channel_1,10);
- GetADValueBuffer();
-
- // for(i=0;i<NPT;i++)
- // {
- // printf("%ld\r\n",lBufInArray[i]);
- // }
-
-
- cr4_fft_256_stm32(lBufOutArray, lBufInArray, NPT);
- GetPowerMag();
-
- // for(i=0;i<NPT/2;i++)
- // {
- // printf("%ld\r\n",lBufOutArray[i]);
- // }
-
- for(i=0;i<NPT/2;i++)
- {
- printf("%ld\r\n",lBufMagArray[i]);
- }
-
- printf("helloworld");
-
- // temp=(float)adcx*(3.3/4096);
- // temp=temp/10;
- //printf("v=%.3f A\r\n",temp);
- //printf("f:%d Hz\r\n",pinlv);//打印頻率
-
- gewei=(int)temp;
- shifenwei=(int)(temp*10);
- baifenwei=(int)(temp*100);
- qianfenwei=(int)(temp*1000);
- //
- // OLED_ShowCHinese(0,0,0);
- // OLED_ShowCHinese(18,0,1);
- // OLED_ShowCHinese(36,0,2);
- // OLED_ShowCHinese(54,0,3);
- // OLED_ShowCHinese(72,0,4);
- // OLED_ShowCHinese(90,0,5);
- // OLED_ShowCHinese(108,0,6);//中文,不得出現(xiàn)校名,注釋了
-
- OLED_ShowString(0,3,"Ipp:");
- OLED_ShowNum(46,3,gewei,1,16);
- OLED_ShowString(54,3,".");
- OLED_ShowNum(62,3,shifenwei,1,16);
- OLED_ShowNum(70,3,baifenwei,1,16);
- OLED_ShowNum(78,3,qianfenwei,1,16);
- OLED_ShowString(90,3,"A");//電流
-
- OLED_ShowString(0,6,"Fre:");
- OLED_ShowNum(46,6,pinlv,5,16);//最多5位數(shù)字
- OLED_ShowString(90,6,"Hz");
-
- LED0=!LED0;
- delay_ms(1000);
- }
- }
復(fù)制代碼
TS%R9BS{V7__UUBXY2[J{KO.png (6.66 KB, 下載次數(shù): 67)
下載附件
2019-12-24 20:22 上傳
所有資料51hei提供下載:
STM官方DSP庫測試.7z
(238.55 KB, 下載次數(shù): 145)
2019-12-24 20:29 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|