本文介绍Nano Pi K1 Plus上面的STM32开发环境搭建。Nano Pi K1 Plus和STM32的介绍篇请看传送门。
准备工作:
1、一台能上网的电脑(Windows系统)
2、一张8GB或者更大空间的TF卡(Class10或者更高)
3、一个MicroUSB接口的电源,电压5V,最大输出电流最好是2A,但是不要低于1.5A
4、一个USB转TTY串口
5、还有Nano P1 K1 Plus这块板子
首先打开Friendly ARM官方提供的镜像下载地址:http://download.friendlyarm.com/nanopik1plus
下载nanopi-k1-plus_sd_friendlycore-xenial_4.14_arm64_20191219.img.zip和win32diskimager.rar,这两个文件分别在official-ROMs和tools目录中。
将上面两个文件解压到当前目录,最终文件如下图:
将TF卡插入电脑,运行Win32DiskImager.exe,选中TF卡对应的盘符,选择刚刚解压出来的镜像,点击“write”按钮。注意此操作会覆盖TF卡原有的分区表和文件系统,也就是说原有的文件都会丢失,注意备份重要资料!
烧写成功之后,就可以将TF卡插到Nano Pi K1 Plus的TF卡槽中,并将USB转TTY串口连接到电脑(杜邦线如何连请看官方wiki或者百度一下~)。
使用PuTTY工具打开串口,在我的电脑上串口对应COM3,不清楚的同学可以对开始菜单的Windows徽标点击右键,选择“设备管理器”,在“端口(COM和LPT)”一栏中可以看到。
Connection type选择Serial,Serial line为COM3,Speed为115200,点击“Open”按钮。
对Nano Pi K1 Plus供电之后就能在终端看到输出了。
恭喜你,现在你已经多了一台真正意义上的Linux设备,在开启你的奇妙之旅之前,还有一些配置的工作要做,比如网络、更换APT源和下一步搭建STM32环境必须的工具安装。
配置网络
首先要为设备配置网络,由于我主要使用WiFi网络(网线总能让桌面显得乱糟糟的),所以在此以配置WiFi为例。在终端运行 sudo nmtui 命令,会进入一个“Network Manager TUI”界面。
选择“Activate a connection”,可以在列表中看到当前物理环境下可检测到的WiFi SSID。建议将Nano Pi连接到当前计算机所在的那个网络环境,使两者在同一个局域网中。
选中需要连接的WiFi SSID,点击回车,输入WiFi密码,然后“OK”,连接激活之后,在选择的SSID前面会多了一个星号*。
在终端执行 ifconfig 命令即可查看当前网络配置情况,可以执行 ping www.baidu.com,查看是否成功连接到以太网。
请保证网络已经成功连接到以太网,接下要做的是更换APT包管理器的源。系统自带的源速度太慢,需要更换为国内的镜像源。此处推荐中科大源。
此时可以将串口断开,使用ssh连接到Nano Pi了。查看 ifconfig 命令的输出可以得到当前板子无线网口获取到的IP地址是192.168.1.10。仍通过PuTTY这个工具,Connection type选择SSH,Host Name为Nano Pi的IP地址,Prot为22,点击“Open”按钮:
可以使用两种身份登陆SSH,一个是普通用户,用户名和密码都是 pi ;另一种是root用户,密码是 fa 。此处选择普通用户登陆。
更换APT安装源
APT是Advanced Packaging Tools的缩写,中文名是高级打包工具,它是Debian及其派生的Linux软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端,用来处理deb格式的软件包。现在经过APT-RPM组织修改,APT已经可以安装在支持RPM的系统管理RPM包。
APT工具可以管理当前系统上面的软件包,常用功能包括安装,更新和删除。通过APT可以快速的安装一个软件包,如 sudo apt install git ,会自动在安装源中检索名为git的软件包,并检查它的依赖关系,如果它依赖A软件包,但是本地没有安装,APT会将git和A软件包一起安装在系统内,大大减小了自己手动管理依赖,编译安装的时间。
更换APT安装源分别执行如下命令:
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo nano /etc/apt/sources.list
将如下内容拷贝进去:
# 默认注释了源码仓库,如有需要可自行取消注释
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse# 预发布软件源,不建议启用
# deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main restricted universe multiverse
文件修改完成后分别按Ctrl+o,点击回车保存,然后按Ctrl+x退出编辑器。
接下来更新软件包版本数据库,执行:
sudo apt update && sudo apt upgrade -y
首次更新的时间可能比较长,等待它下载并安装完成之后,系统的软件包都更新至最新版本了。
安装构建STM32开发环境所依赖的工具
STM32是ARMv7的指令集架构,需要交叉编译工具链arm-none-eabi-gcc,同时还需要项目依赖管理工具make,版本管理工具git和调试下载工具openocd。
执行如下命令安装必要工具:
sudo apt install -y bash-completion telnet git make gcc-arm-none-eabi gdb-arm-none-eabi libnewlib-arm-none-eabi man usbutils libtool pkg-config automake libusb-1.0-0-dev libhidapi-dev libusb-dev
等安装结束之后,可以将STM32开发板连接到Nano Pi K1 Plus的一个USB Host接口上,执行 lssub 命令,可以看到已经检测到STM32的仿真器设备。
Bus 006 Device 002: ID 0483:374b STMicroelectronics ST-LINK/V2.1 (Nucleo-F103RB)
编译OpenOCD
OpenOCD是开源的片上调试、片上编程和边界扫描测试工具,它支持ARM、MIPS和RISC-V等多种SoC。它支持多种仿真器,支持GDB Server功能,可以使用GDB来对目标芯片上的代码进行调试,也可以通过Telnet,使用TCL脚本语言与OpenOCD系统进行交互。
首先从 https://gitee.com/virusv/openocd.git 拉取openocd的最新源码。因为openocd官方仓库速度巨慢,慢到怀疑人生,所以我在码云为它创建了一个镜像。
接下来对OpenOCD进行编译,在openocd目录下依次执行下列命令:
./bootstrap # 会生成一个 configure 可执行文件
./configure
make -j2 && sudo make install # -j 2是防止内存紧张导致构建过程异常中断
执行完 make -j2 && sudo make install 之后,执行 openocd -v 可以查看当前OpenOCD的版本。
使用openocd通过仿真器连接至开发板:
sudo openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c init
上面的信息显示当前选择的是SWD协议,速率是1MHz,ST-Link设备的Vendor ID和Product ID分别是0483和374B,目标电压3.232297V,目标有6个硬件断点,4个硬件观察点,当前监听3333端口用于gdb连接,监听6666用于tcl连接,监听4444用于telnet连接。
目前用到最多的是3333端口和4444端口。可以通过 telnet 127.0.0.1 4444 连接至openocd,输入help查看一下openocd支持的功能。
好了,今天的文章到这儿就结束了,主要介绍了在Linux下如何搭建STM32开发环境,以及openocd的编译安装,目前已经可以正常连接到stm32开发板,接下来的文章将介绍如何编写一个简单的stm32点灯程序并使用openocd烧录。
参考资料:
[1]. http://openocd.org/doc/html/GDB-and-OpenOCD.html
[2]. https://wiki.st.com/stm32mpu/wiki/GDB
[3]. http://wiki.friendlyarm.com/wiki/index.php/NanoPi_K1_Plus/z