企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
* 导师**视频**讲解:[**去听课**](https://www.bilibili.com/video/BV1k34y1D7Vz/) >[success] **技术支持说明:** >**1**.一般以自主学习为主 > **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/zigbee) > **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解! <br/> ## **本章学习目标** * 移植M25PE80驱动程序到协议栈中 * 掌握使用M25PE80驱动程序 # ## **驱动程序准备** 我们在协议栈的HAL(硬件适配层)中建立一个目录HW\_XNV用来保存外部FLASH的驱动程序: ![](https://img.kancloud.cn/fd/e4/fde40844902acc50aca7f280fe1eff12_436x246.png =300x) ### 目录HW\_XNV下: ![](https://img.kancloud.cn/bc/26/bc265d05a5e5b6dbce69f93d6342aae2_406x88.png =300x) ### 驱动程序是来自基础篇的内容: ![](https://img.kancloud.cn/1b/02/1b02cb6e89d7e48f3436a31e6d5ff461_182x176.png =150x) ![](https://img.kancloud.cn/b1/81/b18155d7979758da26806caa5d75676b_174x180.png =135x) ### 其中hal\_flash\_spi.h/c是用来适配SPI总线的,因为我们的外部FLASH采用的是型号为M25PE80这款芯片,驱动总线是SPI;而SPI的驱动程序和屏幕使用的程序是一样的!hal\_m25pexx.h/c是外部FLASH的驱动程序。 # ## **驱动程序移植** 在工程中创建相应的工程组,并把驱动程序添加进来: ![](https://img.kancloud.cn/de/77/de775378c591cc63c14741aa5f309345_422x538.png =300x) ### 在工程设置中将程序目录添加进去: ![](https://img.kancloud.cn/df/1a/df1a76ae91ba78d68f7d29b438d3184b_672x428.png =600x) ### 添加的内容: ``` $PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\HW_XNV\HAL_FLASH_SPI $PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\HW_XNV\HAL_M25PExx ``` ### 初始化外部FLASH,在文件hal\_drivers.c中: ![](https://img.kancloud.cn/fa/29/fa29681a71094865c3e37d3a8000cc9e_362x326.png =300x) ### 初始化(记得包含hal\_m25pexx.h头文件): ![](https://img.kancloud.cn/a8/7e/a87eb545df6cc2f50944c1034cb50e6e_598x890.png =400x) # ## **驱动程序应用** 在应用程序zcl\_samplesw.c中,我们设置一个周期性的事件,这个事件会对外部FLASH进行读写操作,应用层事件处理函数zclSampleSw\_event\_loop中,我们添加一段代码: ![](https://img.kancloud.cn/40/9b/409b2d291165a35d39c2a329eefedbda_830x678.png =600x) ### 事件处理函数做了3件事情,首先是把一个变量的值写入到外部FLASH地址为1234位置;然后又从该地址把数据读取到另一个变量中;最后把写入的数值和读取到的数值在显示屏上显示出来! # ## **仿真调试** 编译工程后,把程序烧录到开发板中,可以看到显示屏显示读写外部FLASH的数值,写入和读取到的数值是一样的,说明外部FLASH正常工作,且驱动程序没有问题。