|
@@ -39,9 +39,16 @@
|
|
|
/* USER CODE END PM */
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
+ADC_HandleTypeDef hadc1;
|
|
|
+DMA_HandleTypeDef hdma_adc1;
|
|
|
+
|
|
|
UART_HandleTypeDef huart2;
|
|
|
|
|
|
/* USER CODE BEGIN PV */
|
|
|
+#define ADC_SAMPLES 15
|
|
|
+uint32_t adcData[ADC_SAMPLES];
|
|
|
+
|
|
|
+uint32_t adcCounter = 0;
|
|
|
|
|
|
/* USER CODE END PV */
|
|
|
|
|
@@ -49,12 +56,25 @@ UART_HandleTypeDef huart2;
|
|
|
void SystemClock_Config(void);
|
|
|
static void MX_GPIO_Init(void);
|
|
|
static void MX_USART2_UART_Init(void);
|
|
|
+static void MX_DMA_Init(void);
|
|
|
+static void MX_ADC1_Init(void);
|
|
|
+static void MX_NVIC_Init(void);
|
|
|
/* USER CODE BEGIN PFP */
|
|
|
|
|
|
/* USER CODE END PFP */
|
|
|
|
|
|
/* Private user code ---------------------------------------------------------*/
|
|
|
/* USER CODE BEGIN 0 */
|
|
|
+void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
|
|
|
+{
|
|
|
+ // Conversion Complete & DMA Transfer Complete As Well
|
|
|
+ // So The AD_RES Is Now Updated & Let's Move IT To The PWM CCR1
|
|
|
+ // Update The PWM Duty Cycle With Latest ADC Conversion Result
|
|
|
+ //TIM2->CCR1 = (AD_RES<<4);
|
|
|
+ //HAL_GPIO_TogglePin (GPIOC, GPIO_PIN_13);
|
|
|
+ adcCounter++;
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
/* USER CODE END 0 */
|
|
|
|
|
@@ -87,8 +107,27 @@ int main(void)
|
|
|
/* Initialize all configured peripherals */
|
|
|
MX_GPIO_Init();
|
|
|
MX_USART2_UART_Init();
|
|
|
+ MX_DMA_Init();
|
|
|
+ MX_ADC1_Init();
|
|
|
+
|
|
|
+ /* Initialize interrupts */
|
|
|
+ MX_NVIC_Init();
|
|
|
/* USER CODE BEGIN 2 */
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ // Enable the ADC-interrupts and start cont-conversion.
|
|
|
+ /*ADC1->SR = 0;
|
|
|
+ ADC1->CR2 = (ADC_CR2_ADON | ADC_CR2_CONT);
|
|
|
+ ADC1->CR1 = ADC_IT_EOC;
|
|
|
+ ADC1->CR2 |= ADC_CR2_SWSTART;*/
|
|
|
+
|
|
|
+ //HAL_ADC_Start(&hadc1);
|
|
|
+
|
|
|
+
|
|
|
+ //HAL_ADC_Start_IT(&hadc1);
|
|
|
+
|
|
|
+
|
|
|
/* USER CODE END 2 */
|
|
|
|
|
|
/* Infinite loop */
|
|
@@ -99,7 +138,9 @@ int main(void)
|
|
|
|
|
|
/* USER CODE BEGIN 3 */
|
|
|
HAL_GPIO_TogglePin (GPIOC, GPIO_PIN_13);
|
|
|
- HAL_Delay (500); /* Insert delay 100 ms */
|
|
|
+ HAL_ADC_Start_DMA(&hadc1, adcData, ADC_SAMPLES);
|
|
|
+ //
|
|
|
+ HAL_Delay (1000);
|
|
|
}
|
|
|
/* USER CODE END 3 */
|
|
|
}
|
|
@@ -112,14 +153,18 @@ void SystemClock_Config(void)
|
|
|
{
|
|
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
|
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
|
|
+ RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
|
|
|
|
|
/** Initializes the RCC Oscillators according to the specified parameters
|
|
|
* in the RCC_OscInitTypeDef structure.
|
|
|
*/
|
|
|
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
|
|
|
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
|
|
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
|
|
+ RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
|
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
|
|
- RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
|
|
|
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
|
|
|
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
|
|
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
|
|
+ RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL7;
|
|
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
|
|
{
|
|
|
Error_Handler();
|
|
@@ -128,17 +173,85 @@ void SystemClock_Config(void)
|
|
|
*/
|
|
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
|
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
|
|
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
|
|
|
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
|
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
|
|
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
|
|
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
|
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
|
|
|
|
|
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
|
|
|
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
|
|
|
+ PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV8;
|
|
|
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
|
|
{
|
|
|
Error_Handler();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * @brief NVIC Configuration.
|
|
|
+ * @retval None
|
|
|
+ */
|
|
|
+static void MX_NVIC_Init(void)
|
|
|
+{
|
|
|
+ /* DMA1_Channel1_IRQn interrupt configuration */
|
|
|
+ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
|
|
|
+ HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @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 */
|
|
|
+ /** Common config
|
|
|
+ */
|
|
|
+ hadc1.Instance = ADC1;
|
|
|
+ hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
|
|
+ hadc1.Init.ContinuousConvMode = ENABLE;
|
|
|
+ hadc1.Init.DiscontinuousConvMode = DISABLE;
|
|
|
+ hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
|
|
+ hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
|
|
+ hadc1.Init.NbrOfConversion = 1;
|
|
|
+ if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ /** Configure Regular Channel
|
|
|
+ */
|
|
|
+ sConfig.Channel = ADC_CHANNEL_5;
|
|
|
+ sConfig.Rank = ADC_REGULAR_RANK_1;
|
|
|
+ sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
|
|
+ if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ /* USER CODE BEGIN ADC1_Init 2 */
|
|
|
+ HAL_ADCEx_Calibration_Start(&hadc1);
|
|
|
+
|
|
|
+/* Tconv = Sampling time + 12.5 cycles
|
|
|
+ Example:
|
|
|
+ With an ADCCLK = 14 MHz and a sampling time of 1.5 cycles: Tconv = 1.5 + 12.5 = 14 cycles = 1 μs
|
|
|
+ */
|
|
|
+
|
|
|
+ /* USER CODE END ADC1_Init 2 */
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @brief USART2 Initialization Function
|
|
|
* @param None
|
|
@@ -155,7 +268,7 @@ static void MX_USART2_UART_Init(void)
|
|
|
|
|
|
/* USER CODE END USART2_Init 1 */
|
|
|
huart2.Instance = USART2;
|
|
|
- huart2.Init.BaudRate = 115200;
|
|
|
+ huart2.Init.BaudRate = 38400;
|
|
|
huart2.Init.WordLength = UART_WORDLENGTH_8B;
|
|
|
huart2.Init.StopBits = UART_STOPBITS_1;
|
|
|
huart2.Init.Parity = UART_PARITY_NONE;
|
|
@@ -172,6 +285,17 @@ static void MX_USART2_UART_Init(void)
|
|
|
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Enable DMA controller clock
|
|
|
+ */
|
|
|
+static void MX_DMA_Init(void)
|
|
|
+{
|
|
|
+
|
|
|
+ /* DMA controller clock enable */
|
|
|
+ __HAL_RCC_DMA1_CLK_ENABLE();
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @brief GPIO Initialization Function
|
|
|
* @param None
|
|
@@ -183,6 +307,7 @@ static void MX_GPIO_Init(void)
|
|
|
|
|
|
/* GPIO Ports Clock Enable */
|
|
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
|
+ __HAL_RCC_GPIOD_CLK_ENABLE();
|
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
|
|
|
|
/*Configure GPIO pin Output Level */
|