0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

同样的代码在官方开发板上运行正常,在自己板子上就跑不起来,怎么办?

jf_14701710 来源:jf_14701710 作者:jf_14701710 2025-05-12 15:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

同样的代码在Nordic官方开发板上可以运行正常,但在自己板子上就跑不起来,如果你碰到了上述情况,建议按照如下步骤进行自检:

首先确认用户板元器件焊接良好,功能正常。如果你的板子有LED的话,你可以下载Blinky程序去点亮它,Blinky程序所在SDK目录为:SDK安装目录examplesperipheralblinky。如果你的板子没有LED,但有UART的话,可以下载CLI代码去进行UART交互,CLI代码所在目录为:SDK安装目录examplesperipheralcli。如果这2个程序能运行正常,说明你的焊接问题不大。

确认高频晶振工作正常。由于射频一定要用到外部高频晶振,建议用示波器测一下高频晶振是否可以正常起振,以确保高频晶振工作没问题。这里需要注意的是,Nordic nRF5芯片高频时钟默认使用内部RC作为时钟源,为了让外部高频晶振起振,必须使用代码显式地打开高频晶振,可以使用如下2种方式之一来显式地打开高频高精度外部晶振:

API方式

ret_code_t err_code = nrf_drv_clock_init();
ASSERT((err_code == NRF_SUCCESS) || (err_code == NRF_ERROR_MODULE_ALREADY_INITIALIZED));

nrf_drv_clock_hfclk_request(NULL);
while (!nrf_drv_clock_hfclk_is_running())
{
        // spin lock
}

直接操作寄存器方式

NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;

NRF_CLOCK->TASKS_HFCLKSTART = 1;

while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);

确认有没有烧写softdevice以及softdevice版本是否正确。请使用SDK里面自带的softdevice进行测试

确认有没有外部低频32K晶振。Softdevice默认使用外部32K晶振作为低频时钟,如果你的板子没有外部32K晶振,那么需要更改协议栈默认初始化参数,将低频时钟改为内部RC 32K。最新版本SDK需要更改sdk_config.h文件中的如下地方:

wKgZPGghopyAFb6gAAF3R5HPIFk806.pngwKgZO2ghop2AUYPfAAHdSG09Xkc815.png

老版本SDK(SDK13之前)直接在源文件中做如下更改:

                  nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC;

                 clock_lf_cfg.source = NRF_CLOCK_LF_SRC_RC;

                 clock_lf_cfg.rc_ctiv = 16;

                 clock_lf_cfg.rc_temp_ctiv = 2;
               //nRF52为2;nRF51为1;详情请看SDK相关头文件说明

确认有没有打开DCDC模式。软件打开了DCDC模式,而用户板又没有DCDC相关外围电路,那么板子跑不起来也就正常了。如果属于这种情况,把软件中的调用语句:sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE),删掉即可。

确认用户板芯片型号和DK上的芯片型号是不是一致。nRF51/nRF52系列里面包含多个子产品,每个子产品之间Flash或者RAM空间会有所不同。Nordic DK使用了资源最大最全的那个型号,如果你选择的型号Flash空间或者RAM空间跟DK上的不一样,那么你需要将工具链的链接脚本中Flash和RAM的值进行相应调整,其中Keil调整Flash和RAM空间的界面如下所示:

wKgZPGghop6AQKU7AAFy1kdqjwc963.png

确认用户板引脚定义有没有与DK相冲突。nRF5芯片在用户板上有可能与传感器,显示屏,GPRS模块,按键等相连,这其中用到的IO引脚有可能被固件初始化为其他用途,比如UART日志打印,也就是说,同样的引脚,用户板定义的功能和DK定义的功能不一致,所以DK可以正常运行,而用户板无法正常运行。此时一定要把相关引脚按照用户板的设计目的重新初始化,这样就可以解决这个冲突问题。常见的资源定义冲突有:

buttons_leds_init()函数。buttons_leds_init会将某些IO口定义为按键和LED,如果用户板和DK定义不一样,有可能会出问题。

uart_init()。当采用uart打印log的时候,固件程序会对uart进行初始化,此时有可能会导致资源定义冲突,比如用户板将相关uart引脚用于其他功能,从而导致板子跑不起来。

SPI,TWI等其他外设资源定义冲突。必须确保所有外设引脚定义跟用户板一致,而不是使用DK默认值,否则有可能导致用户板跑不起来。

请确认外部高频晶振的频率。这个只有nRF51有这个检查项,nRF52不存在这个问题,如果你使用的是nRF52的话,可以跳过这项不看。nRF51同时支持16M和32M外部晶振(注:nRF52只支持32M外部晶振),而且系统默认外部晶振为16M,如果你选择的外部晶振是32M,那么需要在软件中对其进行额外配置,否则系统跑不起来。此种情况有2种解决方法:

方法1。修改UICR中的寄存器XTALFREQ,由于UICR是Flash,对UICR的修改可以和代码下载合并在一块去做。(推荐使用方法1)

方法2。在main函数的开始处,加入NRF_CLOCK->XTALFREQ=0x00,即可。

最后也是最重要的,debug问题具体出在哪,你可以通过打日志方式进行debug,也可以通过IDE的debug功能去调试,具体请参考:如何调试nRF5 SDK。记住,定位问题的时候,一定要定位到问题具体出在哪一行代码,而不是某个函数,否则问题就不算定位成功。问题没有定位成功,当然就无从下手去解决它。反之,定位到出问题的代码行,你自己就可以很快分析问题原因所在,从而快速解决它。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    6122

    浏览量

    113317
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1093

    浏览量

    51197
  • Nordic
    +关注

    关注

    9

    文章

    238

    浏览量

    48765
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何自己设计一个基于RISC-V的SoC架构,最后可以FPGA起来

    如何自己设计一个基于RISC-V的SoC架构,最后可以FPGA起来
    发表于 11-11 08:03

    RV-STAR开发板使用JLink连接,什么原因?

    用Type C连接RV-STAR开发板下载和调试都OK,但是使用JLink连接,按照Nuclei Studio IDE 使用说明Release 2020.09 的操作,同时也按论坛
    发表于 11-07 07:27

    windows用Eclipse IDE调试蜂鸟E203,用的开发板是哪个型号的?

    windows用Eclipse IDE调试蜂鸟E203,用的开发板是哪个型号的,有哪位大佬调试出来了,求告知
    发表于 11-07 07:19

    Windows10运行vivado使用tcl文件创建E203项目路径错误的问题

    prologue_setup.tcl文件后,都会出现文件路径匹配,总是路径前多出一个盘符加冒号,类似“e:e:....”,所以查阅了相关资料后,手动将prologue_setup.tcl文件中的
    发表于 10-28 07:19

    潘多拉开发板VSCODE无法执行micropython怎么解决?

    潘多拉开发板VSCODE 1.49.3中无法执行micropython程序,打不开终端, 已经正确安装了rt-thread micropython插件, 板子也已经正常下载
    发表于 10-14 06:09

    Cherry USB可以cortex-A7 开发板使用吗?

    请教下 Cherry USB 可以cortex-A7 开发板使用吗
    发表于 09-25 06:24

    Adafruit 4343 开发板红色 LED 闪烁, 且屏幕工作, 怎么解决?

    Adafruit 4343 开发板红色 LED 闪烁, 且屏幕工作, 该怎么办
    发表于 09-08 07:19

    【汇思博SEEK100开发板试用体验】开发板鸿蒙OS搭建QT开发环境

    安装和运行。 (四)部署到 SEEK100 开发板 1. 使用 USB 数据线将 SEEK100 开发板与电脑连接,确保开发板处于正常工作状
    发表于 08-24 18:34

    起来玩转CW32L011无刷直流电机驱动开发板

    、体验总结 CW32生态社区推出的这个CW32L011无刷直流电机驱动开发板板子上接口功能还是比较全面的,硬件基本相当于产品级的了,另外板子
    发表于 08-21 23:04

    【飞凌T527N开发板试用】QT应用开发

    点击左下角 锤子?图标 就可以交叉编译项目。 编译出的arm架构可执行文件如下: 将目标文件发送到开发板开发板运行,自定义的
    发表于 08-19 15:04

    【干货分享】M-K1HSE开发板使用SecureCRT工具进行调试

    SecureCRT是一款支持SSH协议的终端仿真软件,可通过串口或网口对开发板系统信息进行查看、对开发板系统进行调试等。
    的头像 发表于 08-12 08:07 1144次阅读
    【干货分享】<b class='flag-5'>在</b>M-K1HSE<b class='flag-5'>开发板</b><b class='flag-5'>上</b>使用SecureCRT工具进行调试

    V2板子上部署豆包模型调试指南

    我们将修改好的代码,上传到板子,之后终端上运行我们的程序。板子一定要先连接Wi-Fi,再去
    发表于 05-25 10:17

    i.MX RT 1176正常运行代码时与使用IAR调试代码时存在一些奇怪的差异,为什么?

    i.MX RT 1176 正常运行代码时的行为与使用 IAR 调试代码时的行为之间存在一
    发表于 03-17 07:26

    STM32F103RBT6开发板每次程序都得重新烧录才能正常运行,如何解决?

    每次板子都得重新烧录程序才能运行起来。第一次烧录完程序后,能正常运行,等我把开关断开再打开,程序就基本
    发表于 03-11 07:40

    #DeepSeek Banana Pi #RK3576 #RK3588 开发板运行良好,运行效率高

    开发板
    Banana Pi开源硬件
    发布于 :2025年02月08日 15:39:38