#定义GPIO \u红色。\u红色。\u红色_发光的U U形端口\u端口\u港口35;定义定义GPIO\u红色\u红色发光的U P P P U U PiPio 尖尖尖尖定义GPIO\u红色\u红色_形理理理理理理港港口u端口端口GPIO端口\u港口u端口0;定义定义GPIO IO\u红色\u红色红色_发光发光发光的U U钉钉GPIO UU PiPiPiu PiPiu PiPiU U U P P P IO _PiuPiu P P P P P P P P P P U U U U U U Pi \\\\\\\\\\U GPIO(LED,GPIO\绿色\U LED\端口,GPIO\ u GREEN\ u LED\ u PIN,PID\ GPIO);RESERVE\ u GPIO(LED,GPIO\ u BLUE\ u LED\ u PORT,GPIO\ u BLUE\ u LED\ u PIN,PID\ GPIO);GPIO\ u ConfigurePin(GPIO\ u RED\ u LED\ u PORT,GPIO\ u RED\ u LED\ u PIN,OUTPUT,PID\ u GPIO,true);GPIO\ u ConfigurePin(GPIO\ u GREEN\ u LED\ u PORT,GPIO\ u GREEN\ u LED\ u PIN,OUTPUT,PID\ u GPIO,true);GPIO\ u ConfigurePin(GPIO\ u BLUE\ u LED\ u PORT,GPIO\ u BLUE\ u LED\ u PIN,OUTPUT,PID\ u GPIO,true);
嗨,螺旋,
此宏启用开发/调试模式。对于生产模式生成,必须禁用它。请定义此宏并在调试模式下运行代码。你的固件崩溃了吗?
谢谢,下午好
是的,当我定义这个宏时,一切正常(没有崩溃)。
我想在生产模式下禁用它,但在大约两秒钟后它崩溃并重新启动-但只有当我将它烧成Flash时,而不是在调试器中运行它时。
我把引导程序烧了。
嗨,螺旋,
那么,你打算烧了OTP然后从那里启动吗?当CFG\u DEVELOPMENT\u DEBUG被启用时,它允许模拟OTP镜像到系统RAM。你能澄清一下你在OTP中烧了哪个引导程序吗?如果您将睡眠配置更改为ARCH\u EXT\u sleep\u ON,是否仍面临相同的问题?
谢谢,下午好
我们的硬件制造商已经烧毁了一个在OTP引导加载程序,我们是从那里引导,有没有在闪存引导加载程序。不幸的是,我不知道到底是哪个引导程序,但我怀疑它是相当标准的(但可能是一个旧的SDK?)。。。
当我使用ble\u app\u all\u in \u one时,这个问题也会发生。我只添加了一个LED输出,以查看FW何时运行,何时重新启动。。。使用CFG\u DEVELOPMENT\u DEBUG enabled,一切正常。但当我禁用CFG\u DEVELOPMENT\u DEBUG时,它每5秒就重新启动一次。如果我用BLE快速连接,在5秒钟之前,只要我保持连接,它就不会重新启动。一旦我断开连接,几秒钟后它就会重新启动。
这种情况发生在ARCH\u EXT\u SLEEP\u OTP\u COPY\u ON以及ARCH\u EXT\u SLEEP\u ON。。。
嗨,螺旋,
你能分享一下你所做的修改吗?请尝试使用没有睡眠模式的SDK的ble\u app\u barebone示例,并且没有定义CFG\u DEVELOPMENT\u DEBUG。从Flash启动时也有同样的问题吗?请尝试从系统RAM启动。
谢谢,下午好
我对ble\u app\u all\u in\u one项目以及ble\u app\u barebone所做的唯一修改是将这些行添加到user\u periph\u setup.c GPIO\u reservations()和set\u pad\u functions()以关闭板指示灯。引导加载程序将所有三个指示灯都打开,因此我可以通过指示灯的状态来查看何时重新启动。
问题:
嗨,螺旋,
您是否有定制板,或者您正在使用我们的开发包?由于这两个项目都在活动模式下工作,并且没有定义CFG\u DEVELOPMENT\u DEBUG,所以我猜问题可能与睡眠模式有关。你用哪个时钟作为低功耗时钟?
谢谢,下午好
是的,很明显问题与睡眠模式有关。
如上所述,问题发生在定制板上。定制板烧了OTP。
我也有一个基本的开发工具包,那里的问题没有发生,而且OTP也没有烧到那里。
我的OTP头上写着Sleep Clock Source=External crystal。硬件文档也证实了32k振荡器被用作扩展睡眠模式的时钟。也许我没有在我的应用程序中正确配置它?检查什么?
当然我可以烧SPI flash,但是如果我烧bootloader到flash并且OTP也烧了,它会在flash中使用bootloader吗?似乎不是,我今天也测试过了。当我将引导加载程序烧成Flash时,问题也会发生。
当我通过Keil下载固件时,Keil会通过调试器。使用调试器时不会出现问题。有没有办法通过Keil下载固件,然后分离调试器?
好的,我在arch_main.c中找到了以下两行:
如果存在这些问题,比如定义DEVELOPMENT\u DEBUG时,就不会发生崩溃/重新启动。
嗨,螺旋,
根据DA14585数据表,SYS\u CTRL\u REG的DEV\u PHASE位字段设置开发阶段模式。如果设置了该位,则与OTP\u COPY位结合,OTP DMA将模拟OTP镜像到系统RAM。没有实际写入RAM,但是所花费的时间与镜像发生的时间完全相同。这是为了模仿这样的行为,就好像系统代码已经在OTP中,镜像在唤醒后发生,但是(开发)代码仍然驻留在外部源代码中。如果将该位设置为“0”并且OTP\u COPY='1',则OTP DMA实际上将在唤醒时执行OTP镜像。
那么,在开发阶段模式下,代码在所有情况下都能正确运行吗?
谢谢,下午好
是的,这就是我上面说的。是的,我看过数据表。
嗨,螺旋,
谢谢你的指示。
你好,下午好
有什么消息吗?你认为我应该在产品构建中启用这个标志吗???对我来说,这个问题还没有解决。这充其量只是一个解决办法。
嗨,螺旋,
你在ble\u app\u all\u in \u one project中做过其他修改吗?默认的SDK在广告期间使用OTP拷贝的扩展睡眠模式。请检查user\u app\u adv\u start()。如果您有CFG\u DEVELOPMENT\u DEBUG,我假设您应该烧掉OTP。但是,请注意,OTP代表一次性可编程,因此不能多次擦除和重新写入OTP,但只能翻转仍设置为0的位并将其转换为1。
谢谢,下午好