誰かが私の無能さを軽視してくれることを願っています。 DMA割り込みを使用してDMA転送用のUSARTをセットアップしました。STM32F1 USART DMA TXは2回目の転送を完了しません
- : コマンドはvoid SCICommsStringIntoTxQ(int8_t * str_out_string)
{
memset(TxBuffer, '\0', sizeof(TxBuffer));
strcpy(TxBuffer, str_out_string);
USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE);
DMA_Cmd (DMA1_Channel7, ENABLE);
}
マイDMA初期化されている
SCICommsStringIntoTxQ("\n\rTEST_CODE V0.01: \r\n");
:私のようなコマンドを使用して、TXバッファにデータを送信しようとしています
void DMA1_Channel7_IRQHandler(void)
{
// USART2 TX handler
/* Test on DMA Stream Transfer Complete interrupt */
if (DMA_GetITStatus(DMA1_IT_TC7))
{
/* Clear DMA Stream Transfer Complete interrupt pending bit */
DMA_ClearITPendingBit(DMA1_IT_GL7 | DMA1_IT_TC7);
}
DMA_Cmd(DMA1_Channel7, DISABLE);
}
/* Configures the DMA1 Channel7 for UART2_CHAN Transmission. */
DMA_DeInit(DMA_Channel_USART2_TX);
DMA7_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(USART2->DR);
DMA7_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA7_InitStructure.DMA_BufferSize = (uint16_t)sizeof(TxBuffer) -1;
DMA7_InitStructure.DMA_MemoryBaseAddr = (uint32_t)TxBuffer;
DMA7_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA7_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA7_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA7_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA7_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA7_InitStructure.DMA_Priority = DMA_Priority_High;
DMA7_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA_Channel_USART2_TX, &DMA7_InitStructure);
USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE); // Enable USART2 DMA TX
DMA_ITConfig(DMA_Channel_USART2_TX, DMA_IT_TC, ENABLE);
最初の送信は問題なく動作しますが、すぐ次の文字列を送信しようとするとすぐに、最初の文字列が破損します。誰かが私が間違ったことをアドバイスできますか?