打印
[AT32F421]

usart dma 接收无数据--done

[复制链接]
1226|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yachcs|  楼主 | 2021-5-21 00:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 muyichuan2012 于 2021-5-24 11:31 编辑

请教 AT32F421 USART DMA 接收不定长数据 ,空闲中断正常,能正常进入,但设置的接收内存RxBuffer数据全为0,找不到原因,不知怎么回事?

代码如下:

-------------------------------------------------------------------------------------------------

void USART1_DMA(void)
{

        DMA_InitType DMA_InitStructure;
        
  DMA_Reset(DMA1_Channel3);
  DMA_DefaultInitParaConfig(&DMA_InitStructure);
  DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40013804;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer;
  DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALSRC;
  DMA_InitStructure.DMA_BufferSize = LENGTH;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
  DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;
  DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_BYTE;
  DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_BYTE;
  DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL;
  DMA_InitStructure.DMA_Priority = DMA_PRIORITY_VERYHIGH;
  DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
  DMA_Init(DMA1_Channel3, &DMA_InitStructure);
}



void usart1_init( uint32_t BaudRate, uint32_t USART_Parity )
{
    GPIO_InitType GPIO_InitStructure;
    NVIC_InitType NVIC_InitStructure;
    USART_InitType USART_InitStructure;

    /* Enable GPIO clock */
    RCC_AHBPeriphClockCmd( RCC_AHBPERIPH_GPIOA, ENABLE );

    /* Enable USART1 Clock */
    RCC_APB2PeriphClockCmd( RCC_APB2PERIPH_USART1, ENABLE );
    /* Connect PXx to USART1_Tx */
    GPIO_PinAFConfig( GPIOA, GPIO_PinsSource9, GPIO_AF_1 );
    /* Connect PXx to USART1_Rx */
    GPIO_PinAFConfig( GPIOA, GPIO_PinsSource10, GPIO_AF_1 );
    /* Configure USART1 Tx/Rx */
    GPIO_InitStructure.GPIO_Pins = GPIO_Pins_9 | GPIO_Pins_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
    GPIO_InitStructure.GPIO_OutType = GPIO_OutType_PP;
    GPIO_InitStructure.GPIO_Pull = GPIO_Pull_NOPULL;
    GPIO_Init( GPIOA, &GPIO_InitStructure );
        

    USART_InitStructure.USART_BaudRate = BaudRate;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    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_Rx | USART_Mode_Tx;
    /* Configure USARTx */
    USART_Init( USART1, &USART_InitStructure );

    /* Enable the USART1 Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init( &NVIC_InitStructure );

        USART1_DMA();
        
        USART_Cmd(USART1, ENABLE);  
        USART_INTConfig(USART1, USART_INT_IDLEF, ENABLE);
       USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);

       DMA_ChannelEnable(DMA1_Channel3, ENABLE);

}


void USART1_IRQHandler(void)
{
        
        u8 i;
        
    if(USART_GetITStatus(USART1, USART_INT_IDLEF) != RESET)
    {
                        
                        i =USART1->STS;
                        i =USART1->DT;
                        DMA_ChannelEnable(DMA1_Channel3, DISABLE);                                                                         //关闭DMA                                                                                       
                        get_len = LENGTH - DMA_GetCurrDataCounter(DMA1_Channel3);                //获取字符长度
                                       
                        DMA_SetCurrDataCounter(DMA1_Channel3,LENGTH);                                                                                                                        //设置DMA字符长度
                        DMA_ChannelEnable(DMA1_Channel3, ENABLE);                                                                                 //开启DMA
                        
    }
}


使用特权

评论回复
沙发
hoop| | 2021-5-21 17:42 | 只看该作者
DMA时钟好像没开

使用特权

评论回复
板凳
yachcs|  楼主 | 2021-5-22 23:23 | 只看该作者
hoop 发表于 2021-5-21 17:42
DMA时钟好像没开

多谢,已经试好了,就是DMA时钟问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

0

粉丝