[APM32F4] APM32系列的RT-Thread外设驱动适配教程(一)—— BSP包的制作教程 📅 发布时间:2026/7/9 18:46:16 👁️ 浏览次数: 1 RT_Thread的BSP框架介绍BSP 框架结构如下图所示每一个 APM32 BSP 主要由两部分组成分别是通用驱动库、特定开发板 BSP下面的表格以 APM32F1 系列为例介绍这几个部分2 知识储备制作一个 BSP 的过程就是构建一个新系统的过程因此想要制作出好用的 BSP要对 RT-Thread 系统的构建过程有一定了解需要的知识准备如下所示掌握 APM32 系列 BSP 的使用方法了解 BSP 的使用方法可以阅读 BSP 说明文档 中使用教程表格内的文档。了解 Scons 工程构建方法RT-Thread 使用 Scons 作为系统的构建工具因此了解 Scons 的常用命令对制作新 BSP 是基本要求。了解设备驱动框架在 RT-Thread 系统中应用程序通过设备驱动框架来操作硬件因此了解设备驱动框架对添加 BSP 驱动是很重要的。了解 Kconfig 语法RT-Thread 系统通过 menuconfig 的方式进行配置而 menuconfig 中的选项是由 Kconfig 文件决定的因此想要对 RT-Thread 系统进行配置需要对 kconfig 语法有一定了解。3 BSP制作方法下面以制作 APM32E103ZE-EVAL 开发板 BSP 为例讲解如何为一个新的开发板添加 BSP。BSP 的制作过程分为如下步骤复制基础工程配置工程模板修改BSP根目录下的SConstruct构建脚本修改Kconfig选项修改board目录下的工程构建和配置文件重新生成工程3.1 复制基础工程我们制作一个新的BSP包不用从零开始一点点的把文件添加进来。我们可以先找到一份和你要制作的MCU BSP内核相似的现有APM32 BSP然后复制一份即可。比如我要制作APM32E103-EVAL 板的BSP包那么我只要复制一份和 APM32E103 内核相近的现有APM32 BSP如复制一份现有的 apm32f103xe-minibroard 这个BSP包然后重命名为自己要制作的BSP包然后再次基础上进行修改即可。3.2 配置工程模板BSP 根目录下的 template 文件就是生成 MDK/IAR 平台的工程模板我们制作一个BSP时需要修改这些工程模板比如使用的芯片型号、下载方式等。下面介绍 MDK5 工程模板的修改双击 template.uvprojx 打开工程模板。修改芯片型号根据自己的目标板子的芯片型号进行选择。Output选项配置修改输出的可执行文件名为 rtthread 。Debug选项配置修改调试工具为 J-Link.修改下载算法3.3 修改BSP根目录下的SConstruct构建脚本BSP根目录下的 SConstruct 脚本文件是链接整个工程需要依赖的文件的并且调用make程序进行编译工程。修改后的内容如下复制importosimport sysimport rtconfigifos.getenv(RTT_ROOT):RTT_ROOT os.getenv(RTT_ROOT)else:RTT_ROOT os.path.normpath(os.getcwd() /../../..)sys.path sys.path [os.path.join(RTT_ROOT,tools)]try:from building import *except:print(Cannot found RT-Thread root directory, please check RTT_ROOT)print(RTT_ROOT)exit(-1)TARGET rtthread. rtconfig.TARGET_EXTDefaultEnvironment(tools[])env Environment(tools [mingw],AS rtconfig.AS, ASFLAGS rtconfig.AFLAGS,CC rtconfig.CC, CFLAGS rtconfig.CFLAGS,AR rtconfig.AR, ARFLAGS -rc,CXX rtconfig.CXX, CXXFLAGS rtconfig.CXXFLAGS,LINK rtconfig.LINK, LINKFLAGS rtconfig.LFLAGS)env.PrependENVPath(PATH, rtconfig.EXEC_PATH)ifrtconfig.PLATFORMin[iccarm]:env.Replace(CCCOM [$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES])env.Replace(ARFLAGS [])env.Replace(LINKCOM env[LINKCOM] --map rtthread.map)Export(RTT_ROOT)Export(rtconfig)SDK_ROOT os.path.abspath(./)ifos.path.exists(SDK_ROOT /libraries):libraries_path_prefix SDK_ROOT /librarieselse:libraries_path_prefix os.path.dirname(SDK_ROOT) /librariesSDK_LIB libraries_path_prefixExport(SDK_LIB)# prepare building environmentobjs PrepareBuilding(env, RTT_ROOT, has_libcpuFalse)apm32_library APM32E10x_Libraryrtconfig.BSP_LIBRARY_TYPE apm32_library# include librariesobjs.extend(SConscript(os.path.join(libraries_path_prefix, apm32_library,SConscript)))# include driversobjs.extend(SConscript(os.path.join(libraries_path_prefix,Drivers,SConscript)))# make a buildingDoBuilding(TARGET, objs)我们只要修改 apm32_library 这个变量的文件名称即可也就是该BSP依赖的是哪个固件库。3.4 修改Kconfig选项在本小节中修改 board/Kconfig 和 libraries/Kconfig 文件的内容有如下两点芯片型号和系列BSP 上的外设支持选项芯片系列的定义在apm32\libraries\Kconfig 中修改前先确认是否存在添加的芯片系列定义如果是一个未添加的系列需要先添加该芯片系列的定义。芯片型号和系列的命名格式如下表所示。1.添加芯片系列2.添加 BSP 上的外设支持选项关于 BSP 上的外设支持选项一个初次提交的 BSP 仅仅需要支持 GPIO 驱动和串口驱动即可因此在配置选项中只需保留这两个驱动配置项如下图所示3.5 修改board目录下的工程构建和配置文件1.修改board/SConscript脚本文件。board/SConscript脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。该文件主要添加board文件夹的.c文件和头文件路径还有需要修改芯片型号以及芯片启动文件路径修改内容如下图所示2.修改board.h文件。apm32 的 board/board.h 文件主要是包含了整个工程要用到的固件库头文件我们要把用到的固件库头文件都写在board.h文件中还有需要根据BSP所使用的芯片型号修改 FALSH 和 RAM 的大小。比如本次制作的 BSP 包用的芯片型号是 APM32E103ZE 那么就要用到的该型号的基本的固件库头文件包含进来而且还要修改flash大小为512KBram大小为128KB具体内容如下复制#ifndef __BOARD_H__#define __BOARD_H__#includertthread.h#includeapm32e10x.h#includeapm32e10x_gpio.h#includeapm32e10x_rcm.h#includeapm32e10x_misc.h#includeapm32e10x_rcm.h#includeapm32e10x_eint.h#includeapm32e10x_usart.h#includeapm32e10x_dma.h#if defined(RT_USING_ADC)#includeapm32e10x_adc.h#endif#if defined(RT_USING_DAC)#includeapm32e10x_dac.h#endif#if defined(RT_USING_RTC)#includeapm32e10x_rtc.h#includeapm32e10x_pmu.h#endif#if defined(RT_USING_SPI)#includeapm32e10x_spi.h#endif#if defined(RT_USING_HWTIMER) || defined(RT_USING_PWM)#includeapm32e10x_tmr.h#endif#if defined(RT_USING_WDT)#includeapm32e10x_iwdt.h#includeapm32e10x_wwdt.h#endif#if defined(BSP_USING_SDCARD)#includeapm32e10x_sdio.h#endif#if defined(BSP_USING_ON_CHIP_FLASH)#includeapm32e10x_fmc.h#endif#if defined(RT_USING_CAN)#includeapm32e10x_can.h#endif#if defined(BSP_USING_SDRAM)#includeapm32e10x_dmc.h#endif#includedrv_common.h#includedrv_gpio.h#ifdef __cplusplusexternC{#endif#define APM32_FLASH_START_ADRESS ((uint32_t)0x08000000)#define APM32_FLASH_SIZE (512 * 1024)#define APM32_FLASH_END_ADDRESS ((uint32_t)(APM32_FLASH_START_ADRESS APM32_FLASH_SIZE))/* Internal SRAM memory size[Kbytes] 6-128, Default: 128 */#define APM32_SRAM_SIZE 128#define APM32_SRAM_END (0x20000000 APM32_SRAM_SIZE * 1024)#if defined(__ARMCC_VERSION)externintImage$$RW_IRAM1$$ZI$$Limit;#define HEAP_BEGIN ((void *)Image$$RW_IRAM1$$ZI$$Limit)#elif __ICCARM__#pragma sectionCSTACK#define HEAP_BEGIN (__segment_end(CSTACK))#elseexternint__bss_end;#define HEAP_BEGIN ((void *)__bss_end)#endif#define HEAP_END APM32_SRAM_ENDvoidSystemClock_Config(void);voidapm32_usart_init(void);#ifdef __cplusplus}#endif#endif/* __BOARD_H__ */3.修改链接脚本。链接脚本文件存放在 board/linker_scripts 目录下包含了3个平台的链接脚本文件link.sct 文件该文件是Keil平台的链接文件修改如下link.icf 文件该文件是 IAR 平台的链接文件修改如下link.lds该文件是 GCC 平台的链接文件修改如下3.6 重新生成工程重新生成工程需要使用 Env 工具。1.重新生成 rtconfig.h 文件。在 Env 界面输入命令 menuconfig 对工程进行配置并生成新的 rtconfig.h 文件。如下图所示然后打开一个工程所必须的 GPIO 和 UART 外设驱动然后保存退出即可。2.重新生成MDK/IAR工程。下面以重新生成 MDK 工程为例介绍如何重新生成 BSP 工程。使用 env 工具输入命令 scons --targetmdk5 重新生成工程如下图所示到这一步为止新的 BSP 就可以使用了。如果想要生成IAR平台的还可以使用scons --targetiar 命令来生成 IAR 平台的工程。---------------------作者luobeihai链接https://bbs.21ic.com/icview-3501389-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。
常用jenkins插件有哪些?jenkins重要功能介绍 jenkins软件常被使用,同样,jenkins也是今年的热门词汇之一。为增进大家对jenkins的认识,本文将常用的jenkins插件以及jenkins的一些重要功能加以介绍。如果你对jenkins具有兴趣,不妨继续往下阅读哦。一、常用jenkins插件perforce的… 2026/7/9 10:34:31
彻底搞懂:基于检测的追踪(TBD)与质心关联算法 彻底搞懂:基于检测的追踪(TBD)与质心关联算法从“傻傻分不清”到“一眼看透”,一篇讲透多目标追踪核心逻辑 大家在学习多目标追踪(MOT) 时,一定会遇到两个概念: 基于目标检测的追踪方… 2026/5/17 4:21:53
IC697BEM741总线控制器 IC697BEM741 总线控制器是 GE Fanuc / GE plc 系列控制系统中的一种通讯与总线管理模块,用于管理背板通讯、协调模块数据交换以及控制系统内部总线的运行,是 PLC 系统中的重要通信枢纽。产品特点:作为总线控制器模块,用于管理 PLC… 2026/7/7 17:47:01
开发者必读:openeuler/dim_tools源码结构与编译流程解析 开发者必读:openeuler/dim_tools源码结构与编译流程解析 【免费下载链接】dim_tools DIM userspace tools 项目地址: https://gitcode.com/openeuler/dim_tools 前往项目官网免费下载:https://ar.openeuler.org/ar/ 在openEuler生态系统中&#… 2026/7/9 18:41:55
Day 005:工具调用入门,Agent 终于开始“动手”了 系列连载:100 天系统学习 AI Agent 开发 当前阶段:Agent 基础与环境搭建 今日目标:真正理解并设计 Agent 工具调用的输入、输出与权限边界。前几天我们的精力都集中在“搞脑子”上——怎么写好 Prompt,怎么让大模型做计划。但一个… 2026/7/9 18:37:54
YOWO 在 AVA 数据集部署实战:PyTorch 1.12 + CUDA 11.3 环境配置与推理优化 YOWO 在 AVA 数据集部署实战:PyTorch 1.12 CUDA 11.3 环境配置与推理优化当我们需要在视频流中实时检测和定位人类动作时,YOWO(You Only Watch Once)架构凭借其独特的双分支设计和高效的推理性能,成为工业级部署的理想… 2026/7/9 18:35:54
Python 3.12 None 单例模式解析:从 CPython 源码到内存优化实践 Python 3.12 None 单例模式深度解析:从 CPython 源码到高性能应用实践在Python的世界里,None远不止是一个表示"空值"的关键字。作为语言核心中唯一的NoneType实例,它在CPython解释器中扮演着内存管理的关键角色,更是高级… 2026/7/9 18:33:54
Anaconda 虚拟环境隔离 CUDA 12.1:Tesla T4 多项目 PyTorch 2.2 部署方案 Tesla T4 多项目 CUDA 环境隔离:Anaconda 虚拟环境下的 PyTorch 2.2 高效部署指南在深度学习项目开发中,我们经常面临一个棘手问题:如何在单台 GPU 服务器上同时运行多个需要不同 CUDA 和 PyTorch 版本的项目?特别是当团队共享 Te… 2026/7/9 18:31:54
SpringBoot+Vue高校固定资产管理系统毕设全攻略:从需求到部署 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 先搞清楚这个毕设项目到底要做什么 看到“高校固定资产管理系统”这个标题,很多同学第一反应是:这不就是个… 2026/7/9 18:31:54
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08