STM32 Note
完整的 pinlayout 如下所示:
你可能出现如下错误:
... arm-none-eabi-gdb: /usr/lib/libncurses.so.5: version `NCURSES_5.3.20021019’ not found (required by arm-none-eabi-gdb) ...
原因是很有可能你用的不是一个 ST 公司适配过的编译工具,而你的环境中的库与之不兼容(比如说我的开发环境就是 Archlinux, 而不是 Ubuntu )。
而解决这个问题的方法也比较简单,就是使用自己平台的交叉编译工具链。参考 [link]
以下是摘要:
1. Window → Preferences 2. Search for “Toolchain Manager”, or locate it under STM32Cube → Toolchain manager 3. Assuming you already have arm-none-eabi installed, open a terminal and run which arm-none-eabi-gcc to get its location. Here it is under /usr/bin. 4. On the Toolchain Manager, click “Add Local…” button on the right, give it some name, leave the default arm-none-eabi- prefix as it is, then fill the Location with the location of your arm-none-eabi-* (possibly /usr/bin/). Click on Finish. 4. Back on the Toolchain Manager, select the toolchain you’ve just added and click the “Set Default” button on the right.
但是你本地的交叉编译工具怎么来?有三种方法:
- 使用平台工具安装
- 去 gun 官网下载已经编译好的
- 自己编译
因为使用第一种方法对于我最简单因此我在这里记录下自己的安装方法:
pacman -S arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-gdb arm-none-eabi-newlib
我在这两个东西上花了一天时间,原因在于我处于成本的考量买了淘宝上十块钱左右的 STM32F103C8T6 最小系统板和在咸鱼上购买了二手的 STLink/V2。而我的工作环境是 Linux, 而非 Windows, 因此导致我能直接找到的开发工具就是 STM32 观望的 IDE -- STM32CubeIDE, 和 Arduion。
最开始调试的问题,我连接上 STLink/V2 进行调试的时候一直报错(如下所示),我 google 了很多解决方法,都不行。(我现在还怀疑有一定原因可能是盗版 STLink 的原因,但这个等下一次正版 STM32 开发板到货再试一下)
... Error in initializing ST-LINK device. Reason: ST-LINK: Could not verify ST device! Abort connection. ...
我发现该日志是在 ./ST-LINK_gdbserver 工具打印出来的,因此反编译之跳过这段报错,还是出问题了,因此感觉问题并不是那么简单。后来找到 arduion 上也有 STLink 的烧录工具,因此找到编译好的工程 rogerclarkmelbourne/Arduino_STM32 这个工程,获取最新的 release 版本,发现还是报错,不过这次的错误变成了下面这样。
> ./stlink/st-flash --reset write ../../../BLINK/Debug/BLINK.bin 0x8000000 2022-10-19T01:30:14 INFO src/common.c: Loading device parameters.... 2022-10-19T01:30:14 INFO src/common.c: Device connected is: F1 Medium-density device, id 0x20036410 2022-10-19T01:30:14 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes 2022-10-19T01:30:14 INFO src/common.c: Attempting to write 13584 (0x3510) bytes to stm32 address: 134217728 (0x8000000) Flash page at addr: 0x08003400 erased 2022-10-19T01:30:14 INFO src/common.c: Finished erasing 14 pages of 1024 (0x400) bytes 2022-10-19T01:30:14 INFO src/common.c: Starting Flash write for VL/F0/F3 core id 2022-10-19T01:30:14 ERROR src/common.c: unknown coreid, not sure what flash loader to use, aborting!: 2ba01477 2022-10-19T01:30:14 WARN src/common.c: Failed to write flash loader to sram! 2022-10-19T01:30:14 ERROR src/common.c: init_flash_loader() == -1 stlink_fwrite_flash() == -1
后来一查才知道 2ba01477 是 CKS32 的 ID, 然后继续深入搜索发现不止有我一个人遇到这个问题,很多国外的同行也遇到了这种问题。但我看芯片的丝印写的是 stm32f103c8t6, 这就 TMD 恶心了。 后来翻到店家的历史记录才发现也有其他同行遇到了该问题,这里直接把店铺地址贴出来吧:https://item.taobao.com/item.htm?id=596331059208 REF: 其中 github / issue 地址, [CKS32: added CKS32F103C8T6 a stm32f103c8t6 clone with coreid 0x2ba01477]。
后来继续深入查询发现淘宝上所有价格低于 23 元的该类型芯片都是国产替代料,而且重点是还有写商家都不会在购买时表明是否为国产。这里大家要注意了。 另外,我发现便宜的板子用的稳压芯片也是有问题的,纹波和精度都非常不稳定,如果大家对稳定性有要求,购买时也千万注意。
好了,既然知道是国产替代料,而且已经在淘宝和 amazon 上卖得这么泛滥了,那么不可能我烧录都不行吧,肯定有办法的,然后办法也是在上面 github 的 issue 中提到了,那就是在开源的 stlink 的烧录工具加上该 chipid 即可,而且最新的分支已经包含该提交,因此我只需要找到原始的 STLINK 仓库,自己编译一份固件出来即可。REF: stlink-org/stlink
另外,如果实在 windows 平台,烧录还是有很多其他方法的,这里仅仅是因为我的工作环境所限制导致我面对了这么多问题。
最后附上使用开元 stlink 开发套件烧录的命令:
/share/CODE/stm32/stlink | develop > ./stlink/st-flash --reset write ../../../BLINK/Debug/BLINK.bin 0x8000000