最近这段时间因为成谜于物联网中无法自拔,所以独自在互联网的世界中汲取着为数不多的知识,虽然教程有很多,但是实际的可以从最基础的开始写的教程并不常见,所以在自己经过很长时间的学习,在这里记录一下自己从0开始到点亮STM32F103C8T6这块小板上LED的过程。
基础环境介绍
操作系统:Ubuntu 20.04 LTS
基础软件列表
STM32CubeMX (makefile 代码生成作用)
stlink驱动
交叉编译工具 (gcc-arm-eabi)
调试接口程序 (openocd)
libusb 驱动(保证stlink正常工作)
基础软件配置1.STM32CubeMX
安装java环境sudo apt install default-jre
下载STM32CubeMX,下载链接看底部
下载的zip压缩包中,有linux和exe的版本,自行选择安装,如果碰到安装linux报错,有可能是64位系统不兼容32位程序库,安装sudo apt install libc6-i386
给linux文件执行权限sudo chmod a xSetupSTM32CubeMX-6.0.1.linux
执行安装: sudo ./SetupSTM32CubeMX-6.0.1.linux
2.stlink驱动安装
安装必备的库和编译工具
sudo apt install git make cmake libusb*
sudo apt install gcc build-essential
克隆stlink的项目文件到指定目录
git clone https://github.com/stlink-org/stlink
生成cmake并编译
cd stlink
cmake .
make
将bin目录下文件拷到系统bin目录下,拷贝udev rules文件到系统目录下
sudo cp stlink/config/udev/rules.d/49-stlinkv* /etc/udev/rules.d/
验证, 插入stlink设备,不要连接硬件目标板
lsusb, 则在列表中会显示 STMicroelectronics ST-LINK/V2
st-info –probe, 会显示找到一个stlink编程器
读,写,擦拭案例:
st-flash read dummy.bin 0 0xFFFF# 读取
st-flash write dummy.bin 0x8000000# 写入
st-flash erase# 擦除芯片内容
3.gcc-arm-none-eabi
使用apt直接安装
sudo apt install gcc-arm-none-eabi
arm-none-eabi-gcc -v测试是否安装成功
添加ppa源进行安装
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt update
sudo apt install gcc-arm-embedded
所有前置步骤完成后,下面开始软件的使用及项目配置环节
STM32CubeMX
配置代理:
打开软件首先配置proxy,有代理的最好先挂上代理,之后库文件下载会比较快,不然会很慢,没有代理的需要将类型设置为使用系统代理。
下载库文件:
接下来开始下载目标板所对应的库文件,这里我的板子是STM32F1系列的,所以下载对应的库文件
创建工程:
在这里有几个地方是需要提前配置的,一个是RCC时钟配置,这些都需要一点芯片的基础知识,这里只要照做就可以了,将HSE高速时钟配置成Crystal/Ceramic Resonator,LSE低速时钟不做配置
紧接着配置GPIO口,查看目标板的数据手册,可以知道PC13即C13口是直接控制主板一个LED灯的通断的,所以这里将PC13口设置为GPIO-Output
配置完成后如下所示
最后进入这个软件最后配置的环节
添加代码并编译:
使用vscode打开Core/Src/main.c 文件,在while循环中添加如下代码,作用是将13号口,进行设置/复位操作,并进行1s的延迟。
while (1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(1000); }
保存代码后,打开Terminal,定位到项目目录下,和Makefile同级,然后执行:
make
最后会在当前目录下生成一个build文件夹,里面有产生的中间文件、hex文件、和bin文件,最后将目标板连接上stlink。
上传代码:
在Terminal中执行:
st-flash write ./build/BasicLED.bin 0x8000000
建议每次写入前先执行一个擦除操作: st-flash erase
总结:
至此,整个入门项目就结束了,起初一直在纠结于到底是用什么软件进行开发,是KD5好还是IAR好,最后发现,还是最适合自己的才是最好的,我就喜欢使用Vscode,我就是喜欢最简单的Terminal进行代码的上传,然后刚开始不了解一些STM的原理的时候很纠结STM32CubeMX到底怎么使用,后来发现,STM32CubeMX根据你项目的复杂程度进行项目的配置,比如这个项目中只需要配置GPIO13口,和高速时钟,所以在继续进行STM32的学习中,还需要学习一些基础的知识,不会让你在学习开发的过程中像只无头苍蝇。
最后,希望大家可以坚持自己所坚持的,喜欢自己所喜欢的!
STM32CubeMX链接:
https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html