|
|
@@ -19,13 +19,6 @@
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
|
#include "main.h"
|
|
|
#include "usb_device.h"
|
|
|
-#include "usbd_audio_if.h"
|
|
|
-
|
|
|
-#define OSA_BUF_SIZE 16
|
|
|
-
|
|
|
-int16_t adc_buffer[OSA_BUF_SIZE * AUDIO_IN_PACKET / 2] = {0};
|
|
|
-
|
|
|
-extern USBD_HandleTypeDef hUsbDeviceFS;
|
|
|
|
|
|
/* Private includes ----------------------------------------------------------*/
|
|
|
/* USER CODE BEGIN Includes */
|
|
|
@@ -48,6 +41,10 @@ extern USBD_HandleTypeDef hUsbDeviceFS;
|
|
|
/* USER CODE END PM */
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
+ADC_HandleTypeDef hadc1;
|
|
|
+DMA_HandleTypeDef hdma_adc1;
|
|
|
+
|
|
|
+TIM_HandleTypeDef htim3;
|
|
|
|
|
|
/* USER CODE BEGIN PV */
|
|
|
|
|
|
@@ -56,6 +53,9 @@ extern USBD_HandleTypeDef hUsbDeviceFS;
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
void SystemClock_Config(void);
|
|
|
static void MX_GPIO_Init(void);
|
|
|
+static void MX_DMA_Init(void);
|
|
|
+static void MX_ADC1_Init(void);
|
|
|
+static void MX_TIM3_Init(void);
|
|
|
/* USER CODE BEGIN PFP */
|
|
|
|
|
|
/* USER CODE END PFP */
|
|
|
@@ -69,12 +69,6 @@ static void MX_GPIO_Init(void);
|
|
|
* @brief The application entry point.
|
|
|
* @retval int
|
|
|
*/
|
|
|
-
|
|
|
-void ADC_to_MIC(void)
|
|
|
-{
|
|
|
- //HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, OSA_BUF_SIZE * (AUDIO_IN_PACKET / 2)); // Start ADC transfer into oversampling buffer
|
|
|
-}
|
|
|
-
|
|
|
int main(void)
|
|
|
{
|
|
|
/* USER CODE BEGIN 1 */
|
|
|
@@ -99,7 +93,10 @@ int main(void)
|
|
|
|
|
|
/* Initialize all configured peripherals */
|
|
|
MX_GPIO_Init();
|
|
|
+ MX_DMA_Init();
|
|
|
MX_USB_DEVICE_Init();
|
|
|
+ MX_ADC1_Init();
|
|
|
+ MX_TIM3_Init();
|
|
|
/* USER CODE BEGIN 2 */
|
|
|
|
|
|
/* USER CODE END 2 */
|
|
|
@@ -162,6 +159,119 @@ void SystemClock_Config(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * @brief ADC1 Initialization Function
|
|
|
+ * @param None
|
|
|
+ * @retval None
|
|
|
+ */
|
|
|
+static void MX_ADC1_Init(void)
|
|
|
+{
|
|
|
+
|
|
|
+ /* USER CODE BEGIN ADC1_Init 0 */
|
|
|
+
|
|
|
+ /* USER CODE END ADC1_Init 0 */
|
|
|
+
|
|
|
+ ADC_ChannelConfTypeDef sConfig = {0};
|
|
|
+
|
|
|
+ /* USER CODE BEGIN ADC1_Init 1 */
|
|
|
+
|
|
|
+ /* USER CODE END ADC1_Init 1 */
|
|
|
+
|
|
|
+ /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
|
|
|
+ */
|
|
|
+ hadc1.Instance = ADC1;
|
|
|
+ hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
|
|
|
+ hadc1.Init.Resolution = ADC_RESOLUTION_12B;
|
|
|
+ hadc1.Init.ScanConvMode = DISABLE;
|
|
|
+ hadc1.Init.ContinuousConvMode = DISABLE;
|
|
|
+ hadc1.Init.DiscontinuousConvMode = DISABLE;
|
|
|
+ hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
|
|
+ hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO;
|
|
|
+ hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
|
|
+ hadc1.Init.NbrOfConversion = 1;
|
|
|
+ hadc1.Init.DMAContinuousRequests = ENABLE;
|
|
|
+ hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
|
|
+ if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+
|
|
|
+ /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
|
|
|
+ */
|
|
|
+ sConfig.Channel = ADC_CHANNEL_0;
|
|
|
+ sConfig.Rank = 1;
|
|
|
+ sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
|
|
|
+ if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ /* USER CODE BEGIN ADC1_Init 2 */
|
|
|
+
|
|
|
+ /* USER CODE END ADC1_Init 2 */
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief TIM3 Initialization Function
|
|
|
+ * @param None
|
|
|
+ * @retval None
|
|
|
+ */
|
|
|
+static void MX_TIM3_Init(void)
|
|
|
+{
|
|
|
+
|
|
|
+ /* USER CODE BEGIN TIM3_Init 0 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM3_Init 0 */
|
|
|
+
|
|
|
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
|
|
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
|
|
|
+
|
|
|
+ /* USER CODE BEGIN TIM3_Init 1 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM3_Init 1 */
|
|
|
+ htim3.Instance = TIM3;
|
|
|
+ htim3.Init.Prescaler = 0;
|
|
|
+ htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
+ htim3.Init.Period = 20;
|
|
|
+ htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
|
|
+ htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
|
+ if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
|
|
+ if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
|
|
|
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
|
|
+ if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ /* USER CODE BEGIN TIM3_Init 2 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM3_Init 2 */
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Enable DMA controller clock
|
|
|
+ */
|
|
|
+static void MX_DMA_Init(void)
|
|
|
+{
|
|
|
+
|
|
|
+ /* DMA controller clock enable */
|
|
|
+ __HAL_RCC_DMA2_CLK_ENABLE();
|
|
|
+
|
|
|
+ /* DMA interrupt init */
|
|
|
+ /* DMA2_Stream0_IRQn interrupt configuration */
|
|
|
+ HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
|
|
|
+ HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @brief GPIO Initialization Function
|
|
|
* @param None
|