串口工作在DMA接收发送模式,只是简单的说一下各个函数的调用关系,函数的具体代码太多我也没看都看明白,要是了解了调用关系,大概就能使用串口了,不会太迷茫;
<span style="font-size:14px;">
main(); /* 主函数 */
-> HalDriverInit(); /* 硬件初始化函数 */
-> HalUARTInit(); /* 串口初始化函数 */
-> HalUARTInitDMA()或者 -> HalUARTInitISR(); /* 初始化管脚位置及工作方式 */
SimpleBLETest_Init(); /* 用户任务初始化函数 */
-> NPI_InitTransport(NpiSerialCallback); /* 配置串口数据结构及设置回调函数 */
-> HalUARTOpen(); /* 打开串口 */
-> HalUARTOpenDMA(); /* 设置串口接收发送数据的参数 */
osal_start_system(); /* 系统开始运行 */
-> osal_run_system(); /* 系统一直循环运行这个函数 */
-> Hal_ProcessPoll(); /* 查询数据,比如串口数据 */
-> HalUARTPoll(); /* 查询串口 */
-> HalUARTPollDMA(); /* 查询串口 */
-> HalUARTRxAvailDMA(); /* 计算接收缓冲区字节数长度 */
-> dmaCfg.uartCB(HAL_UART_DMA-1, evt); /* 回调函数,即 NpiSerialCallback */
-> NPI_ReadTransport(); /* 读取接收数据 */
-> HalUARTRead(); /* 读取接收数据 */
-> HalUARTReadDMA(); /* 读取接收数据 */
-> 用户处理接收数据的地方,以数据环回发送为例
-> NPI_WriteTransport(); /* 串口发送数据 */
-> HalUARTWrite(); /* 串口发送数据 */
-> HalUARTWriteDMA(); /* 串口发送数据 */
......
-> osal_run_system(); /* 系统一直循环运行这个函数 */
</span>