首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Bootloader重置Arduino软件

使用Bootloader重置Arduino软件
EN

Stack Overflow用户
提问于 2014-01-22 19:35:42
回答 2查看 1.4K关注 0票数 2

我正在尝试使用看门狗超时来完成arduino的重置,该超时允许它返回引导加载程序进行编程。然而,最重要的目标只是能够通过串行命令重置设备并重新启动引导加载程序。这方面的许多挑战是,我不认为我提出了正确的问题,或者没有使用正确的术语来搜索它。我有一个运行Arduino 1.5附带的optiboot版本的UNO。对于回答这个问题的人,我要提前向您表示感谢。

EN

回答 2

Stack Overflow用户

发布于 2014-01-23 10:44:22

不确定你的问题是什么?

但我听起来像是你在问如何使用看门狗执行软重置。

有几种方法可以导致软重置。我使用的最快/最简单的集合是;

代码语言:javascript
复制
#include <avr/wdt.h>

..。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-07-03 00:35:03

如果您不想使用看门狗定时器,并且您的部件支持它,则可以从this线程设置RST_CTRL中的复位位

代码语言:javascript
复制
#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线程跳转到重置向量:

代码语言:javascript
复制
#define RESET_VECTOR 0
void (*ptrToFunction)(); // pointer to a function
ptrToFunction = RESET_VECTOR;
(*ptrToFunction)(); // reset!

如果您想要使用看门狗定时器mpflaga有正确的答案,但请记住,看门狗定时器在复位后可能会启用,也可能不会启用,请参见Atmels页上的soft reset here。如果你的atmega在你意想不到的时候在bootloader中重置,这很可能是你的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21281816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档