三 AIR32F103 Linux环境基于标准外设库的项目模板

目录

  • AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告
  • AIR32F103(二) Linux环境和LibOpenCM3项目模板
  • AIR32F103(三) Linux环境基于标准外设库的项目模板
Linux 开发环境使用的 GCC Arm, st-flash 和 JLink 与前一篇相同, 可以参考前一篇的说明
关于 Air32F103-Template项目地址: https://gitee.com/iosetting/air32f103-template
这是为 GCC Arm 工具链准备的 AIR32F103x 项目开发模板
项目结构├── Build# 编译结果├── Examples# 示例代码│   ├── FreeRTOS# FreeRTOS示例代码│   └── NonFreeRTOS# 非FreeRTOS示例代码├── Libraries│   ├── AIR32F10xLib# AIR32F103外设层库代码│   │   ├── inc# .h头文件│   │   ├── lib│   │   │   └── cryptlib│   │   └── src# .c源文件│   ├── CORE# Coretex M 核心外设层源文件│   ├── Debug# delay和printf支持│   ├── DeviceSupport# AIR32F103的gcc arm startup文件│   │   └── startup│   │  └── arm-gcc│   ├── FreeRTOS# FreeRTOS 库代码│   └── LDScripts# 连接脚本├── Makefile├── Misc│   └── flash.jlink# JLink烧录脚本├── README.cn.md├── README.md├── rules.mk# make规则└── User# 用户项目代码快速开始1. 导出项目【三 AIR32F103 Linux环境基于标准外设库的项目模板】git clone https://github.com/IOsetting/hk32f030m-template.git2. 根据本地环境修改 Makefile修改 Makefile 设置, 确保 ARM_TOOCHAIN 和 JLINKEXE(或ST_Flash) 指向正确的路径
##### Project ###### 项目名称PROJECT?= app# 编译结果目录BUILD_DIR= Build##### Options ###### 是否使用 FreeRTOS, y:yes, n:noUSE_FREERTOS ?= n# 烧录工具, jlink 或 stlinkFLASH_PROGRM?= stlink##### Toolchains ######## 根据本地环境, 设置工具链路径ARM_TOOCHAIN?= /opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin# st-flash 可执行文件路径ST_FLASH?= st-flash# JLinkExe 可执行文件路径和设备类型JLINKEXE?= /opt/SEGGER/JLink/JLinkExeJLINK_DEVICE ?= STM32F103CB##### Paths ############# 当前芯片的连接脚本LDSCRIPT= Libraries/LDScripts/air32f103cbt6.ld3. 编译默认项目并烧录# 清理make clean# 编译make# 带详细输出的编译V=1 make# 烧录make flash默认的项目会点亮板载的三个LED
示例代码示例代码位于 Examples 目录下, 项目中的示例代码几乎都是迁移自合宙的Keil项目中的示例代码, 已经在GCC Arm下运行验证过.
如果需要运行示例代码, 先将 User 目录下的文件清空, 将示例代码复制到 User 目录下, make clean清空, 然后重新编译和烧录.
VSCode 配置文件c_cpp_properties.json 供参考
{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**"],"defines": ["HK32F030MF4P6"],"compilerPath": "/opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc","cStandard": "gnu99","cppStandard": "gnu++14","intelliSenseMode": "gcc-arm","configurationProvider": "ms-vscode.makefile-tools"}],"version": 4}tasks.json
{// See https://go.microsoft.com/fwlink/?LinkId=733558// for the documentation about the tasks.json format"version": "2.0.0","tasks": [{"label": "clean, build","type": "shell","command": "make clean;make","problemMatcher": []},{"label": "build, download","type": "shell","command": "make;make flash","problemMatcher": []},{"label": "build","type": "shell","command": "make","problemMatcher": []},{"label": "clean","type": "shell","command": "make clean","problemMatcher": []},]}常见问题说明切换GCC编译器版本, 11.2, 11.3 和 12.2项目模板测试过的最新的GCC Arm编译器版本为12.2, 对比 11.2 和 11.3, 12.2 编译会带来一些性能提升, 但是检查也更严格, 按11.2和11.3的配置会产生不少warning. 在GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告 和 GCC Arm 11.3rel1, 12.2编译提示 _close is not implemented and will always fail 中有说明

经验总结扩展阅读