Skip to content

Commit 0574b47

Browse files
committed
Minor fix.
1 parent ebfa75a commit 0574b47

File tree

1 file changed

+36
-3
lines changed

1 file changed

+36
-3
lines changed

libraries/DMA/src/DMATransfer.cpp

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ void DMATransferClass::prepare(DMA_HandleTypeDef *settings)
1111
{
1212
if (!_prepared) {
1313
// TODO - figure out which DMA to enable the clock for.
14-
__HAL_RCC_DMA1_CLK_ENABLE();
15-
14+
#ifdef DMA1_BASE
15+
__HAL_RCC_DMA1_CLK_ENABLE();
16+
#endif
17+
#ifdef DMA2_BASE
18+
__HAL_RCC_DMA2_CLK_ENABLE();
19+
#endif
1620
memcpy(&_dma, settings, sizeof(DMA_HandleTypeDef));
1721
/*
1822
_transfer_settings.dma_settings.Init.Direction = _transfer_settings.transfer_direction;
@@ -46,16 +50,45 @@ void DMATransferClass::prepare(DMA_HandleTypeDef *settings)
4650
*/
4751
void DMATransferClass::begin(uint32_t source, uint32_t destination, int bytes_to_transfer, bool use_interrupt)
4852
{
53+
// Make sure we're set to initialize
54+
this->end();
55+
4956
if (!_prepared) {
5057
// call dma prepare
5158
prepare_dma(&_dma);
5259
}
5360

61+
/**
62+
* @brief Clear the DMA Stream pending flags.
63+
* @param __HANDLE__: DMA handle
64+
* @param __FLAG__: specifies the flag to clear.
65+
* This parameter can be any combination of the following values:
66+
* @arg DMA_FLAG_TCIFx: Transfer complete flag.
67+
* @arg DMA_FLAG_HTIFx: Half transfer complete flag.
68+
* @arg DMA_FLAG_TEIFx: Transfer error flag.
69+
* @arg DMA_FLAG_DMEIFx: Direct mode error flag.
70+
* @arg DMA_FLAG_FEIFx: FIFO error flag.
71+
* Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Stream flag.
72+
* @retval None
73+
*/
74+
5475
// Reset flags so it starts over
55-
__HAL_DMA_CLEAR_FLAG(&_dma, DMA_FLAG_TC2 | DMA_FLAG_HT2 | DMA_FLAG_TE2);
76+
__HAL_DMA_CLEAR_FLAG(&_dma, __HAL_DMA_GET_TC_FLAG_INDEX(&_dma));
77+
__HAL_DMA_CLEAR_FLAG(&_dma, __HAL_DMA_GET_HT_FLAG_INDEX(&_dma));
78+
__HAL_DMA_CLEAR_FLAG(&_dma, __HAL_DMA_GET_TE_FLAG_INDEX(&_dma));
79+
80+
#if defined(STM32F2xx) || #defined(STM32F4xx) || #defined(STM32F7xx)
81+
__HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_DME_FLAG_INDEX(hdma));
82+
__HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_FE_FLAG_INDEX(hdma));
83+
#endif
5684

5785
// Set size to transfer
86+
87+
#if defined(__HAL_DMA_SET_COUNTER)
88+
__HAL_DMA_SET_COUNTER(&_dma, bytes_to_transfer);
89+
#else
5890
_dma.Instance->CNDTR = bytes_to_transfer;
91+
#endif
5992

6093
// and enable it
6194
__HAL_DMA_ENABLE(&_dma);

0 commit comments

Comments
 (0)