1 year ago

#286306

test-img

Daniel Nuñez

Why variables are not stored as zero in stm32cubeid?

samples different from 0 I am working with the stm32cubeid platform and the stm32f407ve development board, I am trying to sample a sinusoidal signal that I generate in the same compiler and apply the fast fourier transform functions. When displaying the variables after applying the fft the spaces that They should have a 0 stored, according to the code, negative or positive values close to 0 appear, this does not affect the operation of the code, but I do not understand why this happens.This is all I have written in the generated code generated with the stm32cubeid.

#include "main.h"
#include "arm_math.h"
#include "arm_const_structs.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
#define Fs 4096;
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;

/* USER CODE BEGIN PV */

#define SIGNAL_BUFFER_LENGTH 4096
float signalBuffer[2*SIGNAL_BUFFER_LENGTH];
float fftBuffer[2*SIGNAL_BUFFER_LENGTH];
float magnitudes[SIGNAL_BUFFER_LENGTH];


/* USER CODE END PV */
uint32_t k;
uint32_t cont1,cont2;

uint32_t start;
uint32_t stopi;
uint32_t delta;

float32_t maxValue;             /* Max FFT value is stored here */
uint32_t maxIndex;
float frecuencia=10.0;
float32_t Ts;
float tiempo;
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
#define ARM_CM_DEMCR (*(uint32_t*)0xE000EDFC)
#define ARM_CM_DWT_CTRL (*(uint32_t*)0xE0001000)
#define ARM_CM_DWT_CYCCNT (*(uint32_t*)0xE0001004)

  if(ARM_CM_DWT_CTRL !=0){

      ARM_CM_DEMCR  |= 1<<24;
      ARM_CM_DWT_CYCCNT =0;
      ARM_CM_DWT_CTRL  |= 1<<0;


  }

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
  Ts=1.0/(float)Fs;

  for(k=0;k<2*SIGNAL_BUFFER_LENGTH;k+=2 )
  {
      signalBuffer[k]=10*(float)sin(2*PI*k/2*Ts*frecuencia);
      signalBuffer[k+1]=0;

  }

  //k++;
  start= ARM_CM_DWT_CYCCNT;
  arm_cfft_f32(&arm_cfft_sR_f32_len4096,signalBuffer,0,1);
  arm_cmplx_mag_f32(signalBuffer,magnitudes,4096);
  arm_max_f32(magnitudes, 4096, &maxValue, &maxIndex);
  stopi = ARM_CM_DWT_CYCCNT;
  delta=stopi-start;

  tiempo=delta/8.0E07*1000.0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

c

debugging

stm32cubeide

cmsis

0 Answers

Your Answer

Accepted video resources