关于HAL库中用DMA方式使用串口的问题,串口中断用开吗?
使用DMA模式收发串口的核心语句为如下2句
HAL_UART_Transmit_DMA
HAL_UART_Receive_DMA
我的问题:
1,使用DMA模式在cube中的NVIC中断选项中
dma的 interrupt是要enable的 也是默认的
但是usart 的global interrupt 的中断是否也要enable???
之所以问这个问题是因为,DMA模式的核心就是CPU尽量少的参与,由硬件来部分完成CPU的工作。
就那串口为例,
普通的串口收到一个byte就中断一次,CPU就要处理一次
而DMA模式串口收到了一组数据(比如100bytes)再产生中断,然后CPU再一次性处理。
CPU的工作从原来的100次减少到了1次。
但是如果enable的 usart 的global interrupt,那么是不是又变成了,收到一个byte就中断一次了?那DMA的意义就不大了。
2,DMA的callback回调函数是什么?
dma把收据收满了应该产生一个中断,我猜是DMA中断,而HAL库的中断一般是用回调函数处理的。
所以我的问题就出现了,串口DMA的中断回调函数是什么呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
打开之后,调用HAL_UART_Transmit_DMA, 实现的就是楼主希望的功能。
发送完设定长度的数据,才进一次UART中断。
发送完一半设定长度的数据,会进一次DMA接受中断,发送完所有再进一次DMA中断。
如果调用HAL_UART_Transmit_IT,是每次发完一个数据就进一次UART。
接收没测过。
一周热门 更多>