前言
由于项目需要,需实现对stm32进行远程下载程序的操作。
经过上网查资料研究后,最后准备采用这套方案。
整体流程:通过ssh远程访问树莓派,运行openocd,以jlink作为媒介给stm32下程序。
准备工作
烧录程序
去树莓派官网下载ubuntu_mate系统(有图形界面的桌面版)
(据群友所述 ubuntu_snappy 系统为无图形界面的服务器版本)
格式化TF卡,烧录好系统
插入树莓派开机引导启动(此处不再赘述安装系统过程)
安装openocd
首先sudo apt-get isntall openocd
然后可以连接好用来下程序的工具和开发板
lsusb一下看看系统有没有识别
(我测试时候用的是jlink往stm32板子里下程序)
(以下以我的测试情况为例)
操作流程
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg
连接上会有一堆的配置信息输出
接着新打开另一个终端
输入telnet localhost 4444
连接上openocd之前的守护进程
接下来的命令都在此终端运行
1 2 3 |
>halt >flash write_image erase /home/pi/BEEP.hex >reset |
此处的/home/pi/BEEP.hex为对应下载的程序路径
然后32板通断一下电流即可执行新的程序了
说明
之前看到的一个博客整理的很好,直接在此引用了。
若认为侵权,可联系我删除)
成功通过Jlink连接到STM32上之后,OpenOCD会监听本机的4444端口。
通过telnet登录上去,之后就可以控制OpenOCD干些什么了。
1、halt :
挂起STM32,相当于关机,不执行halt,无法把程序写入STM32的Flash
2、flash write_image erase /foo/bar.hex :
flash write_image: 写入镜像,支持的类型有bin文件、hex文件、elf文件、
s19文件(Motorola s19)、mem、builder,详情参见OpenOCD手册关于Flash命令章节
erase:写入程序前先擦除Flash用到的扇区。
如果要写入程序的所有扇区已经用“Flash erase_sector”命令擦除过,
则可以去掉“erase”选项。
/foo/bar.hex:指定要写入的程序bar.hex,位于/foo/。
3、reset:
复位STM32
有关ssh服务注意事项
此系统默认关闭ssh服务
为了远程控制需配置ssh设置
先ps -e | grep ssh
查看一下
发现会有一个ssh-agent说明缺省安装openssh-client
(只能作为客户端ssh访问其他主机)
直接sudo apt-get install openssh-server
再ps -e | grep ssh
一下看看有没有sshd的守护进程
有的话说明ssh服务启动成功
没有的话 sudo service ssh start
开启一下
然后即可通过ssh远程访问22端口