# sfra_f32.c使用教程 请参考博客:https://blog.zxcli.top/post/9 所需文件为: ![](./fig/所需文件.png) 变量定义以及初始化: ``` // sfra变量定义 SFRA_F32 ti_sfra; #define CONTROL_ISR_FREQUENCY ((float32_t)100 * 1000) // 100KHz #define SFRA_ISR_FREQ CONTROL_ISR_FREQUENCY #define SFRA_FREQ_START 10 // // SFRA step Multiply = 10^(1/No of steps per decade(40)) // #define SFRA_FREQ_STEP_MULTIPLY (float32_t)1.105 #define SFRA_AMPLITUDE (float32_t)0.1 #define SFRA_FREQ_LENGTH 100 float32_t plantMagVect[SFRA_FREQ_LENGTH]; float32_t plantPhaseVect[SFRA_FREQ_LENGTH]; float32_t olMagVect[SFRA_FREQ_LENGTH]; float32_t olPhaseVect[SFRA_FREQ_LENGTH]; float32_t clMagVect[SFRA_FREQ_LENGTH]; float32_t clPhaseVect[SFRA_FREQ_LENGTH]; float32_t freqVect[SFRA_FREQ_LENGTH]; // 通信串口,LED #define SFRA_GUI_SCI_BASE SCIA_BASE #define SFRA_GUI_VBUS_CLK DEVICE_LSPCLK_FREQ #define SFRA_GUI_SCI_BAUDRATE 115200 #define SFRA_GUI_SCIRX_GPIO 43 #define SFRA_GUI_SCITX_GPIO 42 #define SFRA_GUI_SCIRX_GPIO_PIN_CONFIG GPIO_43_SCIRXDA #define SFRA_GUI_SCITX_GPIO_PIN_CONFIG GPIO_42_SCITXDA #define SFRA_GUI_LED_INDICATOR 1 #define SFRA_GUI_LED_GPIO 31 #define SFRA_GUI_LED_GPIO_PIN_CONFIG GPIO_31_GPIO31 void sfra_init() { SFRA_F32_reset(&ti_sfra); SFRA_F32_config(&ti_sfra, SFRA_ISR_FREQ, SFRA_AMPLITUDE, SFRA_FREQ_LENGTH, SFRA_FREQ_START, SFRA_FREQ_STEP_MULTIPLY, plantMagVect, plantPhaseVect, olMagVect, olPhaseVect, clMagVect, clPhaseVect, freqVect, 1); SFRA_F32_resetFreqRespArray(&ti_sfra); SFRA_F32_initFreqArrayWithLogSteps(&ti_sfra, SFRA_FREQ_START, SFRA_FREQ_STEP_MULTIPLY); SFRA_GUI_config(SFRA_GUI_SCI_BASE, SFRA_GUI_VBUS_CLK, SFRA_GUI_SCI_BAUDRATE, SFRA_GUI_SCIRX_GPIO, SFRA_GUI_SCIRX_GPIO_PIN_CONFIG, SFRA_GUI_SCITX_GPIO, SFRA_GUI_SCITX_GPIO_PIN_CONFIG, SFRA_GUI_LED_INDICATOR, SFRA_GUI_LED_GPIO, SFRA_GUI_LED_GPIO_PIN_CONFIG, &ti_sfra, SFRA_GUI_PLOT_GH_CL); } ``` 后台任务: ``` void sfra_task_run() { SFRA_F32_runBackgroundTask(&ti_sfra); SFRA_GUI_runSerialHostComms(&ti_sfra); } ``` 数据收集: ``` __interrupt void TIMER0_ISR() { static float32_t input_dc = 0.8f; float32_t plant_input; float32_t plant_output; plant_input = SFRA_F32_inject(input_dc); // 直通,用于测试SFRA,plant扫描结果应为0°,0db // plant_output = plant_input; // 注入扫描lowpass plant_output = LowPassFilter_Run(&lowPass_test, plant_input); SFRA_F32_collect(&plant_input, &plant_output); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1); } ``` # 28379d_test_SFRA 该工程为文章中SFRA和LIBSFRA节所使用的工程。 CCS版本为20.5 C2000Ware版本为6.0.1.00 Build Configurations请选择为CPU1_FLASH 通过更改sfra_test.c中的SFRA_TYPE宏,即可指定使用SFRA、LIBSFRA和兼容上位机的LIBSFAR中的一个。 ![](./fig/SFRA_TYPE.png) 当SFRA_TYPE为TI_SFRA时,请将`libsfra_ti_hal.c`排除编译。 ![](./fig/排除编译.png) 当SFRA_TYPE为LIBSFRA_HAL_TI时,请将`sfra_f32_tmu_eabi.lib`排除编译。 ![](./fig/排除编译1.png) # 28379d_P_SFRA 该工程为使用`sfra_f32.c`的工程。 CCS版本为20.5 C2000Ware版本为6.0.1.00 Build Configurations请选择为CPU1_FLASH