多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
* 导师视频讲解:[**去听课**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=29) >[success] **技术支持说明:** >**1**.一般以自主学习为主 > **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/zigbee) > **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解! <br/> 硬件适配层(Hardware Adaptation Layer,HAL),用于适配各种各样的硬件,为上层提供统一的接口,从而方便开发者使用各种各样的硬件。本节课从文件结构和工程结构这两方面简单地讲解HAL的结构。 <br/> ## **HAL的文件结构** >[warning] HAL的文件结构较为复杂,读者只需要跟笔者的讲解思路简单地了解一下就可以了。 在安装好Z-Stack 3.0 后,HAL相关的源代码可以在Z-Stack 3.0的Components文件夹中找到,如图所示。 ![](https://img.kancloud.cn/5a/8f/5a8fb8078d81eab2212e8eb829a7604b_1529x1440.png =200x) ### 进入hal目录,如图所示。 ![](https://img.kancloud.cn/8c/fe/8cfe5f86ed5942335367186d1d49fabb_346x151.png =200x) 其中的文件夹说明如下: (1)common:存放公共文件。 (2)include:存放各种驱动程序接口文件。 (3)target:存放各种类型主板的驱动程序源文件。 ### 进入common文件夹,如图所示。 ![](https://img.kancloud.cn/5c/2e/5c2e61eae806afe8a2a835a82ec7b674_492x158.png =250x) common目录中的文件说明如下: (1)hal_assert.c:实现条件合法性判断功能的源代码文件。 (2)hal_drivers.c:硬件抽象层HAL任务初始化及事件处理函数所在文件,是HAL的入口源文件。 ### 返回上一级,并进入include目录,如图所示。 ![](https://img.kancloud.cn/b6/43/b643efc8a189fc406f367b98a1fefcb3_489x451.png =250x) include目录中的文件描述如下: (1)hal_adc.h:ADC(模拟数字转换)驱动程序头文件。 (2)hal_assert.h:条件合法性判断功能的头文件。 (3)hal_board.h:各种类型主板的硬件资源配置头文件。 (4)hal_defs.h:通用定义头文件。 (5)hal_drivers.h:HAL任务初始化及事件处理函数的头文件。 (6)hal_flash.h:FLASH(存储器)驱动程序头文件。 (7)hal_key.h:按键驱动程序头文件。 (8)hal_lcd.h:显示屏驱动程序头文件。 (9)hal_led.h:LED驱动程序头文件。 (10)hal_rpc.h:RPC(Remote Procedure Call,远程过程调用)驱动程序头文件。 (11)hal_sleep.h:休眠功能驱动程序头文件。 (12)hal_timer.h:定时器驱动程序头文件。 (13)hal_uart.h:串口驱动程序头文件。 ### 返回上一级,然后进入target文件夹,如图所示。 ![](https://img.kancloud.cn/bc/a8/bca80a20aeee9cc84808d283d71dcf8b_474x236.png =250x) target目录中的文件夹描述如下: (1)CC2530EB:针对芯片主控为CC2530的评估板相关的驱动程序。 (2)CC2530USB:针对芯片主控为CC2530的带USB转串口评估板的驱动程序。 (3)CC2530ZNP:针对芯片主控为CC2530的ZNP(ZigBee And Processor)评估板的驱动程序。 (4)CC2538:针对芯片主控为CC2538的评估板的驱动程序。 (5)CC2538ZNP:针对芯片主控为CC2538的ZNP(ZigBee And Processor)评估板的驱动程序。 ### 以CC2530EB为例,进入到这个目录,如图所示。 ![](https://img.kancloud.cn/94/9e/949e5e17fbcf1bd1f768a9e1bef6c9a2_558x725.png =250x) ### 这个目录下中存放两种类型的硬件驱动程序源文件: * 一种是实现了刚才介绍过的include目录中的接口的源代码文件,例如hal\_led、hal\_lcd.c和hal\_adc.c等等。 * 另一种是与当前的主板类型相关的驱动程序源文件,比如DMA(Direct Memory Access,直接存储器访问)、OTA(Over The Air,空中升级)等。 ### 简单地讲解一下这个目录中的各个文件: (1)_hal_uart_dma.c:串口DMA(Direct Memory Access,直接存储器访问)驱动程序源文件。 (2)_hal_uart_isr.c:串口ISR(Interrupt Service Routines,中断服务程序)驱动程序源文件。 (3)hal_adc.c:ADC(模拟数字转换)驱动程序源文件 (4)hal_aes.h:AES(Advanced Encryption Standard,高级加密标准)驱动程序头文件。 (5)hal_board_cfg.h:当前主板的硬件资源配置头文件。 (6)hal_ccm.h:CCM(Counter with CBC-MAC,分组密码链接-消息认证码)驱动程序头文件。 (7)hal_dma.c:DMA(Direct Memory Access,直接存储器访问)驱动程序源文件。 (8)hal_dma.h:DMA(Direct Memory Access,直接存储器访问)驱动程序头文件。 (9)hal_flash.c:FLASH(存储器)驱动程序源文件。 (10)hal_key.c:按键驱动程序源文件。 (11)hal_lcd.c:显示屏驱动程序接口文件。 (12)hal_led.h:LED(发光二极管)驱动程序头文件。 (13)hal_mac_cfg.h:MAC(Medium Access Control,媒体介质访问控制)相关配置头文件。 (14)hal_mcu.h:与主控芯片相关的驱动程序头文件。 (15)hal_oad.c:OAD(On Air Download,空中下载)驱动程序源文件。 (16)hal_oad.h:OAD(On Air Download,空中下载)驱动程序头文件。 (17)hal_ota.c:OTA(Over The Air,空中升级)驱动程序源文件。 (18)hal_ota.h:OTA(Over The Air,空中升级)驱动程序头文件。 (19)hal_sleep.c:休眠功能驱动程序源文件。 (20)hal_startup.c:系统启动相关的驱动程序源文件。 (21)hal_timer.c:定时器驱动程序源文件。 (22)hal_types.h:类型定义头文件。 (23)hal_uart.c:串口驱动程序源文件。 <br/> ## **HAL工程结构** 本节内容将以SampleSwitch例程为例来讲解其中的HAL的工程文件结构。 ### **工程组织结构** 打开SampleSwitch工程,可以找到HAL所在目录,如图所示。 ![](https://img.kancloud.cn/a6/dc/a6dcf0b31e351a3f0d5702188ce14676_799x642.png =500x) #### 分别展开Common、Include和Target目录,如图所示。 ![](https://img.kancloud.cn/ba/24/ba24f9346da695951dd7fdae340efdf4_302x684.png =250x) #### Target目录中有一个CC2530EB目录,表示这个工程采用的是CC2530EB主板相关的驱动程序文件。 ### 在CC2530EB目录中包含Config、Drivers和Includes这3个目录。Config目录存放了该主板的硬件资源配置头文件,Drivers目录存放了各种驱动程序源文件,Includes目录存放了各种驱动程序头文件。 <br/> <br/> ## **项目定制** * 如需项目定制开发,可扫码添加项目经理好友(注明“**项目定制**”) * 定制范围:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技术方案 * 善学坊官网:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非项目定制**勿扰**,此处**非**技术支持