#ifndef BSP_USART_H #define BSP_USART_H #include "stm32f4xx_hal.h" /* 串口接收按"整帧"递交给注册回调(CAN 的按 ID 分发见 bsp_can.h) */ typedef void (*usart_rx_callback_f)(const uint8_t * frame, uint16_t len); /* ---- 接收 ---- * 初始化在任务上下文调用一次;回调在中断上下文递交整帧,须尽量短 */ extern void usart1_init(uint8_t * rx_buf, uint16_t dma_buf_num, usart_rx_callback_f callback); extern void usart3_init(uint8_t * rx_buf, uint16_t dma_buf_num, usart_rx_callback_f callback); extern void usart6_init(uint8_t * rx_buf, uint16_t dma_buf_num, usart_rx_callback_f callback); extern int usart_rx_register(UART_HandleTypeDef * huart, usart_rx_callback_f callback); /* 各 USARTx_IRQHandler 的 USER CODE 区调用(需在 HAL_UART_IRQHandler 之前) */ extern void usart1_idle_isr(void); extern void usart3_idle_isr(void); extern void usart6_idle_isr(void); /* ---- 发送 ---- * TX DMA 启动后 data 缓冲须保持有效直至传输完成 */ extern void usart1_tx_dma_init(void); extern void usart1_tx_dma_enable(uint8_t * data, uint16_t len); extern void usart6_tx_dma_enable(uint8_t * data, uint16_t len); /* ---- 诊断(debug_task 打印) ---- */ extern volatile uint32_t dbg_usart1_idle; extern volatile uint32_t dbg_usart3_idle; extern volatile uint32_t dbg_usart6_idle; extern volatile uint16_t dbg_usart3_last_len; extern volatile uint16_t dbg_usart6_last_len; #endif