资讯分类
全部资讯
最新活动
商城公告
行业信息
新品推荐
元器件知识
资讯标签
艾迈斯欧司朗(92) 英伟达NVIDIA(70) 艾为awinic(45) 飞腾派V3(37) 萤火工场(30) 罗彻斯特电子(28) Jetson Orin Nano SUPER 开发套件(21) 资料下载专区(18) 进迭时空(15) 兆易创新(14) 赛昉科技(StarFive)(12) 艾为 awinic(12) 灵动微电子(11) 日清纺微电子(9) 小华半导体(9) 上海雷卯Leiditech(8) 微源半导体 LPSemi(8) 赛昉科技(8) NVIDIA(8) Seeed矽递科技(8) 龙芯中科(7) GD32VW553-IOT(7) 物奇WuQi(7) 日清纺微电子Nisshinbo(5) 庆科(5) 开源口碑分享(5) Geehy极海半导体(4) 航顺芯片(4) CEM5826-M11(4) 飞腾派(4) 创捷电子(4) TROQ创捷电子(4) 一件包邮专区(3) FTHR-G0001(3) 罗彻斯特(3) 飞腾派eMMC(3) iCEasy商城(3) MM32SPIN060G(3) EVB-L0130(2) 教育优惠申请链接(2) 启明云端(2) 飞腾官网飞腾派(2) 弈安云(2) 飞腾派下载专区(2) 村田(2) 英伟达初创加速计划(2) 极海(2) 中国星坤(2) 极海半导体(2) 小华EVB-HC32F4A0开发板(2) 国产开源硬件(2) 野火(2) 杭晶(HCI)(2) Mini-SPIN0230(2) NVIDIA品牌专区(2) 华润微电子(2) 口碑评测(2) Arduino UNO Rev 4 Minima开发板(1) 下载专区(1) B站风扇视频(1) Jetson AGX Xavier(32GB)(1) BeagleBoard.org®(1) 社区评奖活动(1) Arduino品牌专区(1) 国产自主可控(1) 英伟达 NVIDIA(1) CEM5861G-M11(1) 赛昉科技9折活动券(1) NVIDIA Jetson Orin Nano 开发套件(1) Jetson AGX Orin 64GB开发套件(1) 24GHz毫米波雷达模块(1) NVIDIA DGX™ Spark:桌面级AI超级计算机(1) 品牌清仓(1) QCS8550 SOM EVB(1) 天微电子商家页(1) 国产毫米波雷达模块(1) 技术问答专区(1) 英特尔(1) NVIDIA Jetson Nano 模组(1) QCS6490 SOM EVB(1) EV Board (MM32L0136C7P)(1) 迈巨微电子品牌专区(1) 飞腾派专链(1) 瑞隆源产品(1) 龙芯教育派(1) CEK8902-S905D3(1) 飞腾派试用申请链接(1) BeagleBone Black快速入门指南(1) 样片申请(1) NVIDIA NIM(1) 世野(Khadas)(1) 618大促(1) 竞买活动(1) 雷卯(1) Arduino品牌页(1) 飞腾派调研问卷链接(1) 微雪电子(1) 一件免邮专区(1) SFH 7018B(1) 极海半导体(Geehy)(1) 英伟达 NVIDIA品牌专区(1) 小脚丫(1) 618大促专区(1) 艾为(AWINIC)(1) 飞腾派V3版本上新(1) 飞虹半导体(1) MUSE Paper(1) 8月7日竞拍竞买(1) 萤火工场GD32VW553-IOT(1) 野火RK3566开发板(1) 乐动机器人(1) 海凌科电子(Hi-Link)(1) VF202040-A0(1) 教育优惠(1) COMBO模组 EMC3020-PZI5(1) 松科智能(1) 润石(1) 格力新元(1) CEM5825F(1) 庆科信息(MXCHIP)品牌专区(1) 附件(1) Jetson AGX Thor 开发套件/模组(1) Mini-F5333(1) 微源半导体(1) 周年抽奖活动(1) QCS6490 SOM EVB开发板(1) 附件下载地址(1) 迈巨微(1) 华大北斗(1) GD32无线生态专区(1) JETSON_AGX_ORIN_64GB_DEVELOPER_KIT(1) QCS8550 SOM EVB开发板(1) 申请样片:高光效红光OSCONIQ® P 3030, GR QSSPA1.23(1) 台容积电(1) 雷克沙(1) GD32VW553-IOT V2版本(1) 萤火工场品牌专区(1) 商城下载专区(1) GD32VW553-IOT V2(1) CEM5881-M11(1) NVIDIA Jetson Orin Nano 开发套件(1) 荣湃半导体(2Pai Semi)品牌专区(1) 进迭时空品牌页(1) 飞腾人才赋能(1) Jetson AGX Orin 64GB开发套件(1)

灵动微FTHR-G0001开箱+Keil5环境搭建+点灯测试

发布时间:2024-07-26

玩家有话说:本次评测产品为灵动微电子FTHR-G0001单片机开发板,一块从iCEasy商城申请的样品开发板,主控MM32G0001,板载CMSIS-DAP下载器,可以直接连接Type-C线下载和调试。详细介绍:上海灵动微电子股份有限公司 (mindmotion.com.cn)

环境搭建

前期准备

安装Keil5 MDK

(这个不用特地教了吧~)

安装MM32G0001的Pack

下载地址:上海灵动微电子股份有限公司 (mindmotion.com.cn)

解压后找到MM32G0001的Pack,双击即可安装

下载官方提供的范例包

下载地址:上海灵动微电子股份有限公司 (mindmotion.com.cn)

我们主要需要其中的库函数

环境正式搭建

整个步骤大致可分为:

  • 新建工程
  • 复制库函数及启动文件
  • 添加源码文件到工程、添加头文件到Path、设置宏定义
  • 选择并设置CMSIS-DAP下载器

新建工程前新建一个文件夹,我选择叫_Template_Project的文件夹,这样该工程可以作为模板,以后直接复用

打开Keil5,新建一个Project,位置就是刚才新建的文件夹内,名称随便叫,我选择就叫Project(项目路径及文件尽量不要用中文)

新建完毕后会让你选择芯片的开发包,先前已经安装过,这里选择我们需要的MM32G0001系列的即可

接下来的软件组件界面,这里可以勾选CMSIS的CORE也可以不勾选,因为官方提供的范例包中也提供了CMSIS文件,如果在这里不勾选的话,后面需要手动添加。

打开之前下载的范例包,将里面的Device文件夹复制到项目根目录下

再在项目目录下新建一个User文件夹,这里将来存放我们的程序代码(main.c等)

回到Keil5。为方便管理代码,我选择新建三个组:

  • User:存放程序代码
  • HAL:存放HAL库的代码
  • Startup:存放MM32G0001启动文件等

然后将Device文件夹下的文件依次加入到对应的组中:

  • 将_Template_Project\Device\MM32G0001\HAL_Lib内的所有文件加入到HAL组中
  • 将_Template_Project\Device\MM32G0001\Source\KEIL_StartAsm下的startup_mm32g0001_keil.s加入到Startup组
  • 将_Template_Project\Device\MM32G0001\Source下的system_mm32g0001.c加入到Startup组

接下来就是编写main函数了,我为了方便直接复制了范例包中GPIO/GPIO_LED_Toggle下的所有程序文件,你也可以自行编写。主要是范例程序已经提供好了mm32g0001_it和platform文件,即中断函数定义和一些开发板初始化函数(例如延迟函数等),省去了我们自己编写的时间。

将GPIO/GPIO_LED_Toggle根目录下的所有.c和.h文件复制到User目录下,然后回到Keil5,将这些文件加入到User组中。

整个项目的目录最后大致的结构是这样的

添加所有头文件及宏定义,如下图所示:

我们需要加入USE_STDPERIPH_DRIVER宏定义(步骤②),并将Device目录下及User目录下的所有包含.h文件的目录均加入Path中(步骤��)

切换到Debug选项卡,将下载器选为CMSIS-DAP,进入Setting界面,进入Flash Download选项卡,勾选Reset and Run(这样下载完程序后可以自动复位,运行程序)

点灯测试

如果前面的环境搭建没有问题的话,此处点击编译按钮即可正常编译。

但是如果直接下载程序会发现开发板没有任何反应,因为板载LED对应的GPIO是PA11,官方提供的GPIO_LED_Toggle源码并没有初始化该GPIO,所以修改一下代码gpio_led_toggle.c即可。

编译并下载即可看到板载LED开始闪烁

以下是修改后并精简的代码:

#define _GPIO_LED_TOGGLE_C_

#include <stdio.h>
#include "platform.h"
#include "gpio_led_toggle.h"

void GPIO_Condiv(void){
GPIO_InitTypeDef GPIO_InitStruct;

RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_WriteBit(GPIOA, GPIO_Pin_11, Bit_SET);
}

void GPIO_IO_Toggle(GPIO_TypeDef *GPIOn, uint16_t PINn){
if (Bit_RESET == GPIO_ReadOutputDataBit(GPIOn, PINn))
{
GPIO_SetBits(GPIOn, PINn);
}
else
{
GPIO_ResetBits(GPIOn, PINn);
}
}

void GPIO_LED_Toggle_Sample(void){
GPIO_Condiv();

while (1)
{
GPIO_IO_Toggle(GPIOA, GPIO_Pin_11);

PLATFORM_DelayMS(1000);
}
}