串口1 DMA發(fā)送 9位格式 串口無輸出,不知道什么原因

看了好多遍,感覺沒啥問題啊


void USART1_CFG(void)

{

? GPIO_InitTypeDef? GPIO_InitStructure;

? ? USART_InitTypeDef USART_InitStructure;

? ? NVIC_InitTypeDef? NVIC_InitStructure;


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);


? /* USART2 TX-->A.2? ?RX-->A.3 */

? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

? GPIO_Init(GPIOA, &GPIO_InitStructure);

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? USART_InitStructure.USART_BaudRate = 250000;

? ? USART_InitStructure.USART_WordLength = USART_WordLength_9b;

? ? USART_InitStructure.USART_StopBits = USART_StopBits_1;

? ? USART_InitStructure.USART_Parity = USART_Parity_No;

? ? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

? ? USART_InitStructure.USART_Mode = USART_Mode_Tx ;? ? //DMX512這里只發(fā)送數(shù)據(jù)


? USART_Init(USART1, &USART_InitStructure);

//? ? USART_ITConfig(USART1, USART_IT_TXE, ENABLE);


? ? NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

? NVIC_Init(&NVIC_InitStructure);


//? DMA_Cmd(DMA1_Channel4, ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* USART1 Tx */

//? DMA_Cmd(DMA1_Channel5, ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* USART1 Rx */


? USART_Cmd(USART2, ENABLE);

}


/*******************************************************************************

* Function Name? : DMA_INIT

* Description? ? : Configures the DMA for USART1.

* Input? ? ? ? ? : None

* Return? ? ? ? ?: None

*******************************************************************************/

void DMA_INIT(void)

{

? ? DMA_InitTypeDef DMA_InitStructure;

? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);


? DMA_DeInit(DMA1_Channel4);

? DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DATAR);? /* USART2->DATAR:0x40004404 */

? DMA_InitStructure.DMA_MemoryBaseAddr = (u32)Tx_Buffer;

? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

? DMA_InitStructure.DMA_BufferSize = DMX_CHN;

? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

? DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

? DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

? DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;

? DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;

? DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

? DMA_Init(DMA1_Channel4, &DMA_InitStructure);


//? ? DMA_DeInit(DMA1_Channel5);

//? DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART2->DATAR);

//? DMA_InitStructure.DMA_MemoryBaseAddr = (u32)RxBuffer1;

//? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

//? DMA_InitStructure.DMA_BufferSize = TxSize2;

//? DMA_Init(DMA1_Channel5, &DMA_InitStructure);

}


void DMX_Init()????????//初始化 主函數(shù)調用

{

? ? USART1_CFG();

? ? DMA_INIT();

? ? USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//|USART_DMAReq_Rx

}

static void USART_Send9Data(void)

{

? ? uint16_t tmp;

? ? DMA_Cmd(DMA1_Channel4, DISABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* USART1 Tx */

? ? for(tmp=0;tmp

? ? {

? ? ? ?Tx_Buffer[tmp] = (uint16_t)DMX_SendData[tmp]+0x0100;? ? ? ? //數(shù)據(jù)第9位為高

? ? }

? ? DMA_Cmd(DMA1_Channel4, ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* USART1 Tx */

? ??

}



您好,大概看了一下你的程序,在串口初始化配置的時候就有有一個問題,你串口配置的是串口1,但在使能的時候配置的是串口2,如下圖,建議你再仔細檢查一下程序。

image.png



大意了,非常感謝;我現(xiàn)在只能發(fā)送一次數(shù)據(jù),debug發(fā)現(xiàn),在dma第二次數(shù)據(jù)傳輸后,發(fā)送完成標志位一直沒有置位,所以在這里造成了死循環(huán)

5.png

請問 可能是什么原因造成的,謝謝


您好,我看你DMA的傳輸方式配置為正常模式,傳輸結束后要開啟新的DMA操作,你可按照下列方法嘗試一下:在關閉DMA并清除傳輸完成標志之后,重新配置一下DMA傳輸數(shù)目的大小,然后再開啟DMA??赏ㄟ^調用DMA_SetCurrDataCounter函數(shù)設置DMA輸出數(shù)目的大小。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频