Skip to content

Commit 0d3a22a

Browse files
FoniksFoxjorgesg82
andauthored
Feat/spi+dma (#68)
* fix(HardFault): Fix incorrect usage of pointer * feat(spi+dma): Remove spi and some dma things from runes, etc. * fix(spi): declare SPI3 DMA handles in MSP * fix(HardFault): Fix incorrect usage of pointer * feat(spi+dma): Remove spi and some dma things from runes, etc. --------- Co-authored-by: Jorge Sáez <jorgeesg82@gmail.com> Co-authored-by: Jorge Sáez <125664643+jorgesg82@users.noreply.github.com>
1 parent 9fde208 commit 0d3a22a

3 files changed

Lines changed: 17 additions & 292 deletions

File tree

Core/Src/Runes/Runes.cpp

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
DMA_HandleTypeDef hdma_adc1;
44
DMA_HandleTypeDef hdma_adc2;
55
DMA_HandleTypeDef hdma_adc3;
6-
DMA_HandleTypeDef hdma_spi3_rx;
7-
DMA_HandleTypeDef hdma_spi3_tx;
86
DMA_HandleTypeDef hdma_i2c2_rx;
97
DMA_HandleTypeDef hdma_i2c2_tx;
108
DMA_HandleTypeDef hdma_fmac_preload;
@@ -33,7 +31,6 @@ extern TIM_HandleTypeDef htim24;
3331
UART_HandleTypeDef huart1;
3432
UART_HandleTypeDef huart2;
3533
UART_HandleTypeDef huart3;
36-
SPI_HandleTypeDef hspi3;
3734
FDCAN_HandleTypeDef hfdcan1;
3835
FMAC_HandleTypeDef hfmac;
3936

@@ -67,29 +64,6 @@ unordered_map<FDCAN_HandleTypeDef*, FDCAN::Instance*> FDCAN::handle_to_fdcan = {
6764

6865
#endif
6966

70-
/************************************************
71-
* Communication-SPI
72-
***********************************************/
73-
#ifdef HAL_SPI_MODULE_ENABLED
74-
75-
SPI::Instance SPI::instance3 = {
76-
.SCK = &PC10,
77-
.MOSI = &PC12,
78-
.MISO = &PC11,
79-
.SS = &PD3,
80-
.hspi = &hspi3,
81-
.instance = SPI3,
82-
.hdma_tx = DMA::Stream::DMA1Stream5,
83-
.hdma_rx = DMA::Stream::DMA1Stream6,
84-
.baud_rate_prescaler = SPI_BAUDRATEPRESCALER_256,
85-
.mode = SPI_MODE_MASTER,
86-
.use_DMA = false
87-
};
88-
89-
SPI::Peripheral SPI::spi3 = SPI::Peripheral::peripheral3;
90-
91-
unordered_map<SPI::Peripheral, SPI::Instance*> SPI::available_spi = {{SPI::spi3, &SPI::instance3}};
92-
#endif
9367
/************************************************
9468
* Communication-UART
9569
***********************************************/
@@ -225,30 +199,16 @@ vector<uint32_t> channels1 = {};
225199
vector<uint32_t> channels2 = {};
226200
vector<uint32_t> channels3 = {};
227201

228-
ADC::InitData init_data1(
229-
ADC1,
230-
ADC_RESOLUTION_16B,
231-
ADC_EXTERNALTRIG_LPTIM1_OUT,
232-
channels1,
233-
DMA::Stream::DMA1Stream0,
234-
"ADC 1"
235-
);
236-
ADC::InitData init_data2(
237-
ADC2,
238-
ADC_RESOLUTION_16B,
239-
ADC_EXTERNALTRIG_LPTIM2_OUT,
240-
channels2,
241-
DMA::Stream::DMA1Stream1,
242-
"ADC 2"
243-
);
244-
ADC::InitData init_data3(
245-
ADC3,
246-
ADC_RESOLUTION_12B,
247-
ADC_EXTERNALTRIG_LPTIM3_OUT,
248-
channels3,
249-
DMA::Stream::DMA1Stream2,
250-
"ADC 3"
251-
);
202+
ST_LIB::DMA_Domain::Instance dma_adc1 = {hdma_adc1};
203+
ST_LIB::DMA_Domain::Instance dma_adc2 = {hdma_adc2};
204+
ST_LIB::DMA_Domain::Instance dma_adc3 = {hdma_adc3};
205+
206+
ADC::InitData init_data1(ADC1, ADC_RESOLUTION_16B, ADC_EXTERNALTRIG_LPTIM1_OUT,
207+
channels1, &dma_adc1, "ADC 1");
208+
ADC::InitData init_data2(ADC2, ADC_RESOLUTION_16B, ADC_EXTERNALTRIG_LPTIM2_OUT,
209+
channels2, &dma_adc2, "ADC 2");
210+
ADC::InitData init_data3(ADC3, ADC_RESOLUTION_12B, ADC_EXTERNALTRIG_LPTIM3_OUT,
211+
channels3, &dma_adc3, "ADC 3");
252212

253213
ADC::Peripheral ADC::peripherals[3] = {
254214
ADC::Peripheral(&hadc1, lptim1, init_data1),

Core/Src/stm32h7xx_hal_msp.c

Lines changed: 5 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ extern DMA_HandleTypeDef hdma_fmac_preload;
3131
extern DMA_HandleTypeDef hdma_fmac_read;
3232
extern DMA_HandleTypeDef hdma_fmac_write;
3333

34-
extern DMA_HandleTypeDef hdma_spi3_rx;
35-
36-
extern DMA_HandleTypeDef hdma_spi3_tx;
37-
3834
/* Private typedef -----------------------------------------------------------*/
3935
/* USER CODE BEGIN TD */
4036

@@ -644,125 +640,10 @@ void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) {
644640
}
645641
}
646642

647-
/**
648-
* @brief SPI MSP Initialization
649-
* This function configures the hardware resources used in this example
650-
* @param hspi: SPI handle pointer
651-
* @retval None
652-
*/
653-
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) {
654-
GPIO_InitTypeDef GPIO_InitStruct = {0};
655-
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
656-
if (hspi->Instance == SPI3) {
657-
/* USER CODE BEGIN SPI3_MspInit 0 */
658-
659-
/* USER CODE END SPI3_MspInit 0 */
660-
661-
/** Initializes the peripherals clock
662-
*/
663-
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3;
664-
PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
665-
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
666-
Error_Handler();
667-
}
668-
669-
/* Peripheral clock enable */
670-
__HAL_RCC_SPI3_CLK_ENABLE();
671-
672-
__HAL_RCC_GPIOC_CLK_ENABLE();
673-
/**SPI3 GPIO Configuration
674-
PC10 ------> SPI3_SCK
675-
PC11 ------> SPI3_MISO
676-
PC12 ------> SPI3_MOSI
677-
*/
678-
GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
679-
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
680-
GPIO_InitStruct.Pull = GPIO_NOPULL;
681-
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
682-
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
683-
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
684-
685-
/* SPI3 DMA Init */
686-
/* SPI3_RX Init */
687-
hdma_spi3_rx.Instance = DMA1_Stream5;
688-
hdma_spi3_rx.Init.Request = DMA_REQUEST_SPI3_RX;
689-
hdma_spi3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
690-
hdma_spi3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
691-
hdma_spi3_rx.Init.MemInc = DMA_MINC_ENABLE;
692-
hdma_spi3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
693-
hdma_spi3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
694-
hdma_spi3_rx.Init.Mode = DMA_NORMAL;
695-
hdma_spi3_rx.Init.Priority = DMA_PRIORITY_LOW;
696-
hdma_spi3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
697-
hdma_spi3_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
698-
if (HAL_DMA_Init(&hdma_spi3_rx) != HAL_OK) {
699-
Error_Handler();
700-
}
701-
702-
__HAL_LINKDMA(hspi, hdmarx, hdma_spi3_rx);
703-
704-
/* SPI3_TX Init */
705-
hdma_spi3_tx.Instance = DMA1_Stream6;
706-
hdma_spi3_tx.Init.Request = DMA_REQUEST_SPI3_TX;
707-
hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
708-
hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
709-
hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE;
710-
hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
711-
hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
712-
hdma_spi3_tx.Init.Mode = DMA_NORMAL;
713-
hdma_spi3_tx.Init.Priority = DMA_PRIORITY_LOW;
714-
hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
715-
hdma_spi3_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
716-
if (HAL_DMA_Init(&hdma_spi3_tx) != HAL_OK) {
717-
Error_Handler();
718-
}
719-
720-
__HAL_LINKDMA(hspi, hdmatx, hdma_spi3_tx);
721-
722-
/* SPI3 interrupt Init */
723-
HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0);
724-
HAL_NVIC_EnableIRQ(SPI3_IRQn);
725-
/* USER CODE BEGIN SPI3_MspInit 1 */
726-
/* USER CODE END SPI3_MspInit 1 */
727-
}
728-
}
729-
730-
/**
731-
* @brief SPI MSP De-Initialization
732-
* This function freeze the hardware resources used in this example
733-
* @param hspi: SPI handle pointer
734-
* @retval None
735-
*/
736-
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) {
737-
if (hspi->Instance == SPI3) {
738-
/* USER CODE BEGIN SPI3_MspDeInit 0 */
739-
740-
/* USER CODE END SPI3_MspDeInit 0 */
741-
/* Peripheral clock disable */
742-
__HAL_RCC_SPI3_CLK_DISABLE();
743-
744-
/**SPI3 GPIO Configuration
745-
PC10 ------> SPI3_SCK
746-
PC11 ------> SPI3_MISO
747-
PC12 ------> SPI3_MOSI
748-
*/
749-
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);
750-
751-
/* SPI3 DMA DeInit */
752-
HAL_DMA_DeInit(hspi->hdmarx);
753-
HAL_DMA_DeInit(hspi->hdmatx);
754-
755-
/* SPI3 interrupt DeInit */
756-
HAL_NVIC_DisableIRQ(SPI3_IRQn);
757-
/* USER CODE BEGIN SPI3_MspDeInit 1 */
758-
759-
/* USER CODE END SPI3_MspDeInit 1 */
760-
}
761-
}
762-
763-
/**
764-
* @brief TIM_PWM MSP Initialization
765-
* This function configures the hardware resources used in this example
643+
/**
644+
* @brief TIM_PWM MSP Initialization
645+
* This function configures the hardware resources used in
646+
* this example
766647
* @param htim_pwm: TIM_PWM handle pointer
767648
* @retval None
768649
*/
@@ -1289,8 +1170,7 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) {
12891170
HAL_NVIC_DisableIRQ(TIM24_IRQn);
12901171
/* USER CODE BEGIN TIM24_MspDeInit 1 */
12911172

1292-
/* USER CODE END TIM24_MspDeInit 1 */
1293-
}
1173+
/* USER CODE END TIM24_MspDeInit 1 */ }
12941174
}
12951175

12961176
/**

Core/Src/stm32h7xx_it.c

Lines changed: 2 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ extern FMAC_HandleTypeDef hfmac;
7171
extern LPTIM_HandleTypeDef hlptim1;
7272
extern LPTIM_HandleTypeDef hlptim2;
7373
extern LPTIM_HandleTypeDef hlptim3;
74-
extern DMA_HandleTypeDef hdma_spi3_rx;
75-
extern DMA_HandleTypeDef hdma_spi3_tx;
76-
extern SPI_HandleTypeDef hspi3;
7774
extern FDCAN_HandleTypeDef hfdcan1;
7875
/*
7976
Externs for calltrace
@@ -151,7 +148,7 @@ void hardfault_flash_write(
151148
if (HAL_FLASH_Program(
152149
FLASH_TYPEPROGRAM_FLASHWORD,
153150
addr_hard_fault + offset,
154-
(uint32_t*)block
151+
(uintptr_t)block
155152
) != HAL_OK) {
156153
__BKPT(0);
157154
}
@@ -167,7 +164,7 @@ void hardfault_flash_write(
167164
if (HAL_FLASH_Program(
168165
FLASH_TYPEPROGRAM_FLASHWORD,
169166
addr_metadata + offset,
170-
(uint32_t*)block
167+
(uintptr_t)block
171168
) != HAL_OK) {
172169
__BKPT(0);
173170
}
@@ -436,120 +433,8 @@ void EXTI1_IRQHandler(void) {
436433
/* USER CODE END EXTI1_IRQn 1 */
437434
}
438435

439-
/**
440-
* @brief This function handles DMA1 stream0 global interrupt.
441-
*/
442-
void DMA1_Stream0_IRQHandler(void) {
443-
/* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
444-
445-
/* USER CODE END DMA1_Stream0_IRQn 0 */
446-
HAL_DMA_IRQHandler(&hdma_adc1);
447-
/* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
448-
449-
/* USER CODE END DMA1_Stream0_IRQn 1 */
450-
}
451-
452-
/**
453-
* @brief This function handles DMA1 stream1 global interrupt.
454-
*/
455-
void DMA1_Stream1_IRQHandler(void) {
456-
/* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
457-
458-
/* USER CODE END DMA1_Stream1_IRQn 0 */
459-
HAL_DMA_IRQHandler(&hdma_adc2);
460-
/* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
461-
462-
/* USER CODE END DMA1_Stream1_IRQn 1 */
463-
}
464-
465-
/**
466-
* @brief This function handles DMA1 stream2 global interrupt.
467-
*/
468-
void DMA1_Stream2_IRQHandler(void) {
469-
/* USER CODE BEGIN DMA1_Stream2_IRQn 0 */
470-
471-
/* USER CODE END DMA1_Stream2_IRQn 0 */
472-
HAL_DMA_IRQHandler(&hdma_adc3);
473-
/* USER CODE BEGIN DMA1_Stream2_IRQn 1 */
474-
475-
/* USER CODE END DMA1_Stream2_IRQn 1 */
476-
}
477-
478-
/**
479-
* @brief This function handles DMA1 stream3 global interrupt.
480-
*/
481-
void DMA1_Stream3_IRQHandler(void) {
482-
/* USER CODE BEGIN DMA1_Stream3_IRQn 0 */
483-
484-
/* USER CODE END DMA1_Stream3_IRQn 0 */
485-
HAL_DMA_IRQHandler(&hdma_i2c2_rx);
486-
/* USER CODE BEGIN DMA1_Stream3_IRQn 1 */
487-
488-
/* USER CODE END DMA1_Stream3_IRQn 1 */
489-
}
490-
491-
/**
492-
* @brief This function handles DMA1 stream4 global interrupt.
493-
*/
494-
void DMA1_Stream4_IRQHandler(void) {
495-
/* USER CODE BEGIN DMA1_Stream4_IRQn 0 */
496-
497-
/* USER CODE END DMA1_Stream4_IRQn 0 */
498-
HAL_DMA_IRQHandler(&hdma_i2c2_tx);
499-
/* USER CODE BEGIN DMA1_Stream4_IRQn 1 */
500-
501-
/* USER CODE END DMA1_Stream4_IRQn 1 */
502-
}
503-
504-
/**
505-
* @brief This function handles DMA1 stream5 global interrupt.
506-
*/
507-
void DMA1_Stream5_IRQHandler(void) {
508-
/* USER CODE BEGIN DMA1_Stream5_IRQn 0 */
509-
510-
/* USER CODE END DMA1_Stream5_IRQn 0 */
511-
HAL_DMA_IRQHandler(&hdma_spi3_rx);
512-
/* USER CODE BEGIN DMA1_Stream5_IRQn 1 */
513-
514-
/* USER CODE END DMA1_Stream5_IRQn 1 */
515-
}
516-
517-
/**
518-
* @brief This function handles DMA1 stream6 global interrupt.
519-
*/
520-
void DMA1_Stream6_IRQHandler(void) {
521-
/* USER CODE BEGIN DMA1_Stream6_IRQn 0 */
522-
523-
/* USER CODE END DMA1_Stream6_IRQn 0 */
524-
HAL_DMA_IRQHandler(&hdma_spi3_tx);
525-
/* USER CODE BEGIN DMA1_Stream6_IRQn 1 */
526-
527-
/* USER CODE END DMA1_Stream6_IRQn 1 */
528-
}
529-
530-
/** @brief DMA fmac configuration (hardcoded the handler, this normally is generated by the IDE)
531-
*/
532-
void DMA2_Stream0_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_preload); }
533-
534-
void DMA2_Stream1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_write); }
535-
536-
void DMA2_Stream2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_fmac_read); }
537-
538436
void FMAC_IRQHandler(void) { HAL_FMAC_IRQHandler(&hfmac); }
539437

540-
/**
541-
* @brief This function handles SPI3 global interrupt.
542-
*/
543-
void SPI3_IRQHandler(void) {
544-
/* USER CODE BEGIN SPI3_IRQn 0 */
545-
546-
/* USER CODE END SPI3_IRQn 0 */
547-
HAL_SPI_IRQHandler(&hspi3);
548-
/* USER CODE BEGIN SPI3_IRQn 1 */
549-
550-
/* USER CODE END SPI3_IRQn 1 */
551-
}
552-
553438
/**
554439
* @brief This function handles Ethernet global interrupt.
555440
*/

0 commit comments

Comments
 (0)