ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RT-Thread N32G45XVL-STB BSP:基于 N32G457VEL7 的板级支持包详解与快速上手指南

RT-Thread N32G45XVL-STB BSP:基于 N32G457VEL7 的板级支持包详解与快速上手指南 操作系统嵌入式物联网嵌入式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 仓库中的 N32G45XVL-STB 板级支持包BSP为主体讲解该评估板的硬件资源、外设驱动支持矩阵与引脚映射、MDK5/IAR/GCC 三种工具链的编译方式并结合 board.c、main.c 与链接脚本等源码说明系统启动流程、内存布局与例程实现帮助读者将该 BSP 跑起来并理解其内部结构。一、评估板硬件规格N32G45XVL-STB 是国民技术NationZ推出的一款 N32G457 系列评估板。核心 MCU 的资源参数如下硬件描述芯片型号N32G457VEL7CPUARM Cortex-M4主频144MHz片内 SRAM144KB片内 Flash512KB这些参数在板级代码中有直接对应。board.h 中定义了 Flash 与 SRAM 的地址边界#define N32_FLASH_START_ADRESS ((uint32_t)0x08000000) #define N32_FLASH_SIZE (512 * 1024) #define N32_FLASH_END_ADDRESS ((uint32_t)(N32_FLASH_START_ADRESS N32_FLASH_SIZE)) /* Internal SRAM memory size[Kbytes] 144, Default: 144 */ #define N32_SRAM_SIZE (144) #define N32_SRAM_END (0x20000000 N32_SRAM_SIZE * 1024)即代码以0x08000000为 Flash 基址、按 512KB 计算结束地址以0x20000000为 SRAM 基址、按 144KB 计算结束地址与数据手册一致。GCC 的链接脚本 link.lds 中同样声明了这两个内存区MEMORY { CODE (rx) : ORIGIN 0x08000000, LENGTH 512k /* 512KB flash */ DATA (rw) : ORIGIN 0x20000000, LENGTH 144k /* 144KB sram */ }二、编译环境支持该 BSP 支持 MDK5 开发环境和 GCC 编译器仓库中同时提供 IAR 工程文件project.ewp官方文档给出的已测试版本如下IDE/编译器已测试版本MDK5V5.34IARV8.50GCCGCC 6.2.1 20161205 (release)从 BSP 目录结构看project.uvprojxMDK5、project.ewp/project.ewwIAR与SConstruct/SConscriptGCC SCons 构建体系三套工程并存另有template.uvprojx、template.ewp等模板工程用于在包管理器Package Manager中生成新的工程文件。三、板载资源与调试接口评估板提供的板载资源如下MCUN32G457VEL7主频 144MHz512KB Flash常用外设LED3 个 —— LED1 (PA8)、LED2 (PB4)、LED3 (PB5)按键5 个 —— RESET (NRST)、WAKEUP (PA0)、KEY1 (PA4)、KEY2 (PA5)、KEY3 (PA6)常用接口USB 接口 (J3)调试接口板载 CMSIS-DAP SWD 下载器 (J4)另支持 J-Link。需要特别留意的是引脚复用关系KEY1/KEY2/KEY3 分别复用 PA4/PA5/PA6而这三个引脚同时也是 SPI1 的 NSS/SCK/MISO 以及 ADC2 的输入通道因此在启用 SPI1 或 ADC2 相关功能时需要考虑与按键引脚的冲突详见下文 IO 映射表。四、外设驱动支持矩阵本 BSP 目前对外设驱动的支持情况如下引自 BSP 官方文档驱动支持情况备注UART支持USART1/2/3, UART4/5/6/7GPIO支持PA0, PA1... PK15 → PIN: 0, 1...79I2C支持软件 I2CSPI支持SPI1/2/3ADC支持ADC1/2/3/4CAN支持CAN1/2DAC支持DAC1/2CLOCK_TIMER支持TIMER1/2/3/4/5/6/7/8WDT支持IWDG其中 GPIO 驱动通过 RT-Thread 的 pin 设备框架rt_pin_mode/rt_pin_write等 API访问BSP 将物理引脚 PA0~PK15 映射为逻辑引脚号 0~79应用代码无需关心端口字母直接以GET_PIN(B, 5)这类宏获取引脚号即可。4.1 IO 在板级支持包中的映射情况下表完整保留了 BSP 文档给出的 IO 映射关系IO 号板级包中的定义PA9USART1_TXPA10USART1_RXPA2USART2_TXPA3USART2_RXPB10USART3_TXPB11USART3_RXPA13UART4_TXPA14UART4_RXPB13UART5_TXPB14UART5_RXPB0UART6_TXPB1UART6_RXPC2UART7_TXPC3UART7_RXPA4SPI1_NSSPA5SPI1_SCKPA6SPI1_MISOPA7SPI1_MOSIPB12SPI2_NSSPB13SPI2_SCKPB14SPI2_MISOPB15SPI2_MOSIPA15SPI3_NSSPB3SPI3_SCKPB4SPI3_MISOPB5SPI3_MOSIPA1ADC1_IN02PA3ADC1_IN04PA4ADC2_IN01PA5ADC2_IN02PB11ADC3_IN01PB13ADC3_IN05PB14ADC4_IN04PB15ADC4_IN05PA4DAC1PA5DAC2PB8CAN1_RXPB9CAN1_TXPB12CAN2_RXPB13CAN2_TX由上表可以归纳出几个复用冲突点实际开发外设时应优先规避PA4/PA5/PA6同时是 KEY1/KEY2/KEY3 按键、SPI1 信号与 ADC2/DAC1/DAC2 通道PB4/PB5同时是 LED2/LED3 与 SPI3 信号PB12~PB15是 SPI2、CAN2 与部分 ADC 通道的公共引脚。例如 BSP 自带的 LED 例程选择了 PB5LED3闪烁若后续项目要使用 SPI3则需将 LED3 或 SPI3_MOSI 改接引脚。五、快速上手以下流程以 MDK5 开发环境为例帮助初次接触 RT-Thread 的读者在几分钟内将系统运行起来。5.1 硬件连接使用数据线连接开发板到 PC打开电源开关。由于板载 J4 为 CMSIS-DAP SWD 下载接口无需额外购买下载器也可以改用 J-Link 连接 SWD 调试口。5.2 编译下载双击 BSP 根目录下的project.uvprojx文件打开 MDK5 工程编译并将程序下载到开发板。BSP 内已包含完整的启动代码、内核、libc 与板级驱动源文件无需额外添加。5.3 运行结果下载成功之后系统自动运行观察开发板 LED 的运行效果LED3PB5周期性闪烁。该现象由示例程序 main.c 产生其实现如下/* defined the LED3 pin: PB5 */ #define LED3_PIN GET_PIN(B, 5) int main(void) { /* set LED3 pin mode to output */ rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED3_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED3_PIN, PIN_LOW); rt_thread_mdelay(500); } }GET_PIN(B, 5)将 PB5 换算成 pin 设备框架下的引脚号rt_thread_mdelay(500)依赖内核的软定时器实现毫秒级阻塞从而构成 500ms 高电平 500ms 低电平的闪烁节奏。接着将开发板串口连接到 PC在终端工具中打开相应串口115200-8-1-N注意是 8 位数据位、无校验、无流控复位设备后在串口上可以看到 RT-Thread 的输出信息\ | / - RT - Thread Operating System / | \ 4.1.1 build Apr 24 2022 17:24:22 2006 - 2022 Copyright by RT-Thread team msh 出现msh 提示符即表示 RT-Thread 内核、Finsh shell 与串口控制台均已正常工作可以直接在 shell 中执行list_thread、list_device等命令查看系统状态。六、系统启动与内存布局源码解析6.1 板级初始化 rt_hw_board_init启动链路中Reset_Handler完成栈指针设置与 .data/.bss 段拷贝清零后进入系统初始化其中板级入口为 board.c 中的rt_hw_board_init()void rt_hw_board_init(void) { /* NVIC Configuration */ NVIC_Configuration(); /* Configure the SysTick */ SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); /* Call components board initial (use INIT_BOARD_EXPORT()) */ #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif #ifdef RT_USING_CONSOLE rt_console_set_device(RT_CONSOLE_DEVICE_NAME); #endif #ifdef BSP_USING_SRAM rt_system_heap_init((void *)EXT_SRAM_BEGIN, (void *)EXT_SRAM_END); #else rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); #endif }各步骤含义如下NVIC_Configuration()根据VECT_TAB_RAM/VECT_TAB_FLASH宏把中断向量表基址设到0x20000000SRAM或0x08000000Flash本 BSP 默认使用 Flash 基址SysTick 配置以SystemCoreClock / RT_TICK_PER_SECOND配置 SysTick 重载值。本 BSP 的 rtconfig.h 中RT_TICK_PER_SECOND为 1000即 144MHz 主频下每 144000 个时钟产生一次滴答rt_components_board_init()在开启RT_USING_COMPONENTS_INIT时执行所有通过INIT_BOARD_EXPORT()注册的板级初始化函数各外设驱动GPIO、UART 等正是在此处完成设备注册rt_console_set_device()绑定控制台设备使msh 提示符从默认串口输出rt_system_heap_init()初始化小内存堆heap区间由 board.h 中的宏按编译器区分#if defined(__ARMCC_VERSION) extern int Image$$RW_IRAM1$$ZI$$Limit; #define HEAP_BEGIN ((void *)Image$$RW_IRAM1$$ZI$$Limit) #elif __ICCARM__ #pragma sectionCSTACK #define HEAP_BEGIN (__segment_end(CSTACK)) #else extern int __bss_end; #define HEAP_BEGIN ((void *)__bss_end) #endif #define HEAP_END N32_SRAM_END可见 MDK5 以 ARM 链接器符号Image$$RW_IRAM1$$ZI$$Limit作为堆起点GCC 以__bss_end为起点与 link.lds 中.bss段后定义的__bss_end符号对应堆终点统一为N32_SRAM_END0x20024000即 144KB SRAM 末尾。6.2 GCC 链接脚本的关键符号link.lds 除声明 MEMORY 区域外还定义了若干 RT-Thread 运行所依赖的段KEEP(*(FSymTab))/KEEP(*(VSymTab))Finsh 的命令符号表与变量符号表__fsymtab_start/__fsymtab_end、__vsymtab_start/__vsymtab_end为表边界KEEP(*(SORT(.rti_fn*)))INIT 组件初始化函数表__rt_init_start/__rt_init_end为边界.stack段_system_stack_size 0x15005.5KB即主线程之外的系统栈中断栈大小_sidataFlash 中 .data 初始化数据的加载地址启动代码据此完成 RAM 中 .data 段拷贝。6.3 构建体系Kconfig 与 SConsBSP 的 Kconfig 通过source引入根 Kconfig 与库目录 Kconfig用rsource引入板级与器件库 Kconfigmainmenu RT-Thread Configuration RTT_DIR : ../../../.. source $(RTT_DIR)/Kconfig osource $PKGS_DIR/Kconfig rsource ../libraries/Kconfig rsource board/Kconfig其中../libraries/Kconfig指向bsp/n32/n32gxx_lxx/libraries/下的 N32G45x 标准外设库配置。使用 GCC 工具链时在 BSP 目录执行scons即可编译menuconfig可配置内核与组件选项生成的rtconfig.h即 rtconfig.h中的宏如RT_THREAD_PRIORITY_MAX 32、RT_TICK_PER_SECOND 1000、RT_USING_DEBUG等决定内核行为。七、注意事项与相关资源外设引脚复用冲突按键/LED 与 SPI、ADC、DAC、CAN 共脚是本板开发时需重点关注的问题选型引脚时请对照第四节的映射表串口参数固定为 115200-8-1-N与 BSP 中 UART 驱动的默认配置一致同一n32gxx_lxx目录下还有n32g43xcl-stb、n32g45xrl-stb、n32l43xml-stb等姐妹 BSP结构与驱动组织方式类似可交叉参考本 BSP 维护人为 WangQian国民技术团队如有问题可通过 RT-Thread 社区或维护者渠道反馈。至此本文以 N32G45XVL-STB 的官方 README 为骨架补齐了其背后的源码实现从 512KB/144KB 的存储布局、rt_hw_board_init的四步启动流程到示例程序的 pin 框架用法与 Finsh 符号表链接细节覆盖了该 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 HPM6300EVK BSP 实战基于 RISC-V 的板级支持包快速移植与上手指南RT Thread HPM6300EVK BSP 实战基于 RISC V 的板级支持包快速移植与上手指南 HPM6300EVK 是先楫半导体HPMicro操作系统嵌入式物联网嵌入式OSRTOSRT-Thread N32G457QEL-STB 板级支持包BSP使用指南硬件资源、外设驱动与快速上手RT Thread N32G457QEL STB 板级支持包BSP使用指南硬件资源、外设驱动与快速上手 本篇技术指南以 RT Thread 仓库中 N32操作系统嵌入式物联网嵌入式OSRTOSRT-Thread BSP 实战APM32S103VB MINI BOARD 板级支持包使用与快速上手RT Thread BSP 实战APM32S103VB MINI BOARD 板级支持包使用与快速上手 APM32S103VB MINI BOARD 是极海半操作系统嵌入式物联网嵌入式OSRTOS上一篇BilibiliDown三分钟掌握B站视频下载的完整方案下一篇5分钟掌握BilibiliDown免费跨平台B站视频下载器终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表