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


  近日合宙出品了一款:

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】

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

解压下载的文件,然后进入PACK文件夹:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第2张图片

2、安装PACK

双击打开.pack文件安装:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第3张图片

点击NEXT完成安装
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第4张图片

3、新建Keil工程

打开Keil,点击“Project”–“New μVison Project”
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第5张图片

然后在选择合适的位置和名称后点击确定:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第6张图片

在弹出的窗口中选择Air001芯片,然后点击“OK”:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第7张图片

在弹出的窗口中勾选“CMSIS”中的“CORE”和“Device”的“Stratup”,然后点击“OK”:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第8张图片

4、配置Keil工程

(1)拷贝HAL库

将SDK文件夹中的Libraries目录下的AIR001xx_HAL_Driver文件夹复制在工程目录下:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第9张图片

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

(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”

完成添加:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第11张图片

(3)新建main.c

首先创建一个main.c文件
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第12张图片

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

文件内容先空着。

(4)新建air001xx_hal_conf.h

创建一个“air001xx_hal_conf.h”文件来配置HAL库:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第14张图片

补充代码为:

#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

上述内容也是源于官方教程中的代码内容:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第15张图片

补充完如下图,标红的语句是由于头文件还未添加相关文件路径,后续添加:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第16张图片

(5)新建air001xx_it.h

新建air001xx_it.h头文件用于实现中断函数,和上面一样,新建文件“air001xx_it.h”:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第17张图片

代码内容:

#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

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

(6)新建air001xx_it.c

同样的操作,新建“air001xx_it.c”文件:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第19张图片

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

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

(7)添加头文件路径

接下来开始补充路径,首先点击“Options for Target”,也就是“魔棒”
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第21张图片

然后选择“C/C++”–“Includes Paths”右边的扩展按钮:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第22张图片

添加下述路径,最后点击“OK”:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第23张图片

(8)添加宏定义

添加宏定义“AIR001_DEV”,然后点击“OK”
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第24张图片

补充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 [需要注册\登录]:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第25张图片

我这里编译时报了一个小问题:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第26张图片

该函数是在“air001xx_hal.h”中声明弱定义的,不知道是我操作问题还是遗漏了官方教程的步骤,我手动添加头文件后编译通过:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第27张图片

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

定位是底层文件,无法修改,这里忽略:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第28张图片

(10)Build

然后点击“Bulid”
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第29张图片

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

5、烧录

(1)LINKER选择

无错误和大警告就可以开始烧录了,由于我试用的是创新工坊的PWLINK,采用DAP的方式,所以要对烧录器进行修改,大家根据自己的烧录器进行选择:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第31张图片

另外我希望程序下载后直接运行,避免手动复位,所以进行如下设置:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第32张图片

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

接线如下:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第33张图片

6、现象

烧录成功的话就可以看到指示灯开始闪烁啦:
合宙Air001开发板系列教程—01环境搭建与点灯(基于Keil-MDK的开发)_第34张图片

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

你可能感兴趣的:(单片机,Cortex®-M0+)