/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2023 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "AD9851.h" #include "Si5351A-RevB-Registers.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ #define NS 1000 #define FULL_BUF_SIZE 256 #define HALF_BUF_SIZE FULL_BUF_SIZE / 2 /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc2; DMA_HandleTypeDef hdma_adc1; DMA_HandleTypeDef hdma_adc2; DAC_HandleTypeDef hdac1; DMA_HandleTypeDef hdma_dac1_ch2; I2C_HandleTypeDef hi2c1; UART_HandleTypeDef huart1; /* USER CODE BEGIN PV */ volatile uint32_t adc_val[FULL_BUF_SIZE]; volatile uint32_t dac_val[FULL_BUF_SIZE]; uint32_t* in_buf_ptr; uint32_t* out_buf_ptr; uint32_t out_out_ptr = 0; int flag = 0; /* FIR filter designed with http://t-filter.appspot.com sampling frequency: 200000 Hz * 0 Hz - 16000 Hz gain = 1 desired ripple = 5 dB actual ripple = 0 dB */ #define FILTER_TAP_NUM 5 static double filter_taps[FILTER_TAP_NUM] = { -4.4408920985006264e-17, 4.4408920985006264e-17, 1, 4.4408920985006264e-17, -4.4408920985006264e-17 }; float afilter_taps[FILTER_TAP_NUM]; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); void PeriphCommonClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_Init(void); static void MX_ADC2_Init(void); static void MX_DAC1_Init(void); static void MX_I2C1_Init(void); static void MX_ADC1_Init(void); static void MX_USART1_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ uint32_t fir(uint32_t in); void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) { //first half of adc buffer is full in_buf_ptr = &adc_val[0]; out_buf_ptr = &dac_val[HALF_BUF_SIZE];// + HALF_BUF_SIZE; for (int i=0;i