本帖最后由 tinnu 于 2023-4-29 22:16 编辑
(一)
合宙新出的AIR32F103 9.9包邮一块板子+芯片,256K RAM,看到如此配置忍不住薅了两块。回来一看发现环境只支持MDK,这能忍?作为一个脱离windows环境的开发者,必须给他整明白了!
(二)环境搭建
luatos-soc-air32f103
标识符为:cl.eide
- 2021年的gcc7
gcc7
- 2016年的gcc5
gcc5
gcc5
由于我的环境里是安装过nxp的mcuxpresso的,所以我直接用自带的gcc none编译链
"EIDE.ARM.GCC.InstallDirectory": "/usr/local/mcuxpressoide-11.7.0_9198/ide/tools",
"cortex-debug.gdbPath": "/usr/local/mcuxpressoide-11.7.0_9198/ide/tools/bin/arm-none-eabi-gdb",
"cortex-debug.armToolchainPath": "/usr/local/mcuxpressoide-11.7.0_9198
(三)工程搭建
创建空白工程并打开;如果打不开,先把所有vscode关掉再开一次;主要是由于在linux下 eide 扩展受限于单个软件的堆栈限制,如果要突破限制需要配置 ulimited,否则就要把其他vscode全部关掉给这个工程让路才行。
官方例程拷出来:USER、Lib、SYS、CMSIS、STARTUP(.s) 安排上;或者在eide里面加入SDK里面的pack也行。
- 宏定义
- USE_STDPERIPH_DRIVER
- AIR32F10X_MD
- 头文件
- USER
- SYSTEM/delay
- Libraries/CMSIS/Include
- Libraries/AIR32F10xLib/inc
既然air32宣称替换stm32,那就直接用stm32的链接脚本吧!
startup文件比较难办,这个是官方没有给出的,而跟stm32又有所差异的。
不过通过多次尝试,还是给我搞了一个脚本出来:
- 使用stm32 hd系列的startup文件(air32f103 md系列容量资源是跟stm32 hd系列一个规格的)
- 增加三个中断函数:
.word SYMC_IRQHandler
.word RNG_IRQHandler
.word SENSOR_IRQHandler
- 增加RAM的初始化代码,否则程序上电跑不了
Reset_Handler:
/* tinnu add: seems like to start something */
LDR R0,=0x400210F0
MOV R1,#0x00000001
STR R1,[R0]
LDR R2,=0x40016C00
LDR R3,=0xa7d93a86
STR R3,[R2]
LDR R3,=0xab12dfcd
STR R3,[R2]
LDR R3,=0xcded3526
STR R3,[R2]
LDR R3,=0x200183FF
STR R3,[R2,#0x18]
LDR R4,=0x4002228c
LDR R5,=0xa5a5a5a5
STR R5,[R4]
MOV R1,#0x00000000
点击
(四)烧录
下载安装python
sudo apt install python3 python3-pip
下载安装pyocd
pip3 install pyocd -i https://pypi.tuna.tsinghua.edu.cn/simple
- daplink是之前薅汉唐的,最大的特点是typec接口,而下面的彩色线则是薅创芯工坊9.9 daplink配的,至于为什么不用创芯工坊9.9 daplink,因为type A的实在是短了点
linux系统免驱(也有可能是之前安装mcuxpresso的时候加了驱动,反正像创芯工坊9.9 daplink是被识别成nxp link的)
可以直接用stm32f103的支持:
pyocd flash --erase chip --target stm32f103rc ./build/Debug/eide_air32f1_1_gpio.hex
也可以把从gitee拉下来的sdk里面的pack放到目录下,使用pyocd指定pack里面的支持:
pyocd flash --erase chip --target air32f103cb --pack=Keil.AIR32F103_DFP.1.1.2.pack --base-address 0x8000000 ./build/Debug/eide_air32f1_1_gpio.hex
(五)调试
创建launch.json文件:
"configurations": [
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "pyocd",
"servertype": "pyocd",
"executable": "build/Debug/eide_air32f1_1_gpio.elf",
"runToEntryPoint": "main",
"targetId": "air32f103cb",
"armToolchainPath": "<gcc安装位置>/gcc-arm-none-eabi-5_4-2016q3-20160926-win32/bin",
"svdFile": ".pack/Keil/AIR32F103_DFP.1.1.2/SVD/AIR32F103xx.svd",
"toolchainPrefix": "arm-none-eabi"
}
]
以上使用了 cortex-debug 支持的 pyocd
可以看到svd支持都正常了,可以愉快玩耍。
代码见:https://jihulab.com/tinnu/eide_air32f1_tinnu_exmp