ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

RT-Thread BSP 实战:AT32F425 AT-START 开发板使用指南与驱动配置详解

RT-Thread BSP 实战:AT32F425 AT-START 开发板使用指南与驱动配置详解 RT-Thread BSP 实战AT32F425 AT-START 开发板使用指南与驱动配置详解【免费下载链接】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-threadAT32F425 AT-START 是雅特力Artery推出的 AT32F425 系列评估板本文以其在 RT-Thread 仓库中的 BSP板级支持包为线索完整讲解从硬件资源、工程生成、编译下载到外设驱动使能与源码映射的全过程。读完本文你将掌握该 BSP 的目录结构、menuconfig 配置项含义、IO 复用关系以及底层驱动初始化逻辑能够基于此快速搭建和裁剪自己的应用工程。简介开发板与芯片资源一览AT32F425 AT-START 评估板搭载的 MCU 为AT32F425R8T7属于雅特力 AT32F425 系列其核心资源参数如下硬件描述芯片型号AT32F425R8T7CPUARM Cortex M4主频96M片内SRAM20K片内FLASH64K在 RT-Thread 仓库中该 BSP 位于 bsp/at32/at32f425-start与仓库内其他 at32 系列 BSP如 at32f403a-start、at32f423-start 等共享同一套位于 bsp/at32/libraries/rt_drivers 的通用驱动库通过f425目录下的配置文件实现芯片级差异隔离。BSP 目录结构解析在深入使用之前先梳理该 BSP 的目录组织。从仓库的目录列表可以看到BSP 根目录下包含applications/用户应用目录默认包含 main.c即 LED 闪烁示例board/板级配置目录其下inc/存放 board.h、at32f425_conf.h、at32_msp.hsrc/存放 board.c 与 at32_msp.clinker_scripts/存放 GCClink.lds、IARlink.icf、MDKlink.sct三种链接脚本KconfigBSP 顶层配置入口通过rsource引入库级与板级 Kconfigrtconfig.h/rtconfig.pymenuconfig 生成的配置头文件与构建脚本project.uvproj(x)、project.ewp等MDK / IAR 工程文件以及对应的template.*模板文件SConstruct/SConscriptSCons 构建脚本其中 SConscript 会递归收集各子目录下含SConscript的模块参与编译。编译说明支持 MDK4 / MDK5 / IAR / GCC该 BSP 同时提供 MDK4、MDK5、IAR 工程和 GCC 编译支持官方在 README.md 中给出了已测试的版本信息IDE/编译器已测试版本MDK4MDK4.74MDK5MDK531IARIAR8.20GCCGCC 5.4.1 20160919 (release)从 rtconfig.h 中的RT_VER_NUM 0x50300可以看出当前 BSP 默认基于 RT-Thread 5.3.0 内核构建同时启用了ARCH_ARM、ARCH_ARM_CORTEX_M、ARCH_ARM_CORTEX_M4体系结构配置与芯片的 Cortex-M4 内核一致。编译环境准备在开始编译前需要准备 RT-Thread 官方 env 工具集成 menuconfig、scons 与包管理器。注意HAL 驱动包与 CMSIS 驱动包均通过软件包机制从 bsp/at32/libraries/Kconfig 引入因此在首次构建时必须先抓取依赖具体步骤见下文快速上手。板载资源根据 README.md 的说明评估板板载资源如下MCUAT32F425R8T7主频 96MHz64KB FLASH20KB RAM常用外设LED3 个红色 PC2、黄色 PC3、绿色 PC5按键1 个KEY_USER兼具唤醒功能PA0常用接口插针串口 J8调试接口板载 AT-LINK SWD 下载其中 LED 的引脚定义在 applications/main.c 中有直接体现#define LED2_PIN GET_PIN(C, 2) #define LED3_PIN GET_PIN(C, 3) #define LED4_PIN GET_PIN(C, 5)GET_PIN宏来自 RT-Thread 的drv_gpio.h将端口字母引脚号组合转换为 RT-Thread pin 设备框架使用的统一引脚编号这也是后续rt_pin_mode/rt_pin_write调用所依赖的编号体系。外设支持情况该 BSP 对外设驱动的支持情况如下表完整数据来自 README.md驱动支持情况备注UART支持USART1/2/3GPIO支持PA0...PF7IIC支持GPIO模拟I2CHWIIC支持I2C1/2SPI支持SPI1/2ADC支持ADC1PWM支持TMR1/2CLOCK_TIMER支持TMR3CAN支持CAN1WDT支持RTC支持FLASH支持USB支持驱动使能Kconfig 配置项详解这些外设并非全部默认开启而是通过 board/Kconfig 中的开关逐个使能。以默认生成的 rtconfig.h 为例当前默认仅开启了BSP_USING_GPIO、BSP_USING_UART、BSP_USING_UART1以及板上串口相关的BSP_USING_SERIAL其余外设均需在 menuconfig 中手动打开。各主要配置项如下UART默认开启BSP_USING_UART使能串口框架其下BSP_USING_UART1/2/3分别使能三路串口。每个串口还可配置BSP_UARTx_RX_USING_DMA/BSP_UARTx_TX_USING_DMA使能收发 DMA需先开启RT_SERIAL_USING_DMABSP_UARTx_RX_BUFSIZERX 缓冲大小取值范围 6465535默认 256BSP_UARTx_TX_BUFSIZETX 缓冲大小取值范围 065535默认 0BSP_UARTx_DMA_PING_BUFSIZERX DMA 乒乓缓冲大小范围 3265535默认 64仅当开启 RX DMA 时出现。GPIO默认开启BSP_USING_GPIO自动选择RT_USING_PIN提供rt_pin_*系列 API。SPIBSP_USING_SPI下细分BSP_USING_SPI1/2/3并可分别为每个 SPI 使能 TX/RX DMA。软件 I2CBSP_USING_SOFT_I2C使能 GPIO 模拟 I2C通过RT_SOFT_I2C1_SCL_PIN/RT_SOFT_I2C1_SDA_PIN指定引脚号默认 22/23对应 PB6/PB7即 I2C1 的 SCL/SDA 位置。硬件 I2CBSP_USING_HARD_I2C使能BSP_USING_HARD_I2C1/2同样支持 DMA 配置。PWMBSP_USING_PWM下细分BSP_USING_PWM1TMR1可选 CH1/CH4与BSP_USING_PWM2TMR2可选 CH1/CH2。CLOCK_TIMERBSP_USING_CLOCK_TIMER使能BSP_USING_HWTMR3硬件定时器 TMR3对应 RT-Thread 时钟设备。ADCBSP_USING_ADC下使能BSP_USING_ADC1。CANBSP_USING_CAN下使能BSP_USING_CAN1。RTCBSP_USING_RTC下通过BSP_RTC_L_SEL选择时钟源LEXT 外部低速晶振或 LICK 内部低速时钟。USBBSP_USING_USBOTG可展开BSP_USING_USBOTG1再细分 DeviceBSP_USING_DEVICE_USBOTG1自动选择RT_USING_USB_DEVICE与 HostBSP_USING_HOST_USBOTG1两种模式。片上 FLASHBSP_USING_ON_CHIP_FLASH默认关闭。对应地串口设备的具体参数在 bsp/at32/libraries/rt_drivers/config/f425/uart_config.h 中定义例如 uart1 的配置为USART1外设 USART1_IRQn中断uart3 则使用共享的USART4_3_IRQn中断号DMA 使能后还会引用dma_config.h中定义的通道路由。IO 在板级支持包中的映射情况README 中给出了完整的 IO 映射表这是硬件接线与驱动调试的第一手资料IO号板级包中的定义PC2LED2PC3LED3PC5LED4PA9USART1_TXPA10USART1_RXPA2USART2_TXPA3USART2_RXPB10USART3_TXPB11USART3_RXPA4SPI1_NSSPA5SPI1_SCKPA6SPI1_MISOPA7SPI1_MOSIPB12SPI2_NSSPB13SPI2_SCKPB14SPI2_MISOPB15SPI2_MOSIPB6I2C1_SCLPB7I2C1_SDAPA8PWM_TMR1_CH1PA11PWM_TMR1_CH4PA0PWM_TMR2_CH1PA1PWM_TMR2_CH2PC0ADC1_IN10PC1ADC1_IN11PC2ADC1_IN12PC3ADC1_IN13PC4ADC1_IN14PC5ADC1_IN15PB8CAN1_RXPB9CAN1_TXPA11USB_DMPA12USB_DP这些映射与 board/src/at32_msp.c 中的 MSP 初始化代码一一对应。例如 USART1 对应 GPIOA 的 PIN9/PIN10 且复用为GPIO_MUX_1SPI1 的 SCK/MISO/MOSI 复用为GPIO_MUX_0TMR1 的 CH1/CH4 复用为GPIO_MUX_2CAN1 的 RX/TX 复用为GPIO_MUX_4ADC1 则将 GPIOC 的 PIN0PIN5 配置为模拟输入模式。当你在 menuconfig 中开启对应外设后这些 GPIO 初始化逻辑会在驱动 probe 阶段由at32_msp_xxx_init自动执行无需手工干预。系统时钟配置96MHz 主频从何而来芯片主频 96MHz 并非默认值而是由 board/src/board.c 中的system_clock_config()显式配置的。其流程为配置 FLASH 等待周期为FLASH_WAIT_CYCLE_296MHz 下需要 2 个等待周期复位 CRM时钟复位管理单元后使能 HEXT 外部高速晶振并等待其稳定以 HEXT 为 PLL 源配置CRM_PLL_MULT_12若 HEXT 为 8MHz则 8×12 96MHz使能 PLL 并等待稳定将 AHB、APB1、APB2 分频均设为 1注释明确 APB1/APB2 最高频率为 96MHz保证外设总线时钟最大化切换系统时钟源到 PLL最后调用system_core_clock_update()更新全局时钟变量。该函数在 BSP 启动早期被调用决定了整个系统的时序基准也直接约束了 UART 波特率、定时器分频等外设参数的计算。使用说明本章节面向刚接触 RT-Thread 的新手遵循下述步骤即可将 RT-Thread 操作系统运行在该开发板上并看到实验效果。快速上手本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程并且支持 GCC 开发环境。下面以 MDK5 开发环境为例介绍如何将系统运行起来。硬件连接使用数据线连接开发板到 PC打开电源开关。编译下载首先需抓取 HAL-SDK即 AT32F425 的 HAL 驱动软件包并生成对应工程步骤如下在 bsp 下打开 env 工具。输入menuconfig命令配置工程配置好之后保存退出。输入pkgs --update命令更新软件包。输入scons --targetmdk4/mdk5/iar命令重新生成工程。打开生成的工程文件如 MDK5 工程project.uvprojx编译并下载程序到开发板。工程默认配置使用 AT-LINK SWD 下载程序在通过 AT-LINK SWD 连接开发板的基础上点击下载按钮即可下载程序到开发板。从构建系统角度看scons --targetmdk5会依据 SConstruct 与 rtconfig.py 中记录的工具链信息、宏定义与源文件列表重新生成project.uvprojx工程同理也可生成 IAR 的project.ewp。更新软件包步骤则通过 Kconfig 中osource $PKGS_DIR/Kconfig与rsource ../libraries/Kconfig引入的软件包定义将PKG_USING_AT32F425_HAL_DRIVER等依赖可在 rtconfig.h 的 AT32 HAL SDK Drivers 一节看到解析并下载到本地packages目录。运行结果下载程序成功之后系统会自动运行观察开发板上 LED 的运行效果LED2/3/4 会周期性闪烁。连接开发板对应串口到 PC在终端工具里打开相应的串口115200-8-1-N复位设备后在串口上可以看到 RT-Thread 的输出信息\ | / - RT - Thread Operating System / | \ 5.0.0 build Jan 29 2023 17:05:16 2006 - 2022 Copyright by RT-Thread team msh 出现msh 提示符即代表系统正常运行。该控制台输出之所以能出现在串口上是因为 rtconfig.h 中配置了RT_CONSOLE_DEVICE_NAME uart1将默认控制台设备绑定到 uart1对应 PA9/PA10终端需按 115200-8-1-N 的参数匹配 uart1 的默认配置。LED 闪烁示例源码分析默认 main.c 即控制三色 LED 依次点亮再依次熄灭核心逻辑如下rt_uint32_t speed 200; /* 三个 LED 引脚均设为推挽输出 */ rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED4_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED2_PIN, PIN_LOW); /* LED2 点亮 */ rt_thread_mdelay(speed); rt_pin_write(LED3_PIN, PIN_LOW); /* LED3 点亮 */ rt_thread_mdelay(speed); rt_pin_write(LED4_PIN, PIN_LOW); /* LED4 点亮 */ rt_thread_mdelay(speed); rt_pin_write(LED2_PIN, PIN_HIGH); /* 依次熄灭 */ rt_thread_mdelay(speed); rt_pin_write(LED3_PIN, PIN_HIGH); rt_thread_mdelay(speed); rt_pin_write(LED4_PIN, PIN_HIGH); rt_thread_mdelay(speed); }这里体现了 RT-Thread pin 设备框架的典型用法rt_pin_mode设置引脚方向rt_pin_write输出电平rt_thread_mdelay让出 CPU 实现延时。LED 低电平点亮PIN_LOW与硬件原理图保持一致。内存与堆配置板级 board.h 中定义了内存布局的关键宏AT32_FLASH_START_ADRESS 0x08000000、FLASH_PAGE_SIZE 1KB、AT32_FLASH_SIZE 64KBAT32_SRAM_SIZE 20KB堆结束地址为0x20000000 20 * 1024堆起始地址HEAP_BEGIN依据不同编译器取链接器符号MDK 为Image$$RW_IRAM1$$ZI$$LimitIAR 为 CSTACK 段尾GCC 为__bss_end。RT-Thread 的动态内存RT_USING_SMALL_MEM_AS_HEAP即建立在HEAP_BEGIN到AT32_SRAM_END之间堆大小直接决定了rt_malloc/rt_free可用的内存上限。如果你的应用需要更大的堆需要留意 20KB SRAM 的物理限制。注意事项在 menuconfig 中开启新外设后务必重新执行pkgs --update与scons --target...否则新使能的驱动源码不会被纳入工程编译。串口调试时若使用 uart2/uart3 作为控制台需要修改 rtconfig.h 中的RT_CONSOLE_DEVICE_NAME并保证对应串口已在 Kconfig 中开启。开启串口 DMA 时需同时确认RT_SERIAL_USING_DMA与对应BSP_UARTx_*_DMA配置DMA 通道路由见 bsp/at32/libraries/rt_drivers/config/f425/dma_config.h。若需查阅更详细的硬件资料可在雅特力官方网站下载 Keil_v5/Keil_v4/IAR 等 pack 安装包和 AT-START 开发板原理图等。联系人信息本 BSP 的维护人为 sheltonyu。若你在移植或使用过程中发现问题可结合 bsp/at32/libraries/rt_drivers 下的通用驱动源码如 drv_usart.c、drv_gpio.c、drv_spi.c、drv_adc.c 等与本文的配置说明对照排查这些驱动实现了对 RT-Thread 设备框架的注册与回调是理解整个 BSP 工作机理的最佳入口。【免费下载链接】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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表