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