码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • AIR32F103(三) Linux环境基于标准外设库的项目模板


    目录

    • AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告
    • AIR32F103(二) Linux环境和LibOpenCM3项目模板
    • AIR32F103(三) Linux环境基于标准外设库的项目模板
    • AIR32F103(四) 27倍频216MHz,CoreMark跑分测试
    • AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码
    • AIR32F103(六) ADC,I2S,DMA和ADPCM实现的录音播放功能
    • AIR32F103(七) AIR32F103CBT6/CCT6启用96K内存
    • AIR32F103(八) 集成Helix MP3解码库播放MP3
    • AIR32F103(九) CAN总线的通信和ID过滤机制及实例
    • AIR32F103(十) 在无系统环境和FreeRTOS环境集成LVGL
    • AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动
    • AIR32F103(十二) 搭载 AIR32F103CBT6 的Bluepill核心板

    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. 导出项目

    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:no
    USE_FREERTOS ?= n
    # 烧录工具, jlink 或 stlink
    FLASH_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/JLinkExe
    JLINK_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 开启, 开启后会明显增加二进制程序尺寸.

    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 的支持, 将需要下面的配置改为y

    # Build with FreeRTOS, y:yes, n:no
    USE_FREERTOS ?= n

    切换不同的MCU型号

    Makefile默认配置的是 AIR32F103CBT6 的编译选项, 如果需要切换到CCT6和RPT6, 需要在Makefile中修改两处

    # CCT6不用改, RPT6需要修改为 STM32F103RB
    JLINK_DEVICE ?= STM32F103CB
    ...
    # 对应的修改为 air32f103cct6.ld 和 air32f103rpt6.ld
    LDSCRIPT = Libraries/LDScripts/air32f103cbt6.ld
  • 相关阅读:
    Kotlin挂起函数基础
    Python 面试复习题整理
    【设计】OOA、OOD、OOP
    学习笔记-关于过滤\<\?php标签这件事
    [附源码]java毕业设计 宠物医院管理系统
    leetcode:2053. 数组中第 K 个独一无二的字符串(python3解法)
    java-net-php-python-ssm担保系统项目管理系统计算机毕业设计程序
    每日一题 —— 图像渲染
    node.js的认识与安装
    Zookeeper【Curator客户端Java版】从0到1——万字学习笔记
  • 原文地址:https://www.cnblogs.com/milton/p/16830655.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号