June牛 发表于 2017-4-5 15:17:25

谢谢!真心对我很有用啊!

yygkqzh 发表于 2017-5-3 20:51:46


多谢分享,学习了

zdx 发表于 2017-5-24 16:45:37

Thanks!

lynnxie 发表于 2017-5-28 23:00:52

非常感谢楼主的方法,非常好用
如果在一次性接收的数据包比较大,大于设定的DMA接收Buf,用空闲中断则会丢掉之前的一整帧,对吧,这个问题如何解决呢?

jazu 发表于 2017-6-1 18:03:32

lynnxie 发表于 2017-5-28 23:00
非常感谢楼主的方法,非常好用
如果在一次性接收的数据包比较大,大于设定的DMA接收Buf,用空闲中断则会丢 ...

缓冲区要设置超过可能存在的最大数据包

星辰一方 发表于 2017-6-1 18:32:26

空闲中断很有用,分享很赞!

张亚飞 发表于 2017-6-1 18:43:04

对DMA的实时性好奇,以及中断优先级对DMA传输有没有影响,还有适用多大内存的片子

jtc_88 发表于 2017-6-2 11:28:17

这个 需要配合 串口数据 收发 协议来,否则无法确认 到底接收多少数据。
                HAL_UART_Receive_DMA(&huart1, RX_DATA, RX_DATA_NUM);
                __HAL_DMA_DISABLE_IT(huart1.hdmarx, DMA_IT_TC | DMA_IT_HT | DMA_IT_TE);//关闭DMA 错误 传输一半 全部完成 中断

                __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//使能 串口 空闲中断

                HAL_NVIC_SetPriority(USART1_IRQn, 1, 0);
                HAL_NVIC_EnableIRQ(USART1_IRQn);                        //使能中断

void USART1_IRQHandler(void)
{
        if((__HAL_DMA_GET_COUNTER(huart1.hdmarx) + RX_DATA) == (RX_DATA_NUM - 6))
        {
                Flag_RX = 1;
        }
       
        __HAL_UART_CLEAR_IT(&huart1, UART_CLEAR_IDLEF);
       
        __HAL_DMA_DISABLE(huart1.hdmarx);
        huart1.hdmarx->Instance->CNDTR = RX_DATA_NUM;
        __HAL_DMA_ENABLE(huart1.hdmarx);                                //DMA接收数据 必须在 DMA 禁止 时 重新写入
}

胡图图啊 发表于 2017-8-23 09:47:50

救我一个发现了吗??接收的第二个数据覆盖不了第一个。也就是说第一次接收1234,第二次你发送12它还是显示1234.好气啊:(

dongchenyu163 发表于 2017-11-14 11:50:28

很好的教程,支持一下楼主
页: 1 2 3 4 [5] 6 7 8 9
查看完整版本: Cube下实现串口+DMA+空闲中断接收不定长数据