資源簡介
PA4輸入進行電流檢測
代碼片段和文件信息
#include?“sys.h“
#include?“delay.h“??
#include?“usart.h“??
#include?“led.h“
#include?“key.h“
#include?“lcd.h“
#include?“timer.h“?
#include?“math.h“?
#include?“arm_math.h“??
#include?“adc.h“
#include?“string.h“
#include?“adc_dma.h“
#include?“stdio.h“
#include?“exti.h“
//ALIENTEK?探索者STM32F407開發板?實驗47_2
//DSP?FFT測試實驗???-庫函數版本
//技術支持:www.openedv.com
//淘寶店鋪:http://eboard.taobao.com??
//廣州市星翼電子科技有限公司??
//作者:正點原子?@ALIENTEK
//ADC采樣定義
extern?u16?adc_buf[4096];
extern?u16?flag;
float?adc_bufmoni[4096];???//用于保存轉換計算后的電壓值
float?adc_bufmoni1[4096];???//用于保存轉換計算后的電壓值
struct?paixu?shuju[4096];
//FFT定義
#define?FFT_LENGTH 4096 //FFT長度,默認是1024點FFT
float?fft_inputbuf[FFT_LENGTH*2]; //FFT輸入數組
float?fft_outputbuf[FFT_LENGTH]; //FFT輸出數組
float?max;
float?min;
float?sub;
u8?timeout;//定時器溢出次數
u8?DISP[20];
int?main(void)
{?
??arm_cfft_radix4_instance_f32?scfft;
? u8?t=0;
u8?buf[50];?
u16?i;?
?//??int?j;
float?time;
??float?H_1;
float?H_i;
?//?float?maxmin[5];
?//?float?aver;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(168);??//初始化延時函數
uart_init(115200); //初始化串口波特率為115200
LED_Init(); //初始化LED?
? LCD_Init();?????????//初始化LCD接口
??Rheostat_Init();//ADCDMA
??ADCInit_Timer();?//ADCTIMER
??TIM2_Int_Init(6553584-1); //1Mhz計數頻率最大計時65ms左右超出
??EXTIX_Init();
POINT_COLOR=RED;?
LCD_ShowString(150151503024“FFT?Analysis“);
LCD_ShowString(0402001616“_______________________________________________________________________________________________________________“);
POINT_COLOR=BLACK;//設置字體為藍色
LCD_ShowString(10802001624“Hrmc“);
LCD_ShowString(100802001624“Frequecy“);
LCD_ShowString(310802001624“Amplitude“); //先在固定位置顯示小數點
//LCD_ShowString(350151007024“sinsinsi“);
while(1)
{?
??//將ADC輸入數組
for(i=0;i<4096;i++)
{
adc_bufmoni[i]?=?(float)adc_buf[i]/4096*(float)3.3;
adc_bufmoni1[i]?=?(float)adc_buf[i]/4096*(float)3.3;
}
delay_ms(150);
???????????????//FFT運算主程序
???
POINT_COLOR=RED;?
LCD_ShowString(107702001624“FFT?runtime:“);//顯示FFT執行時間
POINT_COLOR=BLUE; //設置字體為藍色???
??arm_cfft_radix4_init_f32(&scfftFFT_LENGTH01);//初始化scfft結構體,設定FFT相關參
for(i=0;i {
?fft_inputbuf[2*i]=adc_bufmoni[i];
?fft_inputbuf[2*i+1]=0;//虛部全部為0
}
TIM_SetCounter(TIM20);//重設TIM3定時器的計數器值
timeout=0;
arm_cfft_radix4_f32(&scfftfft_inputbuf); //FFT計算(基4)
time=TIM_GetCounter(TIM2)+(u32)timeout*65536;? //計算所用時間
sprintf((char*)buf“%0.3fms\r\n“time/1000);
LCD_ShowString(100+12*8770808024buf); //顯示運行時間
arm_cmplx_mag_f32(fft_inputbuffft_outputbufFFT_LENGTH); //把運算結果復數求模得幅值?
//FFT運算主程序結束
//存入結構體
for(i=0;i<2048;i++)
{
shuju[i].num=i;
shuju[i].am=fft_outputbuf[i];
評論
共有 條評論