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

news2024/11/24 2:08: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 __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

在这里插入图片描述

(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.coloradmin.cn/o/749572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升技术

空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号与注记 2.4 研究区…

ndk编译jni错误LOCAL_MAKEFILE is not defined,分析解决

概述 我们用ndk编译jni的时候&#xff0c;通常会写一个Android.mk脚本文件。但是有些情况&#xff0c;我们脚本文件名字不叫Android.mk&#xff0c;比如我的分别改成AndroidSo.mk&#xff0c;AndroidA.mk 这时候就会报错&#xff1a;LOCAL_MAKEFILE is not defined 软件环境 …

单片机数码管

LED数码管&#xff08;LED Segment Displays&#xff09;是由8个发光二极管构成&#xff0c;并按照一定的图形及排列封转在一起的显示器件。其中7个LED构成7笔字形&#xff0c;1个LED构成小数点&#xff08;固有时成为八段数码管&#xff09;。 LED数码管有两大类&#xff0c…

从新手到高阶,企业培训直播玩法全攻略

首先&#xff0c;把握培训直播的整体规划。 管理端&#xff1a;直播内容管理纳入企业内部学习资源的建设&#xff0c;让企业内部的知识积累、沉淀形成体系。学员端&#xff1a;方便学员精准、快速定位到课程资源&#xff0c;方便快捷检索内容&#xff0c;学习体验简单易用。 其…

CP AUTOSAR中的EThTrcv

环境 EthTrcv驱动实际上是要实现EthIf指出的接口,包括如下API函数,描述在一个结构体里面 /** \brief type used in EthIf_EthTrcvDrvApi */ typedef struct sEthIf_EthTrcvDrvApiType { EthIf_EthTrcvCheckWakeupFctPtrType CheckWakeupOfEthTrcvDrvApi; /**< Et…

2023 JAVA 面试太难, 吃透这份 JAVA 架构面试笔记后, 成功涨到 30K

前阵子跟一位高级架构师的前辈聊天时&#xff0c;聊到今年的面试。有两个感受&#xff0c;一个是今年面邀的次数比往年要低不少&#xff0c;再一个就是很多面试者准备明显不足。不少候选人能力其实不差&#xff0c;进入团队干活后达到期望不难&#xff0c;但由于没准备或不会表…

Python从入门到精通:一步步掌握Python编程

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言Python入门条件和循…

使用Django数据库模型中的ForeignKey()形成数据表记录的父子层次结构

可以把ForeignKey()的第1个参数设置为值 “self” 实际形成数据表记录的父子层次结构。 下面是一个简单的实例&#xff1a; 在文件 E:\Python_project\P_001\myshop-test\myshop\app1\models.py 中写入下面的代码&#xff1a; from django.db import models# Create your mod…

如何保证消息的可靠性+延迟队列(TTL+死信队列+延迟队列)

目录 1.如何保证消息的可靠性 1.1.消息的可靠投递 confirm机制 return机制 1.2.如何保证消息在队列中不丢失 1.3.确保消息能可靠的被消费掉 2.延迟队列 2.1.TTL 2.2.死信队列 2.3.延迟队列 3.如何防止消费者重复消费消息 1.如何保证消息的可靠性 1.1.消息的可靠投递…

element-ui 使用 el-descriptions

<el-descriptions :column"2" border size"mini" style"margin-top: 10px;" :labelStyle"{width: 123px}" :contentStyle"{width:42%}"><el-descriptions-item label"选择项目"><el-select size&…

花了整整一周,用新工具制作的进销存管理系统,比买来的好用

进销存简单点说就是进货、库存、出货的管理&#xff01;复杂一点还会牵扯日常交易。一般情况下&#xff0c;中小型企业或者涉及仓库的商贸、电商、制造、批发、零售等相关行业都会用到。 看似很简单&#xff0c;但涉及的领域却很广泛。 那么如何有效的管理企业的进销存数据&am…

UWB定位算法对比:TDOA算法和TWR算法对比,两种算法优缺点分析

UWB定位是基于时间飞行的算法&#xff08;飞行时间&#xff0c;TOF&#xff09;。测量一个UWB定位标签和多个UWB定位基站之间的光传播时间。至少需要三个定位基站才能使用三边法精确定位标签的位置。UWB定位基站和定位标签之间也必须保持直线和可视无遮挡。在UWB定位中&#xf…

Python源码剖析:深度探索Cpython对象-达观数据

CPython 是 Python 社区的标准&#xff0c;其他版本的 Python&#xff0c;比如 pypy&#xff0c;都会遵行 CPython 的标准 API 实现。想要更深入的认识 Python&#xff0c;就需要了解 CPython 的源码实现。本文将从 CPython 的对象构造器开始入手&#xff0c;带大家揭开 CPytho…

工作有感:莫名的IT培训班生涯

欢迎关注博主 六月暴雪飞梨花 或加入【六月暴雪飞梨花】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术…

什么是『知识管理系统』?为什么企业需要搭建知识管理系统?

你的企业或团队在知识迁移的过程中有遇到过以下问题吗&#xff1f; 1、花费过长时间的员工培训&#xff1a;当新员工入职时&#xff0c;传统的培训方法可能需要大量时间和资源。而且&#xff0c;由于知识可能分散在各种文档、手册和资源中&#xff0c;培训过程变得更加复杂。这…

Go Frame 2.3驱动全栈前后端分离管理系统的创新突破

基于新的Go Frame 2.3框架开发的全栈前后端分离的管理系统——GFast-V3&#xff0c;正以其创新性和突破性的特点引起了广泛关注。该系统通过将前端与后端解耦&#xff0c;实现了更高效、可扩展的开发模式&#xff0c;为企业和开发者带来了新的开发体验。 GFast-V3系统介绍 gfa…

重磅预告!Apache DolphinScheduler 3.2.0 新功能“剧透”

近期&#xff0c;Apache DolphinScheduler 将迎来 3.2.0 版本的到来。本次发版为大版本发布&#xff0c;将会带来众多大家期待已久的新功能和新改进。为了让用户提前感知到新版本的变化&#xff0c;社区特意提前“剧透”新版本的重要 feature&#xff0c;并制作了视频进行介绍。…

unity的CommandBuffer介绍

大家好&#xff0c;我是阿赵。   之前介绍过使用PostProcessing来做屏幕后处理效果。我们不一定要用PostProcessing来做后处理效果。   PostProcessing功能强大&#xff0c;比如不同的layer控制不同的屏幕效果&#xff0c;比如可以使用PostProcessVolume的非全局效果达到某…

【三维重建】【深度学习】NeuS总览

【三维重建】【深度学习】NeuS总览 论文提出了一种新颖的神经表面重建方法&#xff0c;称为NeuS&#xff0c;用于从2D图像输入以高保真度重建对象和场景。在NeuS中建议将曲面表示为有符号距离函数(SDF)的零级集&#xff0c;并开发一种新的体绘制方法来训练神经SDF表示&#xff…

【Distributed】分布式ELK日志文件分析系统(一)

文章目录 一、ELK 概述1. 为什么要使用 ELK2. 完整日志系统基本特征3. ELK 简介3.1 ElasticSearch&#xff08;ES&#xff09;3.2 Kiabana3.3 Logstash3.4 其它组件Filebeat缓存/消息队列Fluentd 4. ELK 的工作原理5. Linux 系统内核日志消息的优先级别 二、 部署 ELK 集群服务…