Skip to content

Commit e5bd288

Browse files
authored
Merge pull request #3340 from whj4674672/master
Porting for stm32h7xx spi
2 parents b159645 + f117df8 commit e5bd288

File tree

9 files changed

+229
-56
lines changed

9 files changed

+229
-56
lines changed

bsp/stm32/libraries/HAL_Drivers/drv_spi.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* 2018-11-5 SummerGift first version
99
* 2018-12-11 greedyhao Porting for stm32f7xx
1010
* 2019-01-03 zylx modify DMA initialization and spixfer function
11+
* 2020-01-15 whj4674672 Porting for stm32h7xx
1112
*/
1213

1314
#include "board.h"
@@ -147,6 +148,8 @@ static rt_err_t stm32_spi_init(struct stm32_spi *spi_drv, struct rt_spi_configur
147148

148149
#if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)
149150
SPI_APB_CLOCK = HAL_RCC_GetPCLK1Freq();
151+
#elif defined(SOC_SERIES_STM32H7)
152+
SPI_APB_CLOCK = HAL_RCC_GetSysClockFreq();
150153
#else
151154
SPI_APB_CLOCK = HAL_RCC_GetPCLK2Freq();
152155
#endif
@@ -205,6 +208,20 @@ static rt_err_t stm32_spi_init(struct stm32_spi *spi_drv, struct rt_spi_configur
205208
spi_handle->State = HAL_SPI_STATE_RESET;
206209
#if defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32F0)
207210
spi_handle->Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
211+
#elif defined(SOC_SERIES_STM32H7)
212+
spi_handle->Init.Mode = SPI_MODE_MASTER;
213+
spi_handle->Init.NSS = SPI_NSS_SOFT;
214+
spi_handle->Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
215+
spi_handle->Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
216+
spi_handle->Init.CRCPolynomial = 7;
217+
spi_handle->Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
218+
spi_handle->Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
219+
spi_handle->Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
220+
spi_handle->Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
221+
spi_handle->Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
222+
spi_handle->Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
223+
spi_handle->Init.IOSwap = SPI_IO_SWAP_DISABLE;
224+
spi_handle->Init.FifoThreshold = SPI_FIFO_THRESHOLD_08DATA;
208225
#endif
209226

210227
if (HAL_SPI_Init(spi_handle) != HAL_OK)

bsp/stm32/stm32h743-atk-apollo/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
| **片上外设** | **支持情况** | **备注** |
5252
| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...176 |
5353
| UART | 支持 | |
54-
| SPI | 暂不支持 | |
54+
| SPI | 支持 | SPI2 |
5555
| I2C | 暂不支持 | |
5656
| SDIO | 暂不支持 | |
5757
| RTC | 支持 | |

bsp/stm32/stm32h743-atk-apollo/board/CubeMX_Config/.mxproject

Lines changed: 4 additions & 4 deletions
Large diffs are not rendered by default.

bsp/stm32/stm32h743-atk-apollo/board/CubeMX_Config/CubeMX_Config.ioc

Lines changed: 70 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ KeepUserPlacement=false
2323
Mcu.Family=STM32H7
2424
Mcu.IP0=CORTEX_M7
2525
Mcu.IP1=DEBUG
26-
Mcu.IP10=SYS
27-
Mcu.IP11=USART1
26+
Mcu.IP10=SPI2
27+
Mcu.IP11=SYS
28+
Mcu.IP12=USART1
2829
Mcu.IP2=DMA2D
2930
Mcu.IP3=FMC
3031
Mcu.IP4=IWDG1
@@ -33,7 +34,7 @@ Mcu.IP6=NVIC
3334
Mcu.IP7=QUADSPI
3435
Mcu.IP8=RCC
3536
Mcu.IP9=RTC
36-
Mcu.IPNb=12
37+
Mcu.IPNb=13
3738
Mcu.Name=STM32H743IITx
3839
Mcu.Package=LQFP176
3940
Mcu.Pin0=PC13
@@ -73,53 +74,56 @@ Mcu.Pin39=PH10
7374
Mcu.Pin4=PI10
7475
Mcu.Pin40=PH11
7576
Mcu.Pin41=PH12
76-
Mcu.Pin42=PD8
77-
Mcu.Pin43=PD9
78-
Mcu.Pin44=PD10
79-
Mcu.Pin45=PD14
80-
Mcu.Pin46=PD15
81-
Mcu.Pin47=PG2
82-
Mcu.Pin48=PG4
83-
Mcu.Pin49=PG5
77+
Mcu.Pin42=PB13
78+
Mcu.Pin43=PB14
79+
Mcu.Pin44=PB15
80+
Mcu.Pin45=PD8
81+
Mcu.Pin46=PD9
82+
Mcu.Pin47=PD10
83+
Mcu.Pin48=PD14
84+
Mcu.Pin49=PD15
8485
Mcu.Pin5=PF0
85-
Mcu.Pin50=PG6
86-
Mcu.Pin51=PG7
87-
Mcu.Pin52=PG8
88-
Mcu.Pin53=PA9
89-
Mcu.Pin54=PA10
90-
Mcu.Pin55=PA13 (JTMS/SWDIO)
91-
Mcu.Pin56=PH13
92-
Mcu.Pin57=PH14
93-
Mcu.Pin58=PH15
94-
Mcu.Pin59=PI0
86+
Mcu.Pin50=PG2
87+
Mcu.Pin51=PG4
88+
Mcu.Pin52=PG5
89+
Mcu.Pin53=PG6
90+
Mcu.Pin54=PG7
91+
Mcu.Pin55=PG8
92+
Mcu.Pin56=PA9
93+
Mcu.Pin57=PA10
94+
Mcu.Pin58=PA13 (JTMS/SWDIO)
95+
Mcu.Pin59=PH13
9596
Mcu.Pin6=PF1
96-
Mcu.Pin60=PI1
97-
Mcu.Pin61=PI2
98-
Mcu.Pin62=PA14 (JTCK/SWCLK)
99-
Mcu.Pin63=PD0
100-
Mcu.Pin64=PD1
101-
Mcu.Pin65=PG11
102-
Mcu.Pin66=PG15
103-
Mcu.Pin67=PB6
104-
Mcu.Pin68=PE0
105-
Mcu.Pin69=PE1
97+
Mcu.Pin60=PH14
98+
Mcu.Pin61=PH15
99+
Mcu.Pin62=PI0
100+
Mcu.Pin63=PI1
101+
Mcu.Pin64=PI2
102+
Mcu.Pin65=PA14 (JTCK/SWCLK)
103+
Mcu.Pin66=PD0
104+
Mcu.Pin67=PD1
105+
Mcu.Pin68=PG11
106+
Mcu.Pin69=PG15
106107
Mcu.Pin7=PF2
107-
Mcu.Pin70=PI4
108-
Mcu.Pin71=PI5
109-
Mcu.Pin72=PI6
110-
Mcu.Pin73=PI7
111-
Mcu.Pin74=VP_DMA2D_VS_DMA2D
112-
Mcu.Pin75=VP_IWDG1_VS_IWDG
113-
Mcu.Pin76=VP_RTC_VS_RTC_Activate
114-
Mcu.Pin77=VP_SYS_VS_Systick
108+
Mcu.Pin70=PB6
109+
Mcu.Pin71=PE0
110+
Mcu.Pin72=PE1
111+
Mcu.Pin73=PI4
112+
Mcu.Pin74=PI5
113+
Mcu.Pin75=PI6
114+
Mcu.Pin76=PI7
115+
Mcu.Pin77=VP_DMA2D_VS_DMA2D
116+
Mcu.Pin78=VP_IWDG1_VS_IWDG
117+
Mcu.Pin79=VP_RTC_VS_RTC_Activate
115118
Mcu.Pin8=PF3
119+
Mcu.Pin80=VP_SYS_VS_Systick
116120
Mcu.Pin9=PF4
117-
Mcu.PinsNb=78
121+
Mcu.PinsNb=81
118122
Mcu.ThirdPartyNb=0
119123
Mcu.UserConstants=
120124
Mcu.UserName=STM32H743IITx
121-
MxCube.Version=5.2.1
122-
MxDb.Version=DB.5.0.21
125+
MxCube.Version=5.3.0
126+
MxDb.Version=DB.5.0.30
123127
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
124128
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false
125129
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
@@ -141,6 +145,21 @@ PA14\ (JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK
141145
PA9.Locked=true
142146
PA9.Mode=Asynchronous
143147
PA9.Signal=USART1_TX
148+
PB13.GPIOParameters=GPIO_Speed
149+
PB13.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
150+
PB13.Locked=true
151+
PB13.Mode=Full_Duplex_Master
152+
PB13.Signal=SPI2_SCK
153+
PB14.GPIOParameters=GPIO_Speed
154+
PB14.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
155+
PB14.Locked=true
156+
PB14.Mode=Full_Duplex_Master
157+
PB14.Signal=SPI2_MISO
158+
PB15.GPIOParameters=GPIO_Speed
159+
PB15.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
160+
PB15.Locked=true
161+
PB15.Mode=Full_Duplex_Master
162+
PB15.Signal=SPI2_MOSI
144163
PB2.GPIOParameters=GPIO_Speed
145164
PB2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
146165
PB2.Mode=Single Bank 1
@@ -288,10 +307,10 @@ ProjectManager.CompilerOptimize=6
288307
ProjectManager.ComputerToolchain=false
289308
ProjectManager.CoupleFile=false
290309
ProjectManager.CustomerFirmwarePackage=
291-
ProjectManager.DefaultFWLocation=false
310+
ProjectManager.DefaultFWLocation=true
292311
ProjectManager.DeletePrevious=true
293312
ProjectManager.DeviceId=STM32H743IITx
294-
ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.4.0
313+
ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.5.0
295314
ProjectManager.FreePins=false
296315
ProjectManager.HalAssertFull=false
297316
ProjectManager.HeapSize=0x200
@@ -308,7 +327,7 @@ ProjectManager.StackSize=0x400
308327
ProjectManager.TargetToolchain=MDK-ARM V5
309328
ProjectManager.ToolChainLocation=
310329
ProjectManager.UnderRoot=false
311-
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_FMC_Init-FMC-false-HAL-true,6-MX_DMA2D_Init-DMA2D-false-HAL-true,7-MX_LTDC_Init-LTDC-false-HAL-true,8-MX_RTC_Init-RTC-false-HAL-true,9-MX_IWDG1_Init-IWDG1-false-HAL-true,10-MX_QUADSPI_Init-QUADSPI-false-HAL-true
330+
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_FMC_Init-FMC-false-HAL-true,6-MX_DMA2D_Init-DMA2D-false-HAL-true,7-MX_LTDC_Init-LTDC-false-HAL-true,8-MX_RTC_Init-RTC-false-HAL-true,9-MX_IWDG1_Init-IWDG1-false-HAL-true,10-MX_QUADSPI_Init-QUADSPI-false-HAL-true,11-MX_SPI2_Init-SPI2-false-HAL-true
312331
RCC.ADCFreq_Value=50390625
313332
RCC.AHB12Freq_Value=200000000
314333
RCC.AHB4Freq_Value=200000000
@@ -466,6 +485,12 @@ SH.FMC_SDNRAS.0=FMC_SDNRAS,13b-sda1
466485
SH.FMC_SDNRAS.ConfNb=1
467486
SH.FMC_SDNWE.0=FMC_SDNWE,13b-sda1
468487
SH.FMC_SDNWE.ConfNb=1
488+
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4
489+
SPI2.CalculateBaudRate=100.0 MBits/s
490+
SPI2.Direction=SPI_DIRECTION_2LINES
491+
SPI2.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate
492+
SPI2.Mode=SPI_MODE_MASTER
493+
SPI2.VirtualType=VM_MASTER
469494
USART1.IPParameters=VirtualMode-Asynchronous
470495
USART1.VirtualMode-Asynchronous=VM_ASYNC
471496
VP_DMA2D_VS_DMA2D.Mode=DMA2D_Activate

bsp/stm32/stm32h743-atk-apollo/board/CubeMX_Config/Inc/stm32h7xx_hal_conf.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
/* #define HAL_SD_MODULE_ENABLED */
6565
/* #define HAL_MMC_MODULE_ENABLED */
6666
/* #define HAL_SPDIFRX_MODULE_ENABLED */
67-
/* #define HAL_SPI_MODULE_ENABLED */
67+
#define HAL_SPI_MODULE_ENABLED
6868
/* #define HAL_SWPMI_MODULE_ENABLED */
6969
/* #define HAL_TIM_MODULE_ENABLED */
7070
#define HAL_UART_MODULE_ENABLED
@@ -78,12 +78,12 @@
7878
/* #define HAL_DSI_MODULE_ENABLED */
7979
/* #define HAL_JPEG_MODULE_ENABLED */
8080
/* #define HAL_MDIOS_MODULE_ENABLED */
81-
/* #define HAL_EXTI_MODULE_ENABLED */
8281
#define HAL_GPIO_MODULE_ENABLED
8382
#define HAL_DMA_MODULE_ENABLED
8483
#define HAL_MDMA_MODULE_ENABLED
8584
#define HAL_RCC_MODULE_ENABLED
8685
#define HAL_FLASH_MODULE_ENABLED
86+
#define HAL_EXTI_MODULE_ENABLED
8787
#define HAL_PWR_MODULE_ENABLED
8888
#define HAL_I2C_MODULE_ENABLED
8989
#define HAL_CORTEX_MODULE_ENABLED

bsp/stm32/stm32h743-atk-apollo/board/CubeMX_Config/Src/main.c

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ QSPI_HandleTypeDef hqspi;
7373

7474
RTC_HandleTypeDef hrtc;
7575

76+
SPI_HandleTypeDef hspi2;
77+
7678
UART_HandleTypeDef huart1;
7779

7880
SDRAM_HandleTypeDef hsdram1;
@@ -91,6 +93,7 @@ static void MX_LTDC_Init(void);
9193
static void MX_RTC_Init(void);
9294
static void MX_IWDG1_Init(void);
9395
static void MX_QUADSPI_Init(void);
96+
static void MX_SPI2_Init(void);
9497
/* USER CODE BEGIN PFP */
9598

9699
/* USER CODE END PFP */
@@ -142,6 +145,7 @@ int main(void)
142145
MX_RTC_Init();
143146
MX_IWDG1_Init();
144147
MX_QUADSPI_Init();
148+
MX_SPI2_Init();
145149
/* USER CODE BEGIN 2 */
146150

147151
/* USER CODE END 2 */
@@ -221,8 +225,8 @@ void SystemClock_Config(void)
221225
Error_Handler();
222226
}
223227
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_LTDC
224-
|RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_QSPI
225-
|RCC_PERIPHCLK_FMC;
228+
|RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_SPI2
229+
|RCC_PERIPHCLK_QSPI|RCC_PERIPHCLK_FMC;
226230
PeriphClkInitStruct.PLL3.PLL3M = 5;
227231
PeriphClkInitStruct.PLL3.PLL3N = 160;
228232
PeriphClkInitStruct.PLL3.PLL3P = 2;
@@ -233,6 +237,7 @@ void SystemClock_Config(void)
233237
PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
234238
PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_D1HCLK;
235239
PeriphClkInitStruct.QspiClockSelection = RCC_QSPICLKSOURCE_D1HCLK;
240+
PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
236241
PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
237242
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
238243
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
@@ -457,6 +462,54 @@ static void MX_RTC_Init(void)
457462

458463
}
459464

465+
/**
466+
* @brief SPI2 Initialization Function
467+
* @param None
468+
* @retval None
469+
*/
470+
static void MX_SPI2_Init(void)
471+
{
472+
473+
/* USER CODE BEGIN SPI2_Init 0 */
474+
475+
/* USER CODE END SPI2_Init 0 */
476+
477+
/* USER CODE BEGIN SPI2_Init 1 */
478+
479+
/* USER CODE END SPI2_Init 1 */
480+
/* SPI2 parameter configuration*/
481+
hspi2.Instance = SPI2;
482+
hspi2.Init.Mode = SPI_MODE_MASTER;
483+
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
484+
hspi2.Init.DataSize = SPI_DATASIZE_4BIT;
485+
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
486+
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
487+
hspi2.Init.NSS = SPI_NSS_SOFT;
488+
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
489+
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
490+
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
491+
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
492+
hspi2.Init.CRCPolynomial = 0x0;
493+
hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
494+
hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
495+
hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
496+
hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
497+
hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
498+
hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
499+
hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
500+
hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
501+
hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
502+
hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;
503+
if (HAL_SPI_Init(&hspi2) != HAL_OK)
504+
{
505+
Error_Handler();
506+
}
507+
/* USER CODE BEGIN SPI2_Init 2 */
508+
509+
/* USER CODE END SPI2_Init 2 */
510+
511+
}
512+
460513
/**
461514
* @brief USART1 Initialization Function
462515
* @param None

0 commit comments

Comments
 (0)