我正在尝试使用看门狗超时完成arduino的复位,允许它返回到要编程的引导加载程序。然而,过度拱起的目标只是能够重置设备并通过串行命令重新启动引导加载程序。这方面的很多挑战是我不认为我问的是正确的问题,或者使用正确的术语来搜索它。我有一个UNO运行Arduino 1.5附带的optiboot版本。提前感谢任何回答此问题的人。
答案 0 :(得分:1)
不确定您的问题是什么?
但我听起来像是在询问如何使用看门狗执行软复位。
有几种方法可以导致软复位。我使用的最快/最简单的是
#include <avr/wdt.h>
...
wdt_enable(WDTO_15MS); // provides a Soft Reset when connected to FDTI Port, that provides power
for(;;) {} // wait for it to reset and start over at the boot loader...
答案 1 :(得分:1)
如果您不想使用看门狗定时器并且您的器件支持它,您可以在this线程
中设置RST_CTRL中的RESET位#define RST_SWRST_bm 0x01
#define CCP_IOREG_gc (0xD8<<0)
void force_sw_reset(void)
{
__disable_interrupt();
CCP = (uint8_t)CCP_IOREG_gc;
RST.CTRL = (uint8_t)RST_SWRST_bm
}
如果您不需要执行完全重置,则可以从this线程跳转到重置向量:
#define RESET_VECTOR 0
void (*ptrToFunction)(); // pointer to a function
ptrToFunction = RESET_VECTOR;
(*ptrToFunction)(); // reset!
如果你想使用看门狗定时器,mpflaga有正确的答案,但是根据你的部分,可能会在复位后启用或不启用看门狗定时器,请参阅软复位here上的Atmels页面。如果您的atmega在引导加载程序中重置时没有预料到这可能是您的问题。