Arduino Leonardo无法下载程序总结-Arduino中文社区 - Powered by Discuz! Archiver

希岩 发表于 2018-8-12 16:54

Arduino Leonardo无法下载程序总结

本帖最后由 希岩 于 2018-8-12 17:01 编辑

Arduino Leonardo是个好东西啊,比Arduino Uno的引脚多,还有多了一个定时器。另外,最重要的就是USB功能了,还能用于鼠标和键盘。
有了Atmega32U4的Bootloader,不需要任何下载器就可以升级程序了,是不是很好?
可是这一个芯片的解决方案勇气来头疼啊。
1,首先,每次下完程序就重新叮咚一下,串口号说不定又变了。
2 .程序写的不好,结果就得用ISP方式下载了,串口是不行了。
3.硬件串口加上USB的虚拟串口,有两个串口可以用来了。但不是转发,用的serial.println()不是打在TX RX的。
在说说优点:
1.单芯片自升级好啊,不用买USB to TTL了。
2.四个脚的石英晶振可比 UNO的陶瓷振荡器精度高了好几倍啊。
3.我卡,四个定时器多啊,引脚多啊。有一个用于PLL的定时器可以产生高速的PWMy有木有啊,详细可以看我的另外一个帖子。
4.SPI分开的,有好处也有坏处,好处是SPI和11 12 13能同时用了。
5.serial.println()不用初始化就能用,而且波特率通过上位机想怎么变怎么变。这是因为bootloader中初始化了。

好了,回归正题,Leonardo老是不能下载是怎么回事?
这里只写了两点。说一下Bootloader的原理。我没看leonardo的IAP原理,但用过其他的,我想原理应该差不错。
首先,Bootloader也是一段小程序,比较小,用于初始化USB模块,并把USB配置成串口,然后接收串口来的数据,如果是自编程指令,就把数据在一定偏移量后刷入FFLASH。
其次,刷完就跳转到用户程序中了,就是我们写的程序。
最后,那个BOOTloader程序没有死掉啊,它还在后台运行,我预计是通过中断形式运行的,程序未暴露给用户。为什么这样说呢?
因为,你都不用按复位键或者重新上电复位就能再刷程序,这归功于bootloader还在跑着。

所以,根据以上原理,就可避免刷机成砖了。
一、千万别把全局中断关掉,如下图,我试了下,关闭全局中断,结果连虚拟串口都识别不出来,智能用ISP了。
再把全局中断注释掉,又恢复了,如下图:

如果说USB是在中断中处理任务的话,那除了不能关全局中断,你还不能关掉USB的中断。此外,也不能写一个中断,结果那个中断一直在执行,跳不出来,一跳出来就又进去了,死在那个中断里了,那你让USB中断怎么执行?

二、加了这句 “ asm("wdr");//清看门狗 ”就不行了,死在bootloader里了,跟上面不一样,能识别虚拟串口,但下载失败。不知道什么原因,我也没开看门狗啊。网上说开了看门狗是不行的,也会死在bootloader里,所以没事别开看门狗。但不知道我刷一下看门狗咋也不能了。难道bootloader里用到了看门狗?
好了,这是总结的两点:中断和看门狗。欢迎尝试。

HanzhouMrJack 发表于 2021-2-11 23:43

我按照你第一张图把代码烧录在板里后找不到端口怎么办

希岩 发表于 2021-2-26 12:41

HanzhouMrJack 发表于 2021-2-11 23:43
我按照你第一张图把代码烧录在板里后找不到端口怎么办

用usb asp重刷固件吧
页: [1]
查看完整版本: Arduino Leonardo无法下载程序总结