爱板网论坛

查看: 558|回复: 2

[中移One NET] 麒麟座mini之三-接口、模块、硬件驱动

[复制链接]

2

主题

0

好友

86

积分

童生

Rank: 2

该用户从未签到

发表于 2017-9-17 21:31:21 |显示全部楼层
本帖最后由 zhouzpd 于 2017-9-18 21:05 编辑

麒麟座mini之三-接口、模块、硬件驱动

上期使用STM32CubeMX生成了开发环境和资源配置。这次编写串口等驱动。
麒麟座mini之二-开发环境搭建、资源配置、硬件测试

这周公司旅游,周日晚上抽了点时间简单完成了一个串口转发功能。

接口
分层设计
分层设计即将软件设计按层级分开,如分为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模块。
  1. void DBG_TestUartThrough(void)
  2. {
  3.     U16 rxcnt=0;
  4.    
  5.     if(HDW_UartRxIsFinish(UARTNUM1))
  6.     {

  7.         rxcnt = HDW_UartRxCnt(UARTNUM1);
  8.         memcpy(HDW_UartTxBufAddr(UARTNUM2), HDW_UartRxBufAddr(UARTNUM1), rxcnt);
  9.         HDW_UartTxStart(UARTNUM2, rxcnt);
  10.         HDW_UartRxStart(UARTNUM1);
  11.     }

  12.     if(HDW_UartRxIsFinish(UARTNUM2))
  13.     {

  14.         rxcnt = HDW_UartRxCnt(UARTNUM2);
  15.         memcpy(HDW_UartTxBufAddr(UARTNUM1), HDW_UartRxBufAddr(UARTNUM2), rxcnt);
  16.         HDW_UartTxStart(UARTNUM1, rxcnt);
  17.         HDW_UartRxStart(UARTNUM2);
  18.     }
  19. }
复制代码
3.0.png


下期预告

麒麟座mini之四-WIFI驱动、OneNet、家庭温湿度

回复

使用道具 举报

25

主题

10

好友

3325

积分

超级版主

Rank: 8Rank: 8

该用户从未签到

发表于 2017-9-18 16:37:04 |显示全部楼层


下期预告应该是之四啦~
TIM截图20170918163611.png

回复

使用道具 举报

2

主题

0

好友

86

积分

童生

Rank: 2

该用户从未签到

发表于 2017-9-18 21:01:50 |显示全部楼层
ky123 发表于 2017-9-18 16:37
下期预告应该是之四啦~

感谢斑竹提醒,已改正了一些文字。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /2 下一条

手机版|爱板网 |网站地图  

GMT+8, 2017-11-25 08:16 , Processed in 0.194147 second(s), 12 queries , Memcache On.

苏公网安备 32059002001056号

Powered by Discuz!

回顶部