Arduino通过USB转TTL无BootLoader(引导程序)烧录程序的两种办法

注意

(这个实验室基于stm32duino的,avr单片机并不直接通用,不过如果你准备尝试使用串口来给avr单片机(就是Arduino官方出的几款Arduino)烧录Arduino的BootLoader,建议直接放弃因为avr单片机并不支持直接使用串口上传程序,而且Arduino的BootLoader好像目的也就是让Arduino能够直接串口烧录程序。

也就是说你不能在没有BootLoader的情况下烧录avr-Arduino的BootLoader,而当你可以用串口给avr-Arduino烧录BootLoader时就说明你已经有BootLoader了,可以不用再烧录一次了

于BootLoader的废话

因为准备参加电赛,想着如果比赛可以用Arduino或许会方便很多,所以准备研究一下Arduino的底层程序,学习一下如何把随便一块芯片都能做成Arduino来开发。不过这篇帖子和此并没有太大关系,只是属于机缘巧合做的一个小实验而已,对于已知BootLoader的原理或者想自己写BootLoader的朋友并无太大帮助。

最开始初学的时候,买了一块nano板,结果在我准备做点骚操作的时候(具体忘了做了啥了,好像是写错了个指针?),它被我搞废了,烧录不了程序。然后各种查资料,怀疑是BootLoader的问题,需要重新烧BootLoader。(事实上现在我也不知道具体是不是真的,因为拖延症导致我很久没去碰这块板子,现在不知道扔哪去了。而且当时没有记录的习惯,这个世界又多了个未解之谜)

当时我并不清除BootLoader是个什么东西,毕竟年轻的我看见hardware文件夹里那一堆文件就头(tuo)疼(yan),但是总体印象大概就是Arduino的便捷和这玩意有很大关系。然后在我脑海中Arduino不能没有BootLoader这个想法就形成了,于是这次准备把MSP430做成Arduino的时候我就想到了是不是要烧BootLoader?但是打开官方给出的energia软件,在其目录下并未发现BootLoader的文件,而且软件也没有给出烧录引导程序这一选项,所以我对我的认知产生了一丝丝怀疑。

于是,我选择再搜索一下BootLoader到底是什么,百度的解释是可以把它当做一个启动引导程序,但是感觉这种解释有点抽象,然后我找到另外一篇文章是说把它当做一个系统,我们的程序就是运行在这个系统的软件,这种说法感觉有一定道理,但是感觉又不是那么对,因为平常如果我们没有BootLoader,我们也可以对普通单片机烧录程序,但是如果软件没了系统,是无法直接在电脑裸机上运行的。但是这个文章还是给了我一定的思路,所以我搜索了一下“如何使用串口给avr烧录程序”,然后我找到了这个。然后结合我目前掌握的知识和已知条件:

  1. 每次Arduino在上传程序时都会进行一次复位,我怀疑是为了让Arduino进入BootLoader模式
  2. 没有BootLoader的avr单片机不能直接在ArduinoIDE上烧录程序,在如何使用串口给avr烧录程序那篇文章里,提到了需要给avr烧录BootLoader后才可以通过串口给avr直接烧录程序
  3. Arduino UNO的原理图中,官方最原版使用了一块atmega16u2,而市面上常见的UNO R3都是使用的一块ch340(USB转串口芯片)来代替,说明BootLoader并没有直接让avr芯片拥有USB功能
  4. Arduino Leonardo的原理图就没有使用ch340或是其他芯片,而是直接用USB数据口连接USB接口,而Leonardo和UNO这些的区别在于其芯片atmega32u4可以作为USB设备来识别。

所以我姑且对avr-Arduino的BootLoader进行了这样的推测性理解:Arduino的BootLoader可以当做一段启动程序,它的作用是让Arduino可以拥有与电脑直接(如Leonardo)(或间接(如UNO)),然后烧录时会把程序发送给BootLoader处理,然后BootLoader将其放到指定的ROM地址作为起始地址。在烧录结束后,芯片将从BootLoader部分跳到程序部分。而普通使用时,因为没有复位进入烧录这一行为,BootLoader会被直接运行到底然后跳到真正程序起始位。如果不烧录BootLoader,可以节省出BootLoader的内存空间,但是需要比较麻烦的接线方式(如JTAG,ISP之类)

当然以上为我的个人推理猜测,目前太忙(tuo)还没有专门系统地学习这一块知识(内容感觉太杂不确定学习路线,有点东学点西学点的样子,如果有大佬能够指导一下方向就太好了),如果有错误非常欢迎指正。

然后以下才进入正文……

通过ArduinoIDE的Serial模式烧录

因为没有找到MSP430的引导程序,而avr的引导程序又需要烧熔丝,和我的目的(研究msp430的Arduino)有比较大的差别,所以我选择了stm32来做测试。

用的是stm32f103c8t6的小蓝板(blue pill),大概步骤为:

  1. ArduinoIDE安装开发板:http://dan.drown.org/stm32duino/package_STM32duino_index.json

  1. stm32f103c8t6调整好boot引脚,连接usb转ttl,然后连接电脑

  2. 随便写个程序,注意引脚名称修改,我这里使用了blink例程,把引脚改为了PC13

   void setup() {pinMode(PC13, OUTPUT);}void loop() {digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)delay(1000);                       // wait for a seconddigitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOWdelay(1000);                       // wait for a second}
  1. 选择好板子、端口,然后选择烧录模式为serial

  1. 点击上传即可

详细步骤请参考帖子:http://www.elecfans.com/d/1002467.html

通过二进制文件烧录

这个方法需要下载软件,软件使用时只需要一路点next即可,不懂的地方直接用翻译软件翻译一下就懂了,stm32的二进制烧录方式具体步骤可以参考这个帖子:https://www.cnblogs.com/wangguchao/p/7308657.html

而Arduino的二进制文件可以通过ArduinoIDE的项目-导出二进制文件获取,会导出到工作文件夹下。

总结

这个帖子其实就是做个思路引导,同时也是自己的学习笔记,如果需要烧录stm32的Arduino程序,在暂时不知道BootLoader原理或怎么写的情况下,可以用这种方式凑合着下载,而同理,avr可以用isp或jtag,msp430用jtag或sbw或bsl来下载。不过最好再深入学习一下吧……

以上内容如有错误或遗漏,欢迎指正!

Arduino通过USB转TTL无BootLoader烧录程序的两种办法相关推荐

  1. DSP烧录程序的两种方式

    (1)通过传统PC机上位机软件烧写 (2)通过MCU通过SPI接口给DSP烧录,其中的烧录文件以多个个.h文件方式集成在MCU工程中一起编译,上电运行后给DSP加载. 记得早年在威马后面做一个语音识别 ...

  2. win7 计算机名称 ip6,Win7系统提示ipv6无网络访问权限的两种原因及解决方法

    Win7系统提示ipv6无网络访问权限,导致无法上网,这该如何解决呢?ipv6无网络访问权限的原因有很多种,针对此问题,下面脚本之家的教大家解决ipv6无网络访问权限的问题,大家一起来看看吧. 故障原 ...

  3. 通过USB转TTL串口下载stm32程序

    文章目录 前言 一.硬件及其接线 二.使用步骤 1.主芯片STM32F103C8T6开发板 2.转串口模块接线 3.CH340驱动及安装方法 4.CH340驱动及安装方法 4.下载测试 5.0.91寸 ...

  4. 使用USB转ttl给stm32下载程序

    电路连接 0准备 最小系统版的BOOT0置1,BOOT1置0 USB转TTL的5V与VCC短接 1连接 USB转TTL STM32 单片机引脚定义 3V3 3V3 TXD PA10 RXD RXD P ...

  5. 串口烧录(无仿真器烧录程序)

    没有ST-Link或者DAP,通过USB可以将Keil中的程序烧录到开发板上 http://t.csdn.cn/FXdOQ 注意程序选Output文件夹中的.hex文件,如果没找到,可以根据图片设置之 ...

  6. C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中,常常为了美观需要设置窗体属性"FormBorderStyle"(窗体边框和标题栏外观)为None无标题窗口.此时隐藏标题的窗口怎样实现移动呢?我根据自己的项目从 ...

  7. openwrt路由器固件烧录mt7621用tftp方式实现烧录固件的两种方式

    tftp软件: 链接:https://pan.baidu.com/s/1VYRUgzCkh5PEaBK0ZDJyKQ 提取码:f8ba 两种方式中tftpd32都必须处于运行模式 存疑?:目前看只有设 ...

  8. 微信小程序订票选座PHP后台网站MySQL数据库和无前端小程序版本两个程序

    微信小程序订票选座PHP后台网站MySQL数据库和无前端小程 下载点此去 两个相同功能 差别在一个有前端微信小程序 一个没有 (1)登录功能:注册普通账号登录:也可以直接使用微信登录:登录后可以修改用 ...

  9. 【无标题】单例模式的两种创建方式:饿汉式和懒汉式

    这里写自定义目录标题 单例模式的两种创建方式:饿汉式和懒汉式 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂 ...

最新文章

  1. 初识C语言---(1)
  2. C#用Tesseract进行OCR识别,可识别中英日韩所有语言
  3. 解读zookeeper的配置项
  4. 农发行:BI数据平台建设
  5. window xp系统安装php环境_Windows Server 2003及XP系统如何安装SQL Server 2000数据库?
  6. kafka 主动消费_Kafka核心API——Consumer消费者
  7. CVPR 2021 Oral | GLEAN: 基于隐式生成库的高倍率图像超分辨率
  8. Vue.js 入门案例
  9. vip会员统计表 (vip等级是灵活配置的 非写死1是金卡用户 2是什么 等)
  10. Fabric学习--环境搭建
  11. MyEclipse10破解方法
  12. 同步时间服务器修改同步间隔,如何更改Windows 10时间同步间隔
  13. SQL基础【一.DQL 数据查询语言】
  14. 华为智慧屏鸿蒙os的特点,华为智慧屏功能特点一览
  15. 黑桃怎么用html代码,index.html
  16. 【问题】PPS、PPSX自动放映格式打开直接进入编辑模式
  17. 0xffffffff是多少?
  18. 12.寻光集后台管理系统-库存信息(后端)
  19. 浏览器访问jsp页面
  20. Java使用spire进行word文档的替换

热门文章

  1. 【Python Sympy】将表达式化为关于x的多项式,求出多项式系数
  2. 文献综述怎么写 ,一直没头绪写不出来怎么办?
  3. CSS(二)文字样式
  4. 《Linux命令行与shell脚本编程大全》笔记一
  5. 函数返回值的优化技术(RVO和右值引用)
  6. STM32,三色灯组合任意颜色
  7. [转载]读史札记22:政治家的道德底线——谈李斯之死
  8. 基于STM32移植U8g2图形库——OLED显示(HAL库)
  9. 事件分发机制Android,宅家36天咸鱼翻身入职腾讯,复习指南
  10. 下载安装Psychtoolbox详细教程【Windows10+Matlab R2020a】