硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7731|回复: 6
收起左侧

[UART] STM32H750,uart3配置为DMA发送,串口中断接收,为什么每一帧数据只能接收到第一个字节

[复制链接]

2

主题

3

回帖

9

积分

新手上路

积分
9
发表于 2020-10-18 10:20:39 | 显示全部楼层 |阅读模式
void usart3_init(u32 bound){                //UART 初始化设置        Uart3_Handler.Instance=USART3;                                            //USART1        Uart3_Handler.Init.BaudRate=bound;                                    //波特率        Uart3_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式        Uart3_Handler.Init.StopBits=UART_STOPBITS_1;            //一个停止位        Uart3_Handler.Init.Parity=UART_PARITY_NONE;                    //无奇偶校验位        Uart3_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控        Uart3_Handler.Init.Mode=UART_MODE_TX_RX;                    //收发模式        Uart3_Handler.Init.OverSampling = UART_OVERSAMPLING_16;        Uart3_Handler.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;        if(HAL_UART_DeInit(&Uart3_Handler) != HAL_OK)        {                        Error_Handler(__FILE__, __LINE__);        }        if(HAL_UART_Init(&Uart3_Handler) != HAL_OK)//HAL_UART_Init()会使能UART1        {                        Error_Handler(__FILE__, __LINE__);        }        HAL_UART_Receive_IT(&Uart3_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量}
void MYDMA_Usart3_Config(void)
{
          DMA_Stream_TypeDef *DMA_Streamx = DMA1_Stream0;
                if((u32)DMA_Streamx>(u32)DMA2)//得到当前stream是属于DMA2还是DMA1
                {
                        __HAL_RCC_DMA2_CLK_ENABLE();//DMA2时钟使能       
                }
                else
                {
                        __HAL_RCC_DMA1_CLK_ENABLE();//DMA1时钟使能
                }  
    //Tx DMA配置
    UART3TxDMA_Handler.Instance=DMA_Streamx;                            //数据流选择
          UART3TxDMA_Handler.Init.Request=DMA_REQUEST_USART3_TX;                                      //USART1发送DMA
    UART3TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH;             //存储器到外设
    UART3TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;                 //外设非增量模式
    UART3TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE;                     //存储器增量模式
    UART3TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;    //外设数据长度:8位
    UART3TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;       //存储器数据长度:8位
    UART3TxDMA_Handler.Init.Mode=DMA_NORMAL;                            //外设流控模式
    UART3TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM;               //中等优先级
    UART3TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;              
    UART3TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;      
    UART3TxDMA_Handler.Init.MemBurst=DMA_MBURST_INC4;                 //存储器突发单次传输
    UART3TxDMA_Handler.Init.PeriphBurst=DMA_MBURST_INC4;              //外设突发单次传输

    HAL_DMA_DeInit(&UART3TxDMA_Handler);   
    HAL_DMA_Init(&UART3TxDMA_Handler);
               
                __HAL_LINKDMA(&Uart3_Handler,hdmatx,UART3TxDMA_Handler);    //将DMA与USART1联系起来(发送DMA)

         /* 设置DMA接收中断 */
        // HAL_DMA_RegisterCallback(&UART3TxDMA_Handler, HAL_DMA_XFER_CPLT_CB_ID, HAL_UARTDMA_TxCpltCallback);
         
    HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 3, 0);
    HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
}


回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2020-10-18 12:18:18 | 显示全部楼层
哪个大神知道啊是什么问题啊  求帮助啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2020-10-18 14:24:18 | 显示全部楼层
参考我的吧

基于STM32H7的CMSIS-Driver驱动实现串口DMA和串口中断两种方式案例【已发布】
http://www.armbbs.cn/forum.php?m ... 9211&fromuid=58
(出处: 硬汉嵌入式论坛)

【STM32H743实验例程】实验14:STM32H743串口DMA方式收发,DMA方式问题比较多,要注意数据一致性
http://www.armbbs.cn/forum.php?m ... 6271&fromuid=58
(出处: 硬汉嵌入式论坛)

回复

使用道具 举报

0

主题

216

回帖

216

积分

高级会员

积分
216
发表于 2020-10-19 07:10:21 | 显示全部楼层
HAL_UART_Receive_DMA 要传递dma的buffer和长度
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-4-1 16:00:44 | 显示全部楼层
楼主搞定了吗
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-7-12 11:47:31 | 显示全部楼层
我的也是这样,不知怎么解决
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2022-7-15 23:59:44 | 显示全部楼层
LL库实现,实测1.5Mbps收发毫无压力,不丢数据:
https://blog.csdn.net/qq_2055361 ... 1001.2014.3001.5501
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 02:50 , Processed in 0.170505 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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