This commit is contained in:
2021-08-12 13:00:43 +02:00
parent 155b302765
commit c913f1604e
12 changed files with 1608 additions and 1325 deletions

View File

@@ -58,6 +58,8 @@ void Error_Handler(void);
/* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/
#define HALL_IN_Pin GPIO_PIN_0
#define HALL_IN_GPIO_Port GPIOA
#define DAC_DATA_Pin GPIO_PIN_1
#define DAC_DATA_GPIO_Port GPIOA
#define MEAS_VBATT_Pin GPIO_PIN_2

View File

@@ -56,6 +56,8 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void DMA2_Stream1_IRQHandler(void);
void DMA2_Stream3_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */

View File

@@ -44,8 +44,10 @@
ADC_HandleTypeDef hadc1;
I2S_HandleTypeDef hi2s4;
DMA_HandleTypeDef hdma_spi4_tx;
SD_HandleTypeDef hsd;
DMA_HandleTypeDef hdma_sdio;
SPI_HandleTypeDef hspi1;
@@ -65,6 +67,7 @@ static void MX_USART1_UART_Init(void);
static void MX_I2S4_Init(void);
static void MX_SPI1_Init(void);
static void MX_USB_OTG_FS_HCD_Init(void);
static void MX_DMA_Init(void);
static void MX_ADC1_Init(void);
/* USER CODE BEGIN PFP */
@@ -109,6 +112,7 @@ int main(void)
MX_I2S4_Init();
MX_SPI1_Init();
MX_USB_OTG_FS_HCD_Init();
MX_DMA_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
@@ -384,6 +388,25 @@ static void MX_USB_OTG_FS_HCD_Init(void)
}
/**
* Enable DMA controller clock
*/
static void MX_DMA_Init(void)
{
/* DMA controller clock enable */
__HAL_RCC_DMA2_CLK_ENABLE();
/* DMA interrupt init */
/* DMA2_Stream1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
/* DMA2_Stream3_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn);
}
/**
* @brief GPIO Initialization Function
* @param None

View File

@@ -24,6 +24,9 @@
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern DMA_HandleTypeDef hdma_spi4_tx;
extern DMA_HandleTypeDef hdma_sdio;
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN TD */
@@ -96,10 +99,10 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
__HAL_RCC_GPIOA_CLK_ENABLE();
/**ADC1 GPIO Configuration
PA0-WKUP ------> ADC1_IN0
PA2 ------> ADC1_IN2
PA3 ------> ADC1_IN3
*/
GPIO_InitStruct.Pin = MEAS_VBATT_Pin|GPIO_PIN_3;
GPIO_InitStruct.Pin = HALL_IN_Pin|MEAS_VBATT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
@@ -128,10 +131,10 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
__HAL_RCC_ADC1_CLK_DISABLE();
/**ADC1 GPIO Configuration
PA0-WKUP ------> ADC1_IN0
PA2 ------> ADC1_IN2
PA3 ------> ADC1_IN3
*/
HAL_GPIO_DeInit(GPIOA, MEAS_VBATT_Pin|GPIO_PIN_3);
HAL_GPIO_DeInit(GPIOA, HALL_IN_Pin|MEAS_VBATT_Pin);
/* USER CODE BEGIN ADC1_MspDeInit 1 */
@@ -190,6 +193,25 @@ void HAL_I2S_MspInit(I2S_HandleTypeDef* hi2s)
GPIO_InitStruct.Alternate = GPIO_AF6_SPI4;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* I2S4 DMA Init */
/* SPI4_TX Init */
hdma_spi4_tx.Instance = DMA2_Stream1;
hdma_spi4_tx.Init.Channel = DMA_CHANNEL_4;
hdma_spi4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_spi4_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi4_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_spi4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_spi4_tx.Init.Mode = DMA_CIRCULAR;
hdma_spi4_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_spi4_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_spi4_tx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(hi2s,hdmatx,hdma_spi4_tx);
/* USER CODE BEGIN SPI4_MspInit 1 */
/* USER CODE END SPI4_MspInit 1 */
@@ -222,6 +244,8 @@ void HAL_I2S_MspDeInit(I2S_HandleTypeDef* hi2s)
HAL_GPIO_DeInit(GPIOB, DAC_LRCLK_Pin|DAC_CLK_Pin);
/* I2S4 DMA DeInit */
HAL_DMA_DeInit(hi2s->hdmatx);
/* USER CODE BEGIN SPI4_MspDeInit 1 */
/* USER CODE END SPI4_MspDeInit 1 */
@@ -270,6 +294,33 @@ void HAL_SD_MspInit(SD_HandleTypeDef* hsd)
GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* SDIO DMA Init */
/* SDIO Init */
hdma_sdio.Instance = DMA2_Stream3;
hdma_sdio.Init.Channel = DMA_CHANNEL_4;
hdma_sdio.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_sdio.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_sdio.Init.MemInc = DMA_MINC_ENABLE;
hdma_sdio.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_sdio.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma_sdio.Init.Mode = DMA_PFCTRL;
hdma_sdio.Init.Priority = DMA_PRIORITY_LOW;
hdma_sdio.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
hdma_sdio.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_sdio.Init.MemBurst = DMA_MBURST_INC4;
hdma_sdio.Init.PeriphBurst = DMA_PBURST_INC4;
if (HAL_DMA_Init(&hdma_sdio) != HAL_OK)
{
Error_Handler();
}
/* Several peripheral DMA handle pointers point to the same DMA handle.
Be aware that there is only one stream to perform all the requested DMAs. */
/* Be sure to change transfer direction before calling
HAL_SD_ReadBlocks_DMA or HAL_SD_WriteBlocks_DMA. */
__HAL_LINKDMA(hsd,hdmarx,hdma_sdio);
__HAL_LINKDMA(hsd,hdmatx,hdma_sdio);
/* USER CODE BEGIN SDIO_MspInit 1 */
/* USER CODE END SDIO_MspInit 1 */
@@ -305,6 +356,9 @@ void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd)
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_15|GPIO_PIN_5|GPIO_PIN_7);
/* SDIO DMA DeInit */
HAL_DMA_DeInit(hsd->hdmarx);
HAL_DMA_DeInit(hsd->hdmatx);
/* USER CODE BEGIN SDIO_MspDeInit 1 */
/* USER CODE END SDIO_MspDeInit 1 */
@@ -409,25 +463,17 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**USART1 GPIO Configuration
PA10 ------> USART1_RX
PB6 ------> USART1_TX
PA15 ------> USART1_TX
*/
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
@@ -453,11 +499,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
/**USART1 GPIO Configuration
PA10 ------> USART1_RX
PB6 ------> USART1_TX
PA15 ------> USART1_TX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_10);
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6);
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_10|GPIO_PIN_15);
/* USER CODE BEGIN USART1_MspDeInit 1 */

View File

@@ -56,7 +56,8 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
extern DMA_HandleTypeDef hdma_spi4_tx;
extern DMA_HandleTypeDef hdma_sdio;
/* USER CODE BEGIN EV */
/* USER CODE END EV */
@@ -199,6 +200,34 @@ void SysTick_Handler(void)
/* please refer to the startup file (startup_stm32f4xx.s). */
/******************************************************************************/
/**
* @brief This function handles DMA2 stream1 global interrupt.
*/
void DMA2_Stream1_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Stream1_IRQn 0 */
/* USER CODE END DMA2_Stream1_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi4_tx);
/* USER CODE BEGIN DMA2_Stream1_IRQn 1 */
/* USER CODE END DMA2_Stream1_IRQn 1 */
}
/**
* @brief This function handles DMA2 stream3 global interrupt.
*/
void DMA2_Stream3_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Stream3_IRQn 0 */
/* USER CODE END DMA2_Stream3_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_sdio);
/* USER CODE BEGIN DMA2_Stream3_IRQn 1 */
/* USER CODE END DMA2_Stream3_IRQn 1 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

View File

@@ -5,6 +5,32 @@ ADC1.NbrOfConversionFlag=1
ADC1.Rank-0\#ChannelRegularConversion=1
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES
ADC1.master=1
Dma.Request0=SDIO
Dma.Request1=SPI4_TX
Dma.RequestsNb=2
Dma.SDIO.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.SDIO.0.FIFOMode=DMA_FIFOMODE_ENABLE
Dma.SDIO.0.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL
Dma.SDIO.0.Instance=DMA2_Stream3
Dma.SDIO.0.MemBurst=DMA_MBURST_INC4
Dma.SDIO.0.MemDataAlignment=DMA_MDATAALIGN_WORD
Dma.SDIO.0.MemInc=DMA_MINC_ENABLE
Dma.SDIO.0.Mode=DMA_PFCTRL
Dma.SDIO.0.PeriphBurst=DMA_PBURST_INC4
Dma.SDIO.0.PeriphDataAlignment=DMA_PDATAALIGN_WORD
Dma.SDIO.0.PeriphInc=DMA_PINC_DISABLE
Dma.SDIO.0.Priority=DMA_PRIORITY_LOW
Dma.SDIO.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst
Dma.SPI4_TX.1.Direction=DMA_MEMORY_TO_PERIPH
Dma.SPI4_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.SPI4_TX.1.Instance=DMA2_Stream1
Dma.SPI4_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.SPI4_TX.1.MemInc=DMA_MINC_ENABLE
Dma.SPI4_TX.1.Mode=DMA_CIRCULAR
Dma.SPI4_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.SPI4_TX.1.PeriphInc=DMA_PINC_DISABLE
Dma.SPI4_TX.1.Priority=DMA_PRIORITY_LOW
Dma.SPI4_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
FATFS.BSP.number=1
FATFS.IPParameters=USE_DMA_CODE_SD
FATFS.USE_DMA_CODE_SD=1
@@ -32,16 +58,17 @@ I2S4.VirtualMode=I2S_MODE_SLAVE
KeepUserPlacement=false
Mcu.Family=STM32F4
Mcu.IP0=ADC1
Mcu.IP1=FATFS
Mcu.IP2=I2S4
Mcu.IP3=NVIC
Mcu.IP4=RCC
Mcu.IP5=SDIO
Mcu.IP6=SPI1
Mcu.IP7=SYS
Mcu.IP8=USART1
Mcu.IP9=USB_OTG_FS
Mcu.IPNb=10
Mcu.IP1=DMA
Mcu.IP10=USB_OTG_FS
Mcu.IP2=FATFS
Mcu.IP3=I2S4
Mcu.IP4=NVIC
Mcu.IP5=RCC
Mcu.IP6=SDIO
Mcu.IP7=SPI1
Mcu.IP8=SYS
Mcu.IP9=USART1
Mcu.IPNb=11
Mcu.Name=STM32F411C(C-E)Ux
Mcu.Package=UFQFPN48
Mcu.Pin0=PH0 - OSC_IN
@@ -56,18 +83,18 @@ Mcu.Pin16=PA10
Mcu.Pin17=PA11
Mcu.Pin18=PA12
Mcu.Pin19=PA13
Mcu.Pin2=PA1
Mcu.Pin2=PA0-WKUP
Mcu.Pin20=PA14
Mcu.Pin21=PB3
Mcu.Pin22=PB4
Mcu.Pin23=PB5
Mcu.Pin24=PB6
Mcu.Pin21=PA15
Mcu.Pin22=PB3
Mcu.Pin23=PB4
Mcu.Pin24=PB5
Mcu.Pin25=PB7
Mcu.Pin26=PB9
Mcu.Pin27=VP_FATFS_VS_SDIO
Mcu.Pin28=VP_SYS_VS_Systick
Mcu.Pin3=PA2
Mcu.Pin4=PA3
Mcu.Pin3=PA1
Mcu.Pin4=PA2
Mcu.Pin5=PA4
Mcu.Pin6=PA5
Mcu.Pin7=PA6
@@ -80,6 +107,8 @@ Mcu.UserName=STM32F411CEUx
MxCube.Version=6.3.0
MxDb.Version=DB.6.0.30
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.DMA2_Stream1_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DMA2_Stream3_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
@@ -90,6 +119,9 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PA0-WKUP.GPIOParameters=GPIO_Label
PA0-WKUP.GPIO_Label=HALL_IN
PA0-WKUP.Signal=ADCx_IN0
PA1.GPIOParameters=GPIO_Label
PA1.GPIO_Label=DAC_DATA
PA1.Mode=Half_Duplex_Slave
@@ -112,10 +144,11 @@ PA14.GPIOParameters=GPIO_Label
PA14.GPIO_Label=SWCLK
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA15.Mode=Asynchronous
PA15.Signal=USART1_TX
PA2.GPIOParameters=GPIO_Label
PA2.GPIO_Label=MEAS_VBATT
PA2.Signal=ADCx_IN2
PA3.Signal=ADCx_IN3
PA4.Mode=NSS_Signal_Hard_Output
PA4.Signal=SPI1_NSS
PA5.Mode=Full_Duplex_Master
@@ -154,8 +187,6 @@ PB4.Mode=Full_Duplex_Master
PB4.Signal=SPI1_MISO
PB5.Mode=SD_4_bits_Wide_bus
PB5.Signal=SDIO_D3
PB6.Mode=Asynchronous
PB6.Signal=USART1_TX
PB7.Mode=SD_4_bits_Wide_bus
PB7.Signal=SDIO_D0
PB9.GPIOParameters=GPIO_Label
@@ -181,7 +212,7 @@ ProjectManager.FreePins=false
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x200
ProjectManager.KeepUserCode=true
ProjectManager.LastFirmware=true
ProjectManager.LastFirmware=false
ProjectManager.LibraryCopy=1
ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false
@@ -194,7 +225,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SDIO_SD_Init-SDIO-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_FATFS_Init-FATFS-false-HAL-false,6-MX_I2S4_Init-I2S4-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_USB_OTG_FS_HCD_Init-USB_OTG_FS-false-HAL-true,9-MX_ADC1_Init-ADC1-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SDIO_SD_Init-SDIO-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_FATFS_Init-FATFS-false-HAL-false,6-MX_I2S4_Init-I2S4-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_USB_OTG_FS_HCD_Init-USB_OTG_FS-false-HAL-true,9-MX_DMA_Init-DMA-false-HAL-true,10-MX_ADC1_Init-ADC1-false-HAL-true
RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=16000000
RCC.APB1Freq_Value=16000000
@@ -225,10 +256,10 @@ RCC.VCOInputFreq_Value=2000000
RCC.VCOInputMFreq_Value=1500000
RCC.VCOOutputFreq_Value=144000000
RCC.VcooutputI2S=144000000
SH.ADCx_IN0.0=ADC1_IN0,IN0
SH.ADCx_IN0.ConfNb=1
SH.ADCx_IN2.0=ADC1_IN2,IN2
SH.ADCx_IN2.ConfNb=1
SH.ADCx_IN3.0=ADC1_IN3,IN3
SH.ADCx_IN3.ConfNb=1
SPI1.CalculateBaudRate=8.0 MBits/s
SPI1.Direction=SPI_DIRECTION_2LINES
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS