411 lines
9.1 KiB
C
411 lines
9.1 KiB
C
|
|
/*
|
||
|
|
* Copyright (c) 2006-2024, RT-Thread Development Team
|
||
|
|
*
|
||
|
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
|
*
|
||
|
|
* Change Logs:
|
||
|
|
* Date Author Notes
|
||
|
|
* 2024-05-04 RealThread first version
|
||
|
|
*/
|
||
|
|
|
||
|
|
#include <rtthread.h>
|
||
|
|
#include <board.h>
|
||
|
|
#include <drv_common.h>
|
||
|
|
|
||
|
|
SPI_HandleTypeDef hspi3;
|
||
|
|
ADC_HandleTypeDef hadc1;
|
||
|
|
ADC_HandleTypeDef hadc2;
|
||
|
|
ADC_HandleTypeDef hadc3;
|
||
|
|
|
||
|
|
void HAL_SPI3_MspInit(void);
|
||
|
|
|
||
|
|
rt_weak void rt_hw_board_init()
|
||
|
|
{
|
||
|
|
extern void hw_board_init(char *clock_src, int32_t clock_src_freq, int32_t clock_target_freq);
|
||
|
|
|
||
|
|
/* Heap initialization */
|
||
|
|
#if defined(RT_USING_HEAP)
|
||
|
|
rt_system_heap_init((void *) HEAP_BEGIN, (void *) HEAP_END);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
hw_board_init(BSP_CLOCK_SOURCE, BSP_CLOCK_SOURCE_FREQ_MHZ, BSP_CLOCK_SYSTEM_FREQ_MHZ);
|
||
|
|
|
||
|
|
/* Set the shell console output device */
|
||
|
|
#if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE)
|
||
|
|
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/* Board underlying hardware initialization */
|
||
|
|
#ifdef RT_USING_COMPONENTS_INIT
|
||
|
|
rt_components_board_init();
|
||
|
|
#endif
|
||
|
|
HAL_SPI3_MspInit();
|
||
|
|
|
||
|
|
MX_ADC1_Init();
|
||
|
|
MX_ADC2_Init();
|
||
|
|
MX_ADC3_Init();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
void MX_SPI3_Init(void)
|
||
|
|
{
|
||
|
|
|
||
|
|
/* USER CODE BEGIN SPI3_Init 0 */
|
||
|
|
|
||
|
|
/* USER CODE END SPI3_Init 0 */
|
||
|
|
|
||
|
|
/* USER CODE BEGIN SPI3_Init 1 */
|
||
|
|
|
||
|
|
/* USER CODE END SPI3_Init 1 */
|
||
|
|
/* SPI3 parameter configuration*/
|
||
|
|
hspi3.Instance = SPI3;
|
||
|
|
hspi3.Init.Mode = SPI_MODE_MASTER;
|
||
|
|
hspi3.Init.Direction = SPI_DIRECTION_2LINES;
|
||
|
|
hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
|
||
|
|
hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||
|
|
hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||
|
|
hspi3.Init.NSS = SPI_NSS_SOFT;
|
||
|
|
hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
|
||
|
|
hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||
|
|
hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
|
||
|
|
hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||
|
|
hspi3.Init.CRCPolynomial = 10;
|
||
|
|
if (HAL_SPI_Init(&hspi3) != HAL_OK)
|
||
|
|
{
|
||
|
|
Error_Handler();
|
||
|
|
}
|
||
|
|
/* USER CODE BEGIN SPI3_Init 2 */
|
||
|
|
|
||
|
|
/* USER CODE END SPI3_Init 2 */
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
void HAL_SPI3_MspInit(void)
|
||
|
|
{
|
||
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||
|
|
|
||
|
|
/* USER CODE BEGIN SPI3_MspInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END SPI3_MspInit 0 */
|
||
|
|
/* Peripheral clock enable */
|
||
|
|
__HAL_RCC_AFIO_CLK_ENABLE();
|
||
|
|
__HAL_AFIO_REMAP_SWJ_NOJTAG(); //禁用JTAG
|
||
|
|
|
||
|
|
__HAL_RCC_SPI3_CLK_ENABLE();
|
||
|
|
|
||
|
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||
|
|
/**SPI3 GPIO Configuration
|
||
|
|
PB3 ------> SPI3_SCK
|
||
|
|
PB4 ------> SPI3_MISO
|
||
|
|
PB5 ------> SPI3_MOSI
|
||
|
|
*/
|
||
|
|
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_5;
|
||
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||
|
|
|
||
|
|
GPIO_InitStruct.Pin = GPIO_PIN_4;
|
||
|
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN SPI3_MspInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END SPI3_MspInit 1 */
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
|
||
|
|
{
|
||
|
|
if(hspi->Instance==SPI3)
|
||
|
|
{
|
||
|
|
/* USER CODE BEGIN SPI3_MspDeInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END SPI3_MspDeInit 0 */
|
||
|
|
/* Peripheral clock disable */
|
||
|
|
__HAL_RCC_SPI3_CLK_DISABLE();
|
||
|
|
|
||
|
|
/**SPI3 GPIO Configuration
|
||
|
|
PB3 ------> SPI3_SCK
|
||
|
|
PB4 ------> SPI3_MISO
|
||
|
|
PB5 ------> SPI3_MOSI
|
||
|
|
*/
|
||
|
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN SPI3_MspDeInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END SPI3_MspDeInit 1 */
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
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 = DISABLE;
|
||
|
|
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_0;
|
||
|
|
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 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC1_Init 2 */
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief ADC2 Initialization Function
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void MX_ADC2_Init(void)
|
||
|
|
{
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC2_Init 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC2_Init 0 */
|
||
|
|
|
||
|
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC2_Init 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC2_Init 1 */
|
||
|
|
|
||
|
|
/** Common config
|
||
|
|
*/
|
||
|
|
hadc2.Instance = ADC2;
|
||
|
|
hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
||
|
|
hadc2.Init.ContinuousConvMode = DISABLE;
|
||
|
|
hadc2.Init.DiscontinuousConvMode = DISABLE;
|
||
|
|
hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||
|
|
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||
|
|
hadc2.Init.NbrOfConversion = 1;
|
||
|
|
if (HAL_ADC_Init(&hadc2) != HAL_OK)
|
||
|
|
{
|
||
|
|
Error_Handler();
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Configure Regular Channel
|
||
|
|
*/
|
||
|
|
sConfig.Channel = ADC_CHANNEL_4;
|
||
|
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||
|
|
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
||
|
|
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
|
||
|
|
{
|
||
|
|
Error_Handler();
|
||
|
|
}
|
||
|
|
/* USER CODE BEGIN ADC2_Init 2 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC2_Init 2 */
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief ADC3 Initialization Function
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void MX_ADC3_Init(void)
|
||
|
|
{
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC3_Init 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC3_Init 0 */
|
||
|
|
|
||
|
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC3_Init 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC3_Init 1 */
|
||
|
|
|
||
|
|
/** Common config
|
||
|
|
*/
|
||
|
|
hadc3.Instance = ADC3;
|
||
|
|
hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
||
|
|
hadc3.Init.ContinuousConvMode = DISABLE;
|
||
|
|
hadc3.Init.DiscontinuousConvMode = DISABLE;
|
||
|
|
hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||
|
|
hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||
|
|
hadc3.Init.NbrOfConversion = 1;
|
||
|
|
if (HAL_ADC_Init(&hadc3) != HAL_OK)
|
||
|
|
{
|
||
|
|
Error_Handler();
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Configure Regular Channel
|
||
|
|
*/
|
||
|
|
sConfig.Channel = ADC_CHANNEL_11;
|
||
|
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||
|
|
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
||
|
|
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
|
||
|
|
{
|
||
|
|
Error_Handler();
|
||
|
|
}
|
||
|
|
/* USER CODE BEGIN ADC3_Init 2 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC3_Init 2 */
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
||
|
|
{
|
||
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||
|
|
if(hadc->Instance==ADC1)
|
||
|
|
{
|
||
|
|
/* USER CODE BEGIN ADC1_MspInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC1_MspInit 0 */
|
||
|
|
/* Peripheral clock enable */
|
||
|
|
__HAL_RCC_ADC1_CLK_ENABLE();
|
||
|
|
|
||
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||
|
|
/**ADC1 GPIO Configuration
|
||
|
|
PA0-WKUP ------> ADC1_IN0
|
||
|
|
*/
|
||
|
|
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
||
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC1_MspInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC1_MspInit 1 */
|
||
|
|
}
|
||
|
|
else if(hadc->Instance==ADC2)
|
||
|
|
{
|
||
|
|
/* USER CODE BEGIN ADC2_MspInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC2_MspInit 0 */
|
||
|
|
/* Peripheral clock enable */
|
||
|
|
__HAL_RCC_ADC2_CLK_ENABLE();
|
||
|
|
|
||
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||
|
|
/**ADC2 GPIO Configuration
|
||
|
|
PA4 ------> ADC2_IN4
|
||
|
|
*/
|
||
|
|
GPIO_InitStruct.Pin = GPIO_PIN_4;
|
||
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC2_MspInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC2_MspInit 1 */
|
||
|
|
}
|
||
|
|
else if(hadc->Instance==ADC3)
|
||
|
|
{
|
||
|
|
/* USER CODE BEGIN ADC3_MspInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC3_MspInit 0 */
|
||
|
|
/* Peripheral clock enable */
|
||
|
|
__HAL_RCC_ADC3_CLK_ENABLE();
|
||
|
|
|
||
|
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||
|
|
/**ADC3 GPIO Configuration
|
||
|
|
PC0 ------> ADC3_IN10
|
||
|
|
PC1 ------> ADC3_IN11
|
||
|
|
*/
|
||
|
|
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
|
||
|
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC3_MspInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC3_MspInit 1 */
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief ADC MSP De-Initialization
|
||
|
|
* This function freeze the hardware resources used in this example
|
||
|
|
* @param hadc: ADC handle pointer
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
|
||
|
|
{
|
||
|
|
if(hadc->Instance==ADC1)
|
||
|
|
{
|
||
|
|
/* USER CODE BEGIN ADC1_MspDeInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC1_MspDeInit 0 */
|
||
|
|
/* Peripheral clock disable */
|
||
|
|
__HAL_RCC_ADC1_CLK_DISABLE();
|
||
|
|
|
||
|
|
/**ADC1 GPIO Configuration
|
||
|
|
PA0-WKUP ------> ADC1_IN0
|
||
|
|
*/
|
||
|
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC1_MspDeInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC1_MspDeInit 1 */
|
||
|
|
}
|
||
|
|
else if(hadc->Instance==ADC2)
|
||
|
|
{
|
||
|
|
/* USER CODE BEGIN ADC2_MspDeInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC2_MspDeInit 0 */
|
||
|
|
/* Peripheral clock disable */
|
||
|
|
__HAL_RCC_ADC2_CLK_DISABLE();
|
||
|
|
|
||
|
|
/**ADC2 GPIO Configuration
|
||
|
|
PA4 ------> ADC2_IN4
|
||
|
|
*/
|
||
|
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC2_MspDeInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC2_MspDeInit 1 */
|
||
|
|
}
|
||
|
|
else if(hadc->Instance==ADC3)
|
||
|
|
{
|
||
|
|
/* USER CODE BEGIN ADC3_MspDeInit 0 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC3_MspDeInit 0 */
|
||
|
|
/* Peripheral clock disable */
|
||
|
|
__HAL_RCC_ADC3_CLK_DISABLE();
|
||
|
|
|
||
|
|
/**ADC3 GPIO Configuration
|
||
|
|
PC0 ------> ADC3_IN10
|
||
|
|
PC1 ------> ADC3_IN11
|
||
|
|
*/
|
||
|
|
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0|GPIO_PIN_1);
|
||
|
|
|
||
|
|
/* USER CODE BEGIN ADC3_MspDeInit 1 */
|
||
|
|
|
||
|
|
/* USER CODE END ADC3_MspDeInit 1 */
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|