最近比赛在将祖传代码从标准库改为hal库,中间涉及到好多开关标志位的动作,但是hal库高度封装让我找一个回调函数都老是找不明白,于是就尝试自己阅读一下hal库的回调函数代码,结合gpt的指导,理清楚了串口部分回调函数的调用区别。
HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
HAL_UART_RxCpltCallback(huart);
首先是根据xxxxit.c函数里面一直进入到UART_Receive_IT函数
函数结尾就有关于这两个函数选择的if判断 根据ReceptionType来区分使用哪一个回调函数,那么自然而然就会想到这个标志位在哪里设置,因为hal库调用有关中断的接收函数一般我都会在中断回调函数结尾重新开启接收,这也是hal库很让我不适应的点就在于每次函数执行完成会自己关中断,所以我就点进了使用IDLE类型的DMA传输和接收的串口函数中,果然看到了关于ReceptionType变量的设置,设置为了IDLE类型,IT模式就是标准类型,大家感兴趣可以自己点进去源码里面看看
这算是我第一次去研究偏底层的源码实现,之前老是说要去看但是又畏难感觉看不懂,希望这是我学习源码学习底层的第一步,加油!
——一个时常焦虑的大二菜鸡