嵌入式入门

最近买了两块开发板,一块是精英 STM32F103 开发板,用来学习stm32,另一块是阿尔法Linux开发板,用来学习uboot,linux内核以及驱动、操作系统移植这些,感觉挺有意思的。

能学的,想学的东西挺多的,主要是想自己设计一些小东西,从电路原理图的设计,再到芯片元器件选型,绘制PCB,还有各种外设驱动,接口,通信协议,RTOS以及GUI等,还有linux的内核以及驱动这些。

东西还是挺多的,但是感兴趣的话,学起来就不会觉得无聊了。

这篇文章主要是记录自己的一些问题,会一直更新下去,希望能帮到后来者。

这些内容可能不正确,只是自己在学习过程中遇到的一些疑惑,然后通过查看文档和资料,给出的自己的一些见解,如果不对,还请指出。
这篇文章,更多侧重于软件开发转嵌入式的一个角度吧,可能你会遇到和我一样的问题。

另外,在刚开始学嵌入式时,有一种误解,就是需要学习模电、数电这些,但是就我自己上手的经验来看,这些东西可以后期有一定经验了再去学习,不然容易产生挫败感,渐渐丧失兴趣。
即使真的要学,也可以在看电路原理图时有针对性地学习,能看懂如何接线,每个模块的作用就行了(仅针对嵌入式软件)。
还有电烙铁、焊丝、万用表、示波器这些,也不是必需品,有钱可以入,没钱直接用开发板,或者面包板+杜邦线也是问题不大。
(在刚开始摸索时,这些确实成为了一部分阻碍我的因素,所以希望能给后人一些启发,当然学生党的话,建议进实验室,用学校的设备,比较省钱)

硬件

开发板
对于初学者来说,可以使用资料比较全的正点原子、野火,也可以使用江协的。
正点原子的开发板,质量还是有保证的,资料也很丰富,但是有点过于丰富了,板子多,外设多,教程理论知识偏多,比较费时间。
江协使用的是最小系统板+面包板+外设+跳线,这样更容易理解整个的电路构成,从一个最小系统板是如何工作的,包含的五个基本模块(电源、晶振、复位、下载、boot),再到各种常见的外设,如何根据原理图连接外设,如何去理解这些寄存器等等,比较重实操,跟下来很有收获。

正点原子的前面理论知识过多,容易给人挫败感,讲的比较琐碎,听着比较无聊,但是资料很全,如果自己能看懂原理图,就可以跟着江协的视频看。当然,耐着性子看,基础还是能很牢固的,就是真的要耐着性子看。

其实,入门之后,就可以直接自己看源码和文档了,看视频比较费时间。正点原子的例程比较丰富,所有的例程都提供了寄存器版本和HAL库版本。

例程,其实就是程序。
寄存器版和标准库版应当是一个版本,HAL库是ST主推的开发方式,搭配stm32cubeIDE会很方便,但是隐藏了底层细节。
标准库版已经不再更新了,所以学习hal库也是有必要的,上手也很快。

调试器(也叫仿真器)
调试器有好几种,常见的有stlink,jlink,daplink
正点原子和江协都是用的stlink,便宜稳定又好用。
img
上图左边是st官方的stlink,正点原子的stlink也长这样,右边是江协使用的stlink,大部分国产stlink都长这样。

不过正点原子的stlink使用的是jtag接口,占位置也占IO,有20个引脚,很难插拔。
江协使用的stlink使用的是swd接口,只需要四个引脚。

不过jtag引脚的仿真器,也可以直接使用swd调试,只需要连接四根母对母的杜邦线即可。
img
标准的jtagswd都是20个引脚,但是swd可以仅连接4个引脚,对照着上图中的引脚,可以使用杜邦线连接jtag接口,使其工作在swd模式,如下图
img
需要注意的是,jtag的一侧有一个缺口,按照这个缺口来对照引脚的位置,不要插错了,不管是调试器还是开发板,一一对应连接这四个引脚,就可以工作在swd模式。

jlink的话,比较贵,正版的貌似要一千多,淘宝上的基本有版权问题,了解的不多。

正点原子家的daplink支持20p标准jtag接口,支持4p精简swd接口,和4p虚拟usb串口,有钱可以入手一个。

初学时可以仅购买最小系统板,尤其是有51基础或者模电基础,这样比较省钱,还能自己购买一些其它的外设,自己去接线,性价比高。

软件

驱动

USB转串口驱动
首先是USB转串口的驱动,目前常用的转串口芯片应该是CH34x,下载地址https://www.wch.cn/download/CH341SER_EXE.html
如果是其它串口芯片,需要安装对应的驱动。

仿真器驱动
daplink是不需要驱动的,stlink和jlink都需要安装驱动,在keil的安装目录里就有对应的驱动安装软件
img
Segger/JLink.exe就是jlink的驱动
STLink/USBDriver/dpinst_amd64.exe就是stlink的驱动(64位)

MDK

常用的开发工具就是keil(也叫MDK)、STM32CubeIDE、IAR,这里仅介绍MDK,MDK集编辑编译下载在线仿真等功能,如果喜欢折腾,也可以使用交叉编译工具链搭配其它编辑器去使用自己喜欢的IDE。
MDK是一款付费软件,仅支持windows,界面比较简陋,但是仿真很方便,不用折腾。
mdk的下载和安装这里不展开讲,keil支持基于arm内核的所有芯片,这些芯片的pack需要额外下载,可以本地安装,也可以使用keil的pack installer在线安装。
本地下载安装:首先手动下载芯片的pack包,然后直接双击安装即可。
pack下载地址https://www.keil.arm.com/packs/

使用keil的pack installer在线安装,如下图所示,
img
在线安装比较慢,需要耐心等待(很慢)。

下面介绍一些常用的按钮,非常常用
img
按照从上到下,从左往右的顺序,仅介绍框出来的按钮:

  1. 仿真(在线调试),会自动编译(如果修改了代码的话),下载,然后可以进行调试,查看寄存器,栈帧,内存,反汇编等等。
  2. 设置,修改编码,文本的字体,字号,关键字颜色等
  3. 构建,这是增量构建,仅编译改动的文件然后链接,右边的是全部重新构建,较慢
  4. 下载,将axf文件下载到flash中
  5. 魔术棒,设置芯片,include,宏定义,debug等
  6. 项目管理,可以设置group和对应group下的文件,group理解为一个过滤器,并不真实存在于文件系统中,用于将不同类型的文件进行分组,但建议一一对应
  7. pack installer,下载芯片pack

下面给出一些比较重要的设置示例,
img

  1. 设置编码采用GB2312更好的支持中文,当然使用utf-8也可以,如果打开别人的项目都是乱码,修改这里即可
  2. 设置使用4个空格代替tab键

img

  1. 设置使用jetbrain mono字体,14字号,看着更舒服
  2. 也可以将数字的颜色修改为红色,添加一些自定义关键字高亮

img

  1. 设置仿真器,使用stlinkjlinkdaplink

img

  1. 设置仿真器使用的接口,可以使用jtag或者swdswd占用引脚少,更推荐使用swdjtag接口的仿真器也能使用swd的连线,连接方式见上面的图片

img

  1. 设置下载后自动运行,不需要按复位开关。

img

  1. 设置自动生成hex文件,该文件可以用于串口下载,非常方便

STM32CubeIDE 免费,仅支持st家的芯片,支持HAL库图形化界面编程,对寄存器封装比较好,跨平台,后面看情况更新。

串口下载工具

这里扩展一下USB和串口的知识
串口

  • 串口也就是通常所说的"COM口",指的是计算机上的串行通信端口,通常用于连接外部设备,如串口调试器、传感器、嵌入式系统等。
  • 串口通常使用RS-232RS-485TTL等电平标准进行通信,电平标准简单来说就是:什么电压值表示0,什么电压值表示1。
    • TTL电平标准:低电平为0,高电平为1(电平信号)
    • RS-232电平标准:正电平为0,负电平为1(电平信号)
    • RS-485RS-422RS-232类似,但是采用差分信号逻辑,更适合长距离、高速传输。
  • 串口的硬件接口实现主要有两种:4针杜邦头D型9针插头(DB9)
    img

MAX232芯片可以用来实现TTL电平与RS232电平的转换。
DB9接口的协议常用的只有三种:RS-232(最有可能)、RS-485RS-422。不可能是TTL电平。

USB

  • 通用串行总线,也就是电脑上用来插U盘的接口
  • 支持热插拔,可以在不关闭计算机的情况下连接和断开设备。
  • 多种传输速率,包括 USB 2.0、USB 3.0 等,能够实现高速数据传输。
  • 可以对外供电
  • 可以连接各种外设

usb转串口

img

  • CH34x、PL2303、CP2102、FT232R 芯片是用USB转串口(TTL电平输出)的芯片,需要安装Windows驱动。
  • 单片机中常用于串口下载的电平标准是指TTL电平,DB9接口一般不说明默认都是RS-232电平标准。

使用一键下载电路实现串口下载程序
正点原子的开发板都有板载的USB转串口模块,利用串口的 DTR 和 RTS 信号,分别控制 STM32 的复位和 Boot0,配合正点原子团队研发的上位机软件 ATK-XISP,设置:DTR 的低电平复位,RTS
高电平进 BootLoader,这样,B0 和 STM32 的复位,完全可以由下载软件自动控制,从而实现一键下载。
ATK-XISP软件 是正点原子开发的一款串口下载工具,用于支持stm32芯片的串口下载。
img

  1. 搜索串口,选择 CH340 虚拟的串口(根据设备管理器中所显示的设置对应的串口),设置波特率为 460800,保证最大速度下载。
  2. 选择项目编译生成的hex文件。
  3. 全部勾选,可以保证下载程序的正确性,并下载完后自动运行,省去按复位的麻烦。
  4. 选择 DTR 的低电平复位,RTS 高电平进 BootLoader,以匹配一键下载电路,实现一键下载代码,省去设置 BOOT0、按复位的麻烦。

下面介绍一键下载电路的原理:
img
图中 Q2 和 Q3 的组合构成了我们开发板的一键下载电路,只需要在 ATK-XISP软件设置:DTR的低电平复位,RTS 高电平进 BootLoader。就可以一键下载代码了,而不需要手动设置 B0 和按复位了。其中,RESET 是开发板的复位信号,BOOT0 则是启动模式的 B0 信号。一键下载电路的具体实现过程:首先,mcuisp 控制 DTR 输出低电平,则 DTR_N 输出高,然后 RTS 置高,则 RTS_N 输出低,这样 Q3 导通了,BOOT0 被拉高,即实现设置 BOOT0 为1,同时 Q2 也会导通,STM32F1 的复位脚被拉低,实现复位。然后,延时 100ms 后,mcuisp 控制 DTR 为高电平,则 DTR_N 输出低电平,RTS 维持高电平,则 RTS_N 继续为低电平,此时STM32F1 的复位引脚,由于 Q2 不再导通,变为高电平,STM32F1 结束复位,但是 BOOT0 还是维持为 1,从而进入 ISP 模式,接着 mcuisp 就可以开始连接 STM32F1,下载代码了,从而实现一键下载。
USB_UART 是一个 USB TypeC 座,提供 CH340C 和电脑通信的接口,同时可以给开发板供电,VUSB 就是来自电脑 USB 的电源,USB_UART 是本开发板的主要供电口。

通过BOOT引脚和reset模块下载程序
如果没有上面的一键下载电路,那么就需要通过调整BOOT0和BOOT1来实现串口下载了。
img
BOOT 引脚接 VCC,是从系统存储器启动,进入后直接运行 ST 官方的 Bootloader 程序,就可以通过 ST 官方预设的接口下载程序,如:USART1 等。该模式除了可以通过上述的接口下载程序,其实还有一个作用:可用于异常关闭 JTAG/SWD 导致仿真器无法下载程序时的补救措施(在此模式下,下载一个不关闭 JTAG/SWD 接口的程序即可救活)。
STM32 串口下载的标准方法是四个步骤:

  1. 把 B0 接 V3.3
  2. 保持 B1 接 GND
  3. 按一下复位按键
  4. 使用上位机软件下载代码

通过这几个步骤,我们就可以通过串口下载代码了,下载完成之后,如果没有设置从0X08000000 开始运行,则代码不会立即运行,此时,你还需要把 B0 接回 GND,然后再按一次复位,才会开始运行你刚刚下载的代码。所以整个过程,你得跳动 2 次跳线帽,还得按 2 次复位,比较繁琐。

如果开发板中没有串口模块,可以购买一个USB转串口(TTL电平)模块,用于串口下载和调试。

使用开发板作为USB转TTL串口模块
当然,如果有一块正点原子的开发板,也可以不用买,这块开发板上的串口模块的设计,就能让该开发板充当USB转串口的功能。
因为,正点原子精英 STM32F103 板载的 USB 串口和 STM32F103ZET6 的串口是通过 P3 连接起来的
img
图中 TXD/RXD 是相对 CH340 来说的,也就是 USB 串口的发送和接收脚。而 USART1_RX和 USART1_TX 则是相对于 STM32F103ZET6 来说的。这样,通过对接,就可以实现 USB 串口和 STM32F103ZET6 的串口通信了。同时,P3 是 PA9 和 PA10 的引出口。这样设计的好处就是使用上非常灵活。比如需要用到外部 TTL 串口和 STM32通信的时候,只需要拔了跳线帽,通过杜邦线连接外部 TTL 串口,就可以实现和外部设备的串口通信了;又比如我有个板子需要和电脑通信,但是电脑没有串口,那么你就可以使用开发板的 RXD 和 TXD来连接你的设备,把我们的开发板当成 USB 转 TTL 串口用了。

串口调试工具

ATK-XCOM软件 是正点原子开发的串口调试助手软件
img

未完待续...

posted @ 2024-05-03 16:13  EricLing0529  阅读(82)  评论(0编辑  收藏  举报