目录
- AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告
- AIR32F103(二) Linux环境和LibOpenCM3项目模板
- AIR32F103(三) Linux环境基于标准外设库的项目模板
关于 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. 导出项目git clone https://github.com/IOsetting/hk32f030m-template.git
2. 根据本地环境修改 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.ld
3. 编译默认项目并烧录# 清理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 中有说明printf 无法输出浮点数printf输出浮点数默认是关闭的, 打印浮点无输出. 可以在
TGT_LDFLAGS
中增加选项 -u _printf_float
开启, 开启后会明显增加二进制程序尺寸.【三 AIR32F103 Linux环境基于标准外设库的项目模板】
TGT_LDFLAGS += $(ARCH_FLAGS) -specs=nano.specs -specs=nosys.specs -static -lc -lm \-u _printf_float \-Wl,-Map=$(BDIR)/$(PROJECT).map \-Wl,--gc-sections \-Wl,--print-memory-usage
开启后, 连接时会检查_getpid(void)
和_kill(pid_t pid, int sig)
这两个函数是否定义, 如果没定义会报warning.对FreeRTOS的支持运行 Examples/FreeRTOS 目录下的例子时, 需要在 Makefile 中开启对 FreeRTOS 的支持, 将需要下面的配置改为
推荐阅读
- 二 Linux进程间通信
- 【pytest官方文档】解读-开发可pip安装的第三方插件
- 其三 Gitea 1.18 功能前瞻:增强文本预览效果、继续扩展软件包注册中心、增强工单实用功能、完善了用户邀请机制和SEO
- Docker在windows系统以及Linux系统的安装
- 一篇文章带你了解服务器操作系统——Linux简单入门
- 三星zflip3韩版和国行的区别_哪款更值得入手
- 路由器与猫怎样正确链接(一个猫怎么连接三个路由器)
- 三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
- 三星s21配置参数_三星s21手机参数配置
- 原神片剂深研第三关怎么通关