前言
独乐乐不如众乐乐,今天记录一下BOS-UART组件使用方法
使用方法分析
使用方式-发送
在路径“BabyOS\bos\mcu\st\stm32f10x” mcu_stm32f10x_uart.c 中,定义了实例:
bHalUartDriver_t bHalUartDriver = {
.pSend = _UartSend,
.pReceive = _UartReceive,
};
后面使用直接使用接口:
bHalUartDriver.pSend(HAL_LOG_UART, &ch, 1);
这个接口的发送是否堵塞与_UartSend 具体实现有关,这里默认是堵塞方式;
使用方式-接收
与上面发送方式类似,直接调用接口
bHalUartDriver.pReceive
使用方式-中断发送
首先定义一个实例:
bUTIL_UART_INSTANCE
在中断服务函数中调用:
bUtilUartRxHandler
然后代码会轮询
BOS_REG_POLLING_FUNC(_bUtilUartDetectIdle);
超时中断就会调用回调函数
typedef void (*pbUartIdleCallback_t)(uint8_t *pbuf, uint16_t len);
代码技巧分析
一款MCU中,一般都会有多个串口外设,UART1....
代码中如何区分UART1,UART2...呢?BOS中使用的是在形参中传入 传门口号区分
_UartSend(bHalUartNumber_t uart, const uint8_t *pbuf, uint16_t len)
别的方法也可以区分,比如
bHalUartDriver_t bHalUartDriver[n] //n 定义为N各串口
其他实现方式还有。。。
对比上面两种方法就会发现他们各有优缺点,但是下面一个方法缺点更多更明显;就不详细分析了。