OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3259|回复: 0

stm32f103 usart2 dma rx 收不到数据

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-11-21
在线时间
6 小时
发表于 2020-12-12 21:29:00 | 显示全部楼层 |阅读模式
1金钱
大神们求助!
我使用stm32f103 USART2,想用DMA接收数据,问题是: rxBuf 中没有数据!!!请教是否有其他需要配置的地方!
代码如下:
void USART2_Configuration(void)
{
        USART_InitTypeDef USART_InitStructure;
       
  /*--------------USART2配置-------------------*/
    USART_InitStructure.USART_BaudRate = 115200;
    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;
    USART_Init(USART2, &USART_InitStructure);
    //USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);
    USART_Cmd(USART2, ENABLE);
    USART_DMACmd(USART2,USART_DMAReq_Rx,ENABLE);

    USART2_DMA_Rx_Config();

}

static void USART2_DMA_Rx_Config(void)
{
        bsp_uart2_dmarx_config(rxBuf, UART_RX_BUFFER_SIZE);
}
void bsp_uart2_dmarx_config(uint8_t *mem_addr, uint32_t mem_size)
{
          DMA_InitTypeDef DMA_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

        DMA_DeInit(DMA1_Channel6);
        DMA_Cmd(DMA1_Channel6, DISABLE);
        DMA_InitStructure.DMA_PeripheralBaseAddr         = (uint32_t)&(USART2->DR);
        DMA_InitStructure.DMA_MemoryBaseAddr                 = (uint32_t)mem_addr;
        DMA_InitStructure.DMA_DIR                                         = DMA_DIR_PeripheralSRC;         /* 传输方向:外设->内存 */
        DMA_InitStructure.DMA_BufferSize                         = mem_size;
        DMA_InitStructure.DMA_PeripheralInc                 = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc                         = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_PeripheralDataSize         = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize                 = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_Mode                                         = DMA_Mode_Circular;
        DMA_InitStructure.DMA_Priority                                 = DMA_Priority_VeryHigh;
        DMA_InitStructure.DMA_M2M                                         = DMA_M2M_Disable;
        DMA_Init(DMA1_Channel6, &DMA_InitStructure);
        DMA_ITConfig(DMA1_Channel6, DMA_IT_TC|DMA_IT_HT|DMA_IT_TE, ENABLE);/* 使能DMA半满、溢满、错误中断 */
        DMA_ClearFlag(DMA1_IT_TC6);
        DMA_ClearFlag(DMA1_IT_HT6);
        DMA_Cmd(DMA1_Channel6, ENABLE);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 20:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表