这里只记录注意要点:
1,要开启串口 全局中断 和对应的接收DMA 中断,两个中断必须同时开
2,裸机程序需要在主循环外调用一次 这个函数
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_buff, BUFF_SIZE);
3,要在串口中断处理函数中 添加这个函数
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_buff, BUFF_SIZE);
4,重写空闲中断回调函数 ,它是个弱函数,需要程序员自己实现
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef * huart, uint16_t Size)
在这个函数中,可以做一些事情,比如记录收到了多少个字节数据,或者对接收数据处理。
5,HAL_UARTEx_ReceiveToIdle_DMA 函数的作用:
1,把接收类型设置成HAL_UART_RECEPTION_TOIDLE,
2,调用开启DMA接收函数;
3,调用完再清除一次IDLEF标志位
4,然后再设置IDLEIE标志位
6,上面第5点可以看出,这个函数需要反复调用,一般放在串口中断函数里面就可以了,不能放在回调函数里,因为一旦出现异常没有进中断,那么在没有其它地方调用HAL_UARTEx_ReceiveToIdle_DMA的话 ,就再也不进空闲中断了,DMA 也不接收了
7,如果是了 OS , 那么可以用这种办法:在任