ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RT-Thread LPC408x 板级支持包(BSP)使用指南:编译、烧写与驱动配置

RT-Thread LPC408x 板级支持包(BSP)使用指南:编译、烧写与驱动配置 操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载RT-Thread 的 LPC408x BSP 是基于 NXP LPC4088FET208ARM Cortex-M4评估板搭建的完整板级支持包涵盖串口、以太网、LCD、SDRAM、ADC 与 GPIO 等外设驱动。本文以 bsp/nxp/lpc/lpc408x/README.md 为主线结合板级包源码系统讲解板级资源、编译流程、烧写运行方法、驱动支持现状与 IO 映射帮助开发者在 RT-Thread 环境下快速完成 LPC408x 平台的评估、开发与驱动裁剪。板级资源概览LPC408x 是 RT-Thread 推出的基于 LPC408x 系列芯片的评估板板载核心资源如下表所示硬件描述芯片型号LPC4088FET208CPUARM Cortex M4主频120M片内 SRAM64K片外 SDRAM32M片内 FLASH512K其中片外 SDRAM 的 32M 容量由板级包的 SDRAM 配置直接决定在 drivers/drv_sdram.h 中默认启用SDRAM_CONFIG_16BIT16 位数据总线模式对应EXT_SDRAM_SIZE为0x2000000256Mbit即 32MB若改为 32 位总线模式SDRAM_CONFIG_32BIT容量则扩展为0x4000000512Mbit即 64MB。片外 SDRAM 的基址为0xA0000000CS0该地址段由 drivers/drv_sdram.c 中 EMC 控制器初始化代码完成时序配置后即可访问。BSP 目录结构与源码布局LPC408x BSP 位于 bsp/nxp/lpc/lpc408x采用 RT-Thread 标准 BSP 目录组织方式lpc408x/ ├── applications/ # 应用入口main.c ├── drivers/ # 板级驱动 │ ├── linker_scripts/ # 链接脚本MDK/IAR/GCC 三种 │ ├── board.c / board.h # 板级初始化 │ ├── drv_uart.c / .h # 串口驱动 │ ├── drv_emac.c / .h # 以太网驱动 │ ├── drv_led.c / .h # LED 驱动 │ ├── drv_sdram.c / .h # SDRAM 驱动 │ ├── drv_adc.c / .h # ADC 驱动 │ ├── drv_timer.c / .h # 定时器驱动 │ └── Kconfig # 驱动菜单配置 ├── Kconfig # BSP 顶层配置菜单 ├── SConstruct / SConscript # scons 构建脚本 ├── rtconfig.h # 已生成的工程配置 └── project.uvproj(x) # MDK 工程文件应用入口 applications/main.c 在main线程中打印Hello RT-Thread!后返回RT_EOK可作为最小验证程序。编译说明LPC408x 板级包支持 MDK4、MDK5 开发环境和 GCC 编译器各工具链的已测试版本如下IDE / 编译器已测试版本MDK4MDK4.74MDK5MDK524aGCCGCC 5.4.1 20160919 (release)请注意在执行编译工作前请先打开 ENV 执行以下指令该指令用于拉取必要的库否则无法通过编译pkgs --update该指令的必要性可从构建配置中得到印证LPC408x 的 BSP 依赖PKG_USING_NXP_LPC_DRIVER软件包提供底层外设库。在 rtconfig.h 中可以看到PKG_USING_NXP_LPC_DRIVER与PKG_USING_NXP_LPC_DRIVER_LATEST_VERSION两个宏定义而 Kconfig 中SOC_LPC4088选项也通过select PKG_USING_NXP_LPC_DRIVER强制选中该依赖drivers/drv_uart.c 使用的LPC_UART_TypeDef、drivers/drv_sdram.c 使用的lpc_emc.h等头文件均来自该软件包。因此未经pkgs --update拉取软件包前工程无法完成编译链接。使用 ENV scons 构建除了直接打开 MDK 工程project.uvproj/project.uvprojx编译外也可在 ENV 命令行中执行scons -j4scons 构建所需的rtconfig.h已随 BSP 提供构建系统会根据 SConstruct 与 SConscript 自动组织 RT-Thread 内核、组件与板级驱动的编译单元。配置裁剪menuconfig如需裁剪外设驱动可在 ENV 中进入 BSP 目录执行menuconfigBSP 与驱动的菜单项定义分别位于 Kconfig 和 drivers/Kconfig其可用选项详见下文「驱动支持情况及计划」。烧写及执行烧写与运行需要完成以下三步连接供电方式使用方口 USB 连接电脑和开发板。下载程序使用 JLink/ULink 等仿真器连接到板子上的 20Pin 仿真口。串口连接板载 CP2102连接了 USB 后打开相应的串口即可。打开串口终端波特率 115200后串口设备对应板载 CP2102 转出的 USB 虚拟串口复位开发板即可观察启动输出。运行结果如果编译 烧写无误当复位设备后会在串口上看到 RT-Thread 的启动 logo 信息\ | / - RT - Thread Operating System / | \ 3.0.4 build May 22 2018 2006 - 2018 Copyright by rt-thread team finsh /启动完成后进入finsh /命令行MSH shell。该行为由 rtconfig.h 中的RT_USING_MSH、RT_USING_FINSH、FINSH_USING_MSH等配置项使能控制台设备通过RT_CONSOLE_DEVICE_NAME uart0指定即 UART0。板级初始化流程由 drivers/board.c 的rt_hw_board_init()完成先配置 NVIC 向量表偏移SCB-VTOR、初始化 SysTick周期为SystemCoreClock / RT_TICK_PER_SECOND其中RT_TICK_PER_SECOND为 1000即 1ms 一个系统节拍再按需初始化堆默认使用片内 SRAM 堆区若开启 SDRAM 则以 SDRAM 作为系统堆随后执行rt_components_board_init()完成板级组件自动初始化最后将控制台设备设置为uart0。驱动支持情况及计划LPC408x 板级包当前支持以下驱动驱动支持情况备注UART支持UART0/2ETH支持LCD支持SDRAM支持ADC支持这些驱动的使能开关统一由 drivers/Kconfig 管理各选项如下菜单配置项默认值说明BSP_USING_EMACn以太网 EMAC 驱动选中后自动启用RT_USING_LWIPBSP_USING_CLOCK_TIMER0n定时器 0 驱动选中后自动启用RT_USING_CLOCK_TIMEBSP_USING_ADCnADC 驱动选中后自动启用RT_USING_ADCBSP_USING_UART0yUART0P0.2/P0.3T/R自动启用RT_USING_SERIALBSP_USING_UART2nUART2P2.8/P0.11T/RBSP_USING_SDRAMn片外 SDRAMBSP_USING_LEDn板载 LED当前 rtconfig.h 默认只开启了BSP_USING_UART0其余驱动需通过 menuconfig 按需开启后重新生成配置并编译。UART 驱动实现要点串口驱动实现在 drivers/drv_uart.c其要点如下引脚复用UART0 对应 P0.2U0_TXD与 P0.3U0_RXDUART2 对应 P2.8U2_TXD与 P0.11U2_RXD通过配置LPC_IOCON寄存器完成引脚功能选择。波特率计算lpc_configure()依据公式Fdiv (PeripheralClock / 16) / cfg-baud_rate计算分频值写入DLM/DLL寄存器默认参数为 115200 bps、8 数据位、1 停止位、无校验。中断接收UART0/UART2 的中断服务程序解析 IIR 寄存器在接收数据时调用rt_hw_serial_isr()上报RT_SERIAL_EVENT_RX_IND事件驱动注册时使用RT_DEVICE_FLAG_INT_RX即中断接收模式。设备注册两个串口分别以uart0、uart2名称注册到设备框架注册入口rt_hw_uart_init()通过INIT_BOARD_EXPORT在板级初始化阶段自动执行。SDRAM 与堆管理开启BSP_USING_SDRAM且内核启用RT_USING_MEMHEAP_AS_HEAP后drivers/board.c 会先调用rt_hw_sdram_init()初始化 EMC 控制器drivers/drv_sdram.c 中完成 D0-D15 数据线、A0-A12 地址线等 GPIO 复用与 SDRAM 时序配置随后将EXT_SDRAM_BEGIN0xA0000000至EXT_SDRAM_END区间注册为系统堆并把片内 SRAM 剩余空间单独挂载为名为sdram的 memheap。未开启 SDRAM 时系统堆则为片内 SRAM 区drivers/board.h 中HEAP_BEGIN至HEAP_END其中HEAP_BEGIN依据编译器不同取自Image$$RW_IRAM1$$ZI$$LimitMDK、__segment_end(HEAP)IAR或__bss_endGCC对应三种链接脚本 link.sct、link.icf 与 link.lds。IO 在板级支持包中的映射情况板级包对板载 LED 与按键做了统一的 IO 映射IO 号板级包中的定义P3_14LED1P3_3LED2P2_2LED3P0_6SW2P0_5SW3P1_1SW4其中 LED 驱动drivers/drv_led.c在开启BSP_USING_LED后生效其底层实际驱动 P4.15/P4.16/P4.17/P4.27 四个 GPIO 引脚输出将引脚配置为 GPIO 输出模式并在初始化时默认熄灭所有 LED通过自定义命令码LED_DEVICE_CTRL (0x81)控制灯的状态按键则可通过 GPIO 中断或轮询方式读取P0.6、P0.5、P1.1 分别对应 SW2/SW3/SW4。联系人信息维护人tanek。遇到 BSP 相关问题如驱动 bug、新功能需求时可通过该维护人渠道反馈仓库内 MAINTAINERS 亦记录了项目各模块的整体维护分工。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐RT-Thread 在 ACM32F4xx 上的板级支持包BSP开发指南编译、烧写与驱动配置RT Thread 在 ACM32F4xx 上的板级支持包BSP开发指南编译、烧写与驱动配置 本篇技术指南围绕 RT Thread 仓库中 bsp/acm操作系统嵌入式物联网嵌入式OSRTOS旅游场景的即时翻译基于hf_mirrors/ai-gitcode/seamless-m4t-v2-large的离线翻译解决方案旅游场景的即时翻译基于hf_mirrors/ai gitcode/seamless m4t v2 large的离线翻译解决方案 在全球化旅行日益普及的今天语操作系统嵌入式物联网嵌入式OSRTOSRT-Thread VANGOV85XXP-EVAL 板级支持包详解从编译烧写到驱动移植RT Thread VANGOV85XXP EVAL 板级支持包详解从编译烧写到驱动移植 RT Thread 官方仓库 bsp/Vango/v85xxp 目录操作系统嵌入式物联网嵌入式OSRTOS上一篇Ultimate Vocal Remover GPU加速全攻略3倍性能提升的配置指南下一篇DeepSeek-R1-0528发布推理能力跃升87.5%开源模型逼近国际顶尖水平创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进