![21天入门低功耗蓝牙5.x开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/359/44819359/b_44819359.jpg)
1.5 如何将工程移植到不同的芯片
1.5.1 在SES中将nRF52832的工程移植到nRF52840
在开发过程中,有时需要在不同芯片之间移植工程,例如开发者原本使用的芯片是nRF52832,但由于需要更多的存储空间及资源,后来使用的芯片是nRF52840。移植的方法有两种。
第一种方法是在nRF52840的例程基础上,将nRF52832例程的上层应用移植过来,这样的好处是新工程很少会产生芯片适应性问题,其缺点是如果原来的上层应用结构复杂,底层驱动嵌入得较多,则移植需要很大的人力和时间成本。本节主要介绍第二种方法,即直接通过修改工程的配置,将原来的工程移植到新的平台(芯片)上。这里以SES开发平台为例,介绍将工程从nRF52832移植到nRF52840的方法,该方法的步骤如下。
(1)修改所选用的协议栈型号。由于不同的芯片与应用需要使用不同的协议栈,通常,nRF52832使用的协议栈是S132,nRF52840使用的协议栈是S140。
(2)单击工程右上角的“”(设置)按钮,选择“Options Under Node”选项,如图1-43所示,工程下会出现很多设置选项。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-41-2.jpg?sign=1738799056-Ifw1FH1spAsBwrUWwspadu7yxtbJgHoE-0-bf7294a37b77e797c81333603dd62df2)
图1-43
(3)双击“Additional Load File[0]”选项,如图1-44所示,选择S140协议栈的hex文件。根据nRF5 SDK的目录可知,该hex文件的存放路径为“…\A_nRF5_SDK_17.1.0\components\softdevice\s140\hex”。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-41-3.jpg?sign=1738799056-ZpmGT2hwFvb8tSnid79Wu6s2IztXzdO1-0-27c83c1277448b967bfcd180e492de21)
图1-44
(4)修改芯片型号。修改芯片型号的方式有两种:
第一种方式是右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,如图1-45所示。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-42-1.jpg?sign=1738799056-C6PcEr9YUVtMegm2QCv52uNRWOs8hSFu-0-50f40112d86a339ad5956b6a677a3ca9)
图1-45
在弹出的对话框中,将原来“Release”的配置改为“Common”。在“Debugger”下的“Target Device”中,将“nRF52832_xxAA”改为“nRF52840_xxAA”,如图1-46所示。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-42-2.jpg?sign=1738799056-wvUDB6gJBKltY2BmA4y7bTClDj6RYWFH-0-368b733adf111548e507da3d2897b887)
图1-46
第二种方法是选择“Options Under Node”,在弹出的选项中,将“Target Device”右侧的“nRF52832_xxAA”改为“nRF52840_xxAA”,如图1-47所示。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-43-1.jpg?sign=1738799056-oGHQWVEynAW7lB4Y021FKtAapduor0qW-0-fd2d79fd42badfec0814fd28d2891326)
图1-47
(5)修改全局宏定义变量。右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,在弹出的对话框中,双击“Common”中的“Linker”,在“Section Placement Macros”右侧修改对应的存储空间,如图1-48所示。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-43-2.jpg?sign=1738799056-fCbPVU8jul6XPA0vpo2oytVetS1ajC1h-0-aad0975b2e42ca3b43dd8847cc07874f)
图1-48
存储空间修改前如图1-49所示,修改后如图1-50所示。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-44-1.jpg?sign=1738799056-NuhxnxvRawi42TXT6dhGIQnPPcNUsMYX-0-48a4080cee321a8d94872faa6afce968)
图1-49
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-44-2.jpg?sign=1738799056-2OSJyjW2gmwHD6PsHuNE7AXsBKb9Nzm2-0-f35a16b8b94918a1b6832d08cc80d662)
图1-50
其中FLASH_PH_START到FLASH_START的空间是协议栈占用的Flash空间,App程序存放在FLASH_START后面的Flash空间中。同样,RAM_PH_START到RAM_STRAT的空间是协议栈使用的RAM空间,RAM_START后面的RAM供App程序使用。协议栈占用的Flash空间是固定的,但占用的RAM空间会随App程序的不同而不同,因此RAM_START的值需要根据实际的App程序进行调整。
(6)修改原本的宏定义。右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,在弹出的对话框的Common配置下,选择“Processor”选项下的“Preprocessor Definitions”,做如下修改(见图1-51)。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-44-3.jpg?sign=1738799056-DLDv10TbfZ49QkpSSpsGe4dndTIkEmCL-0-fbae92c795e014ce1413f7eaa520230f)
图1-51
• 将BOARD_PCA10040改为BOARD_PCA10056;
• 去掉NRF52的宏定义;
• 将NRF52832_XXAA改为NRF52840_XXAA;
• 将S132改为S140。
(7)nRF52832的工程存放在工程目录中的pca10040文件夹下,nRF52840的工程存放在工程目录下的pca10056文件夹下,如图1-52所示,在修改配置时可以参考。
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-45-1.jpg?sign=1738799056-c048GYNYXhWOiqs3x9OkTyJE4Tas25i2-0-2c80893669dee58425dfd4e16f3f583b)
图1-52
(8)修改Softdevice协议栈头文件路径。右键单击工程名“Project‘ble_app_uart_pca10040_s132’”,在弹出的右键菜单中选择“Options”,在弹出的对话框的Common配置下,选择“Processor”选项下的“User Include Directiories”,做如下修改(见图1-53)。将S132的头文件:
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-45-2.jpg?sign=1738799056-8j38cETe93QXuqibx35Tnht5A63Cswne-0-6c31623c296149432a9c3968db44ebe6)
改为S140的头文件:
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-45-3.jpg?sign=1738799056-c3ipxbdmzwwAOW6uixQl9av9O4MGELUT-0-fdfa295baba889fc0501687b681f2f91)
![](https://epubservercos.yuewen.com/D95702/23950066309696006/epubprivate/OEBPS/Images/43149-00-45-4.jpg?sign=1738799056-ULhCUjlBgQQFMr6pfoaEftuVnM9dkyKw-0-e94faffe7d2425f50785fd3d16d75a5b)
图1-53