合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)

news/2024/12/19 9:41:39/

在这里插入图片描述
  近日合宙出品了一款:

TSSOP20封装、ARM®Cortex®-M0+内核,内置32K Flash+4K RAM、集成多路USART、IIC、SPI等通讯外设,516bit定时器以及112bit ADC和2路比较器的国产MCU

  10块钱一个开发板+10个芯片,性价比还是很高的,加其“独特”的包装外观,笔者立即入手尝尝鲜。

一、 简介

  本系列教程完全按照官方文档教程,只不过将操作步骤进行更具体的记录,以及遇到的问题与解决方法,如果有需要直接观看官方文档的,点击→:Air001芯片环境搭建教程
  下述教程以基于KEIL-MDK的开发方式为主,如果需要以Arduino IDE进行开发,可参考官方文档:Air001芯片环境-Arduino搭建教程

一、 环境搭建

1、下载SDK

  这里默认大家已经装好的keil MDK并完成注册激活,首先下载安装Air001芯片的SDK:Air001 SDK下载【OpenLuat Gitee】

在这里插入图片描述

解压下载的文件,然后进入PACK文件夹:
在这里插入图片描述

2、安装PACK

双击打开.pack文件安装:
在这里插入图片描述

点击NEXT完成安装
在这里插入图片描述

3、新建Keil工程

打开Keil,点击“Project”–“New μVison Project”
在这里插入图片描述

然后在选择合适的位置和名称后点击确定:
在这里插入图片描述

在弹出的窗口中选择Air001芯片,然后点击“OK”:
在这里插入图片描述

在弹出的窗口中勾选“CMSIS”中的“CORE”和“Device”的“Stratup”,然后点击“OK”:
在这里插入图片描述

4、配置Keil工程

(1)拷贝HAL库

将SDK文件夹中的Libraries目录下的AIR001xx_HAL_Driver文件夹复制在工程目录下:
在这里插入图片描述

在这里插入图片描述

(2)添加C文件引用

回到Keil软件,给工程添加添加HAL库外设源文件,按下图步骤操作,最后选择“\Libraries\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”

完成添加:
在这里插入图片描述

(3)新建main.c

首先创建一个main.c文件
在这里插入图片描述

在这里插入图片描述

文件内容先空着。

(4)新建air001xx_hal_conf.h

创建一个“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    /*!< Value of the External Low Speed oscillator in Hz */
#define LSE_STARTUP_TIMEOUT  5000U     /*!< Time out for LSE start up, in ms */
#define  TICK_INT_PRIORITY            0x00U /*!< tick interrupt priority */#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)#endif

上述内容也是源于官方教程中的代码内容:
在这里插入图片描述

补充完如下图,标红的语句是由于头文件还未添加相关文件路径,后续添加:
在这里插入图片描述

(5)新建air001xx_it.h

新建air001xx_it.h头文件用于实现中断函数,和上面一样,新建文件“air001xx_it.h”:
在这里插入图片描述

代码内容:

#ifndef __AIR001XX_IT_H
#define __AIR001XX_IT_H#ifdef __cplusplusextern "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

在这里插入图片描述

(6)新建air001xx_it.c

同样的操作,新建“air001xx_it.c”文件:
在这里插入图片描述

#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();
}

在这里插入图片描述

(7)添加头文件路径

接下来开始补充路径,首先点击“Options for Target”,也就是“魔棒”
在这里插入图片描述

然后选择“C/C++”–“Includes Paths”右边的扩展按钮:
在这里插入图片描述

添加下述路径,最后点击“OK”:
在这里插入图片描述

(8)添加宏定义

添加宏定义“AIR001_DEV”,然后点击“OK”
在这里插入图片描述

补充main.c的文件内容:

#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);}
}

(9)编译

这里就可以进行尝试编译了,编译前要注意,C编译器选的是Compiler Version5,Keil MDK 5.37以及以后版本的默认都是6版本的了,需要自己手动安装Compiler Version5(https://developer.arm.com/downloads/view/ACOMP5 [需要注册\登录]:
在这里插入图片描述

我这里编译时报了一个小问题:
在这里插入图片描述

该函数是在“air001xx_hal.h”中声明弱定义的,不知道是我操作问题还是遗漏了官方教程的步骤,我手动添加头文件后编译通过:
在这里插入图片描述

点击“Translate”,有一个结尾没添加空行的警告:
在这里插入图片描述

定位是底层文件,无法修改,这里忽略:
在这里插入图片描述

(10)Build

然后点击“Bulid”
在这里插入图片描述

在这里插入图片描述

5、烧录

(1)LINKER选择

无错误和大警告就可以开始烧录了,由于我试用的是创新工坊的PWLINK,采用DAP的方式,所以要对烧录器进行修改,大家根据自己的烧录器进行选择:
在这里插入图片描述

另外我希望程序下载后直接运行,避免手动复位,所以进行如下设置:
在这里插入图片描述

(2)连接烧录器和开发板

接线如下:
在这里插入图片描述

6、现象

烧录成功的话就可以看到指示灯开始闪烁啦:
在这里插入图片描述

接下来大家就可以愉快的开始玩这块板子了。


http://www.ppmy.cn/news/861347.html

相关文章

一张网卡多个IP,获取首选IP的方法

目录 1.思路2. api简介2.代码 1.思路 使用Windows的API函数来获取适配器信息&#xff0c;并遍历适配器列表&#xff0c;找到非回环类型的适配器&#xff0c;并且其IP地址不为0的适配器。然后&#xff0c;它会遍历该适配器的IP地址列表&#xff0c;找到与网关地址相匹配的IP地址…

C#窗口程序添加最大最小化

要在C#开发的窗口程序中添加最大化和最小化按钮&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开窗口的设计视图&#xff0c;在窗口的标题栏上找到一个名为"ControlBox"的属性&#xff0c;将其设置为"True"。这将显示窗口的控制按钮&#xff0c;包…

全志A20 配置串口

转载&#xff1a;http://m.blog.csdn.net/blog/lushengchu2003/9368031 最近闲来无事情做&#xff0c;想到以前项目中遇到串口硬件流控制的问题&#xff0c;蓝牙串口控制返回错误&#xff0c;上层读写串口buffer溢出的问题等&#xff0c;也折腾了一阵子&#xff0c;虽然最终证…

树莓派3(全志A20)Android固件编译

编译android固件&#xff08;使用Ubuntu15.10 64位虚拟机&#xff09; 更新15.10源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 运行下面命令修改&#xff1a; sudo gedit /etc/apt/sources.list 删除里面所有的内容&#xff0c;增加下面的Ubuntu 15.10源&…

a20 和imx6q

用过a20 也用过imx6q&#xff0c;我自己感觉a20 本地化一点&#xff0c;imx6q技术支持好一点&#xff0c;a20是双核的&#xff0c;imx6q是四核的&#xff0c;a20gpu使用mile400mp&#xff0c;imx6q 用viv&#xff0c;我感觉不出来这两个gpu的差距。就支持度来说&#xff0c;a20…

A20 lvds

LVDS0: 数据线 LVDS0-VP0 LVDS0-VN0 LVDS0-VP1 LVDS0-VN1 LVDS0-VP2 LVDS0-VN2 时钟线 LVDS0-VPC LVDS0-VNC 电源线 插座的1,2,3接电源&#xff0c;最终连到 LCD-PWR 背光 另外背光单独在另一个插座上&#xff0c;LVDS0和LVDS1是一致的。 4…

Android全志A20主板刷机步骤

1&#xff0c;将SD卡插入电脑&#xff0c;打开PhoenixCard.exe软件 2&#xff0c;选择镜像文件 3&#xff0c;烧写模式选择“卡量产” &#xff0c;然后点击“烧录” 4&#xff0c;烧写结束后拔出SD卡 5&#xff0c;将SD卡插到板卡上&#xff0c;重新上电&#xff0c;上电后…

打开A20地址线

3.4.2 打开A20地址线 回到go_to_protected_mode()的110行&#xff0c;调用一个enable_a20()函数。这里又用到“PC汇编及BIOS编程”的知识了。PC及其兼容机的第21根地址线(A20)较特殊&#xff0c;这就是“Intel 80286工作模式” 提到的PC中安排的一个“门”控制该地址线是否有效…