news 2026/4/21 19:51:34

合宙Air001开发板实战指南—从零构建Keil-MDK工程与GPIO控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
合宙Air001开发板实战指南—从零构建Keil-MDK工程与GPIO控制

1. 合宙Air001开发板初体验

第一次拿到合宙Air001开发板时,我着实被它的性价比惊艳到了。这款采用TSSOP20封装的开发板搭载ARM Cortex-M0+内核,内置32KB Flash和4KB RAM,集成多路USART、IIC、SPI等通信外设,还配备了5个16位定时器、1路12位ADC和2路比较器。最让人惊喜的是,10块钱就能买到开发板加10个芯片的组合,这在嵌入式开发领域简直是"白菜价"。

作为一款国产MCU,Air001的开发环境支持非常友好。官方提供了Keil-MDK和Arduino两种开发方式,对于习惯使用专业嵌入式开发工具的用户来说,Keil-MDK无疑是最佳选择。我实测下来,虽然官方文档已经比较详细,但在实际搭建过程中还是会遇到不少细节问题,特别是对于刚接触嵌入式开发的新手来说,一个完整的实战指南非常必要。

2. 开发环境准备

2.1 安装Keil MDK基础环境

在开始Air001开发前,首先需要准备好Keil MDK开发环境。我推荐使用Keil MDK 5.37版本,这个版本对Air001的支持最为稳定。安装过程需要注意以下几点:

  1. 从ARM官网下载Keil MDK安装包时,记得同时下载Compiler Version5,因为Keil MDK 5.37及以后版本默认使用Compiler Version6,而Air001的SDK目前对Version5支持更好。

  2. 安装完成后务必完成注册激活,否则会有32KB代码大小限制。激活过程需要用到License,可以在Keil官网申请评估版或购买正式版。

  3. 安装路径建议保持默认,不要包含中文或特殊字符,避免后续编译时出现路径问题。

2.2 获取Air001 SDK

Air001的SDK可以从OpenLuat的Gitee仓库下载。下载完成后,你会得到一个压缩包,解压后主要包含以下重要目录:

  • PACK:包含Air001的设备支持包,用于Keil识别这款芯片
  • Libraries:HAL库源代码,提供了对芯片外设的抽象封装
  • Projects:官方示例工程
  • Utilities:一些实用工具和脚本

我建议将整个SDK解压到一个固定的工作目录,比如"D:\Air001_SDK",这样后续引用路径会更清晰。

3. 创建第一个Keil工程

3.1 安装设备支持包

打开解压后的SDK目录,进入PACK文件夹,你会看到一个.pack文件。双击这个文件启动Keil的Pack Installer,按照向导完成安装。安装完成后,Keil就能识别Air001这款芯片了。

提示:如果安装过程中遇到权限问题,可以尝试以管理员身份运行Keil后再安装。

3.2 新建工程框架

打开Keil MDK,点击"Project"→"New μVision Project",选择一个合适的目录保存工程。我习惯在SDK目录下新建一个"Projects"文件夹来存放自己的工程。

在弹出的设备选择窗口中,搜索并选择"Air001"芯片。这里要注意选择正确的Flash和RAM大小配置,Air001应该是32KB Flash和4KB RAM的配置。

接下来会弹出运行时环境配置窗口,这里需要勾选:

  • CMSIS→CORE
  • Device→Startup

这两个选项会为工程添加必要的启动文件和CMSIS核心支持。

3.3 工程目录结构规划

一个良好的工程目录结构能让后续开发更有序。我通常采用如下结构:

MyProject/ ├── Drivers/ │ ├── AIR001xx_HAL_Driver/ # 从SDK复制过来的HAL库 ├── Inc/ # 头文件 ├── Src/ # 源文件 ├── MDK-ARM/ # Keil自动生成的目录 └── MyProject.uvprojx # Keil工程文件

将SDK中Libraries目录下的AIR001xx_HAL_Driver文件夹复制到工程的Drivers目录下。这样做的目的是保持工程文件的独立性,避免直接修改SDK中的原始文件。

4. 配置工程与HAL库

4.1 添加HAL库源文件

回到Keil中,我们需要将HAL库的源文件添加到工程。右键点击"Target 1",选择"Add Existing Files to Group...",然后导航到Drivers/AIR001xx_HAL_Driver/Src目录,添加以下核心文件:

  • air001xx_hal.c
  • air001xx_hal_rcc.c
  • air001xx_hal_rcc_ex.c
  • air001xx_hal_cortex.c
  • air001xx_hal_gpio.c
  • air001xx_hal_pwr.c
  • air001xx_hal_pwr_ex.c
  • air001xx_hal_flash.c

这些文件提供了芯片的基础外设驱动支持。随着后续功能的扩展,你可能需要添加更多外设驱动文件。

4.2 创建必要的配置文件

在Inc目录下新建air001xx_hal_conf.h文件,这是HAL库的配置文件。内容如下:

#ifndef __AIR001xx_HAL_CONF_DEFAULT_H #define __AIR001xx_HAL_CONF_DEFAULT_H #ifdef __cplusplus extern "C" { #endif #define HAL_MODULE_ENABLED #define HAL_GPIO_MODULE_ENABLED #define HAL_RCC_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED #define HAL_PWR_MODULE_ENABLED #define HAL_CORTEX_MODULE_ENABLED #define HSE_VALUE 8000000U #define HSE_STARTUP_TIMEOUT 100U #define HSI_VALUE 24000000U #define HSI_STARTUP_TIMEOUT 5000U #define LSI_VALUE 32000U #define LSE_VALUE 32768U #define LSE_STARTUP_TIMEOUT 5000U #define TICK_INT_PRIORITY 0x00U #include "air001xx_hal_rcc.h" #include "air001xx_hal_gpio.h" #include "air001xx_hal_flash.h" #include "air001xx_hal_pwr.h" #include "air001xx_hal_cortex.h" #define assert_param(expr) ((void)0U) #ifdef __cplusplus } #endif #endif

这个文件定义了要启用的HAL模块和芯片的一些时钟参数。对于初学者来说,直接使用这个配置即可。

4.3 添加中断处理文件

在嵌入式系统中,中断处理是必不可少的。我们需要创建两个文件:

air001xx_it.h(放在Inc目录):

#ifndef __AIR001XX_IT_H #define __AIR001XX_IT_H #ifdef __cplusplus extern "C" { #endif void NMI_Handler(void); void HardFault_Handler(void); void SVC_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); #ifdef __cplusplus } #endif #endif

air001xx_it.c(放在Src目录):

#include "air001xx_it.h" void NMI_Handler(void) {} void HardFault_Handler(void) { while(1) {} } void SVC_Handler(void) {} void PendSV_Handler(void) {} void SysTick_Handler(void) { HAL_IncTick(); }

这些函数是Cortex-M0+内核的基本中断处理程序,其中SysTick_Handler尤为重要,它为HAL库提供了时间基准。

4.4 配置头文件路径和宏定义

点击Keil工具栏上的"Options for Target"按钮(魔术棒图标),在"C/C++"选项卡中:

  1. 在"Include Paths"中添加以下路径:

    • ../Inc
    • ../Drivers/AIR001xx_HAL_Driver/Inc
    • ../Drivers/CMSIS/Device/ST/AIR001xx/Include
    • ../Drivers/CMSIS/Include
  2. 在"Define"框中添加宏定义:AIR001_DEV

这些配置确保编译器能找到所有必要的头文件,并正确定义芯片型号。

5. 编写第一个点灯程序

5.1 创建main.c文件

在Src目录下创建main.c文件,这是程序的入口。我们将实现一个简单的LED闪烁程序:

#include "air001xx_hal.h" int main(void) { HAL_Init(); GPIO_InitTypeDef GPIO_LED = { .Pin = GPIO_PIN_0, .Mode = GPIO_MODE_OUTPUT_PP, }; __HAL_RCC_GPIOB_CLK_ENABLE(); HAL_GPIO_Init(GPIOB, &GPIO_LED); while(1) { HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); HAL_Delay(500); } }

这段代码做了以下几件事:

  1. 初始化HAL库
  2. 配置GPIOB的Pin0为推挽输出模式
  3. 启用GPIOB的时钟
  4. 在循环中每隔500ms切换一次LED状态

5.2 解决常见编译问题

第一次编译时可能会遇到以下问题:

  1. 编译器版本不匹配:确保在"Options for Target"→"Target"选项卡中选择了"Use default compiler version 5"。

  2. 未定义HAL_IncTick:这个问题通常是因为忘记包含air001xx_hal.h头文件,或者头文件路径配置不正确。

  3. 警告"no newline at end of file":这是Keil的一个严格检查,可以在文件末尾添加一个空行解决。

5.3 烧录配置

编译成功后,就可以准备烧录程序了。点击"Options for Target"→"Debug"选项卡:

  1. 选择你的调试器类型(如ST-Link、J-Link或DAP等)
  2. 在"Utilities"选项卡中勾选"Reset and Run",这样程序下载后会自动运行
  3. 根据你的调试器接口(SWD或JTAG)正确连接开发板

Air001开发板通常使用SWD接口,连接方式如下:

  • SWDIO → PB13
  • SWCLK → PB14
  • GND → GND
  • VCC → 3.3V

5.4 验证结果

烧录成功后,你应该能看到开发板上的LED开始以1Hz的频率闪烁。如果没有看到预期效果,可以检查以下几点:

  1. LED连接的GPIO引脚是否正确(有些开发板LED可能连接在其他引脚)
  2. GPIO初始化代码是否正确配置了对应的引脚
  3. 开发板的供电是否正常
  4. 调试器连接是否可靠

如果一切正常,恭喜你完成了第一个Air001程序!这个简单的点灯实验验证了你的开发环境配置正确,为后续更复杂的开发打下了基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 19:50:58

毕业季论文救星!9 款 AI 工具组合拳 选题到答辩一步到位

又到了本科生集体 “渡劫” 的毕业季:选题改到怀疑人生,文献翻到眼花缭乱,格式调到手抽筋,查重率居高不下还得兼顾实习秋招。与其硬扛熬夜爆肝,不如换个思路 —— 用对 AI 工具,让论文写作效率直接开挂。下…

作者头像 李华
网站建设 2026/4/21 19:50:14

Prism方差分析结果看不懂?手把手教你解读F值、P值与方差分析表

Prism方差分析结果看不懂?手把手教你解读F值、P值与方差分析表 第一次在Prism中跑完方差分析时,盯着那张满是数字的表格,我的反应和大多数研究者一样——这些SS、df、MS究竟在说什么?更让人焦虑的是,明明实验数据差异肉…

作者头像 李华