本帖最后由 zhouzpd 于 2017-9-18 21:05 编辑
麒麟座mini之三-接口、模块、硬件驱动
上期使用STM32CubeMX生成了开发环境和资源配置。这次编写串口等驱动。
这周公司旅游,周日晚上抽了点时间简单完成了一个串口转发功能。
接口
分层设计
分层设计即将软件设计按层级分开,如分为MCU层、硬件层、应用层,使得每层相互独立,从而可移植可替换。这就需要做到层与层之间具有统一的接口。
接口
接口即不同层或不同模块间的关联。。
模块
模块
每层由若干个模块组成,并且模块与模块之间做到低耦合,通过统一的接口关联,从而可移植可替换。
硬件驱动
硬件驱动其实就是硬件层的模块
串口驱动
首先,需要确定需要提供什么样的接口,如发送、发送完成、接收、接收完成、接收个数等。
我定义了几个接口函数:
发送——BOL HDW_UartTxStart(UARTNUM u, U16bytes);
发送完成——BOL HDW_UartTxIsFinish(UARTNUM u);
接收——BOL HDW_UartRxStart(UARTNUM u);
接收完成——BOL HDW_UartRxIsFinish(UARTNUM u);
接收个数——U16 HDW_UartRxCnt(UARTNUM u);
等一些接口。
串口转发
将串口1的接收的数据转发到串口2,将串口2接收的数据转发到串口1,从而实现通过串口1和电脑端串口工具来调试WIFI模块。 - void DBG_TestUartThrough(void)
- {
- U16 rxcnt=0;
-
- if(HDW_UartRxIsFinish(UARTNUM1))
- {
- rxcnt = HDW_UartRxCnt(UARTNUM1);
- memcpy(HDW_UartTxBufAddr(UARTNUM2), HDW_UartRxBufAddr(UARTNUM1), rxcnt);
- HDW_UartTxStart(UARTNUM2, rxcnt);
- HDW_UartRxStart(UARTNUM1);
- }
- if(HDW_UartRxIsFinish(UARTNUM2))
- {
- rxcnt = HDW_UartRxCnt(UARTNUM2);
- memcpy(HDW_UartTxBufAddr(UARTNUM1), HDW_UartRxBufAddr(UARTNUM2), rxcnt);
- HDW_UartTxStart(UARTNUM1, rxcnt);
- HDW_UartRxStart(UARTNUM2);
- }
- }
复制代码
下期预告
麒麟座mini之四-WIFI驱动、OneNet、家庭温湿度
|