三、LED闪烁

news2024/11/17 22:20:53

        通过LED的闪烁实验,详解Keil MDK中创建mm32单片机的工程的步骤。

1、开发环境

(1)Keil MDK: V5.38.0.0

(2)MCU: mm320163D7P。

2、Keil工程的创建

(1)打开Keil MDK。

(2)点击“Project”→“New μVision Project...”。

(3)选择工程保存地址及工程文件名,然后点击确定。

(4)选择相应的单片机型号,然后点击“OK”即可。

(5)弹出“管理运行时环境”对话框,保持默认,点击OK即可。

3、移植库文件

3.1、下载库函数和例程。

(1)进入官网:上海灵动微电子股份有限公司

(2)点击“产品”,先择对应的单片机型号。

(3)点击“工具和软件”,下载库函数和例程。

3.2、移植库文件到对应文件夹

(1)解压下载的库函数和例程。

(2)复制Device文件。

(3)粘贴到LED闪烁工程对应的文件夹。

3.3、文件添加到Keil工程中的准备工作

(1)打开Keil。

(2)点击“Manage Project Items”,进行如下配置。

(3)与MDK-ARM同级目录下新建APP文件夹,存放自己创建的源代码。在这里先创建main.c和main.h文件夹。

  • 可以创建多个文件夹,进行代码的分层,如应用层、驱动层。
  • APP文件夹下可以创建src文件和inc文件,分别存放源文件和头文件。
  • 要明确知道自己创建的存放头文件的路径,在Keil中要包含这些路径。

(4)移植的Device文件中,有些是与开发环境有关的文件,我们使用的是Keil MDK,其他多余的可删除。

  • 删除 Device\MM32F0160\Source\IAR_StartAsm 文件。
  • 删除 Device\CMSIS\IAR_CORE 文件。

3.4、文件添加到Keil中

参照官网例程添加:

(1)STARTUP中添加文件及路径如下。

  • system_mm32f0160.c;LedBlink_Code\Device\MM32F0160\Source\...
  • startup_mm32f0160_keil.s;LedBlink_Code\Device\MM32F0160\Source\KEIL_StartAsm\...

(2)HAL_LIB中添加文件及路径如下。

  • hal_xx.c;LedBlink_Code\Device\MM32F0160\HAL_lib\src\所有文件

(3)APP目录下添加main.c文件,doc目录下可存放readme文件。

(4)Keil中添加对应的头文件路径。

  • LedBlink_Code\Device\MM32F0160\HAL_lib\inc
  • LedBlink_Code\Device\CMSIS\KEIL_CORE
  • LedBlink_Code\Device\MM32F0160\Include
  • LedBlink_Code\APP\inc

3.5、编译检查

(1)检查添加的文件类型是否错误。(在当前环境下就会出现这个问题)

(2)如下页面配置检查

  • 宏定义 USE_STDPERIPH_DRIVER(暂时非必须,,没有也不报错)
  • 勾选C99 Mode,不勾选GNU extensions

(3)main.c中包含 "hal_conf.h" 头文件。

4、代码编写

(1)drv_systick.c文件。

#include "drv_systick.h"

// SysTick延时相关变量
volatile uint32_t SysTickDelayTick;



/*
**功能:为延时功能初始化SysTick定时器
**参数:无
**返回值:无
 */
void SysTick_InitDelay(void)
{
	RCC_ClocksTypeDef RCC_Clocks;       // 定义RCC时钟结构体变量
	RCC_GetClocksFreq(&RCC_Clocks);     // 引用调用获取各时钟频率
	
	// System Tick配置为xx
	if (SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000))
    {
		// 进入这则说明配置失败
        while (1)
        {
        }
    }
	// 设置SysTick中断号和中断优先级
	NVIC_SetPriority(SysTick_IRQn, 0x0);
}

/*
**功能:毫秒延时
**参数:	Millisecond:延时多少个毫秒
**返回值:无
 */
void SysTick_DelayMS(uint32_t Millisecond)
{
    SysTickDelayTick = Millisecond;

    while (0 != SysTickDelayTick)
    {
		
    }
}


/****************************************************************************************
  * @brief  This function handles SysTick Handler
  * @note   none
  * @param  none
  * @retval none
  ****************************************************************************************/
void SysTick_Handler(void)
{
    if (0 != SysTickDelayTick)
    {
        SysTickDelayTick--;
    }
}

(2)drv_systick.h文件。

#ifndef __DRV_SYSTICK_H__
#define __DRV_SYSTICK_H__

#include "hal_conf.h"

void SysTick_InitDelay(void);
void SysTick_DelayMS(uint32_t Millisecond);

#endif

(3)drv_led.c文件

#include "hal_conf.h"
#include "drv_led.h"

/*
**功能:LED引脚初始化
**参数:无
**返回值:无
**注:
**	LED1 红灯 PC9
**	LED2 绿灯 PC8
**	LED3 蓝灯 PC7
**	LED4 黄灯 PC6
 */
void LedPin_Init(void)
{
	// GPIO初始化结构体定义
	GPIO_InitTypeDef GPIO_InitStruct;
	// 使能GPIOC端口时钟
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOC, ENABLE);
	// 重置GPIO_InitStruct结构体参数值
    GPIO_StructInit(&GPIO_InitStruct);
	
    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_SET); // LED1点熄灭
	GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET); // LED2点熄灭
	GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_SET); // LED3点熄灭
	GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET); // LED4点熄灭
}



(4)drv_led.h文件

#ifndef __DRV_LED_H__
#define __DRV_LED_H__

/*函数声明*/
void LedPin_Init(void);     //LED引脚初始化



#endif

(5)main.c文件

#include "hal_conf.h"

#include "main.h"
#include "drv_led.h"
#include "drv_systick.h"


int main(void)
{
	SysTick_InitDelay();
	LedPin_Init();

    while (1)
    {
		GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_SET); // LED1熄灭
		GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET); // LED2熄灭
		GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_SET); // LED3熄灭
		GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET); // LED4熄灭
		SysTick_DelayMS(500);
		
		GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_RESET); // LED1点亮
		GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_RESET); // LED2点亮
		GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_RESET); // LED3点亮
		GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_RESET); // LED4点亮
		SysTick_DelayMS(500);
			
    }
	//return 0;
}

5、烧录验证

6、完整工程下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1226591.html

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

相关文章

基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍: 采用…

数据挖掘复盘——apriori

read_csv函数返回的数据类型是Dataframe类型 对于Dataframe类型使用条件表达式 dfdf.loc[df.loc[:,0]2]df: 这是一个DataFrame对象的变量名,表示一个二维的表格型数据结构,类似于电子表格或SQL表。 df.loc[:, 0]: 这是使用DataFrame的.loc属性来进行…

devops底层是怎么实现的

DevOps的3大核心基础架构 简而言之,实现DevOps工具链,基本需要3个核心基础架构: SCM配置管理系统 Automation自动化系统 Cloud云(或者说可伸缩的、自服务的、虚拟化系统) SCM配置管理系统 SCM中所放置的内容又可以再…

系列十、你说你做过JVM调优和参数配置,请问如何盘点JVM系统的默认值?

一、JVM的参数类型 1.1、标配参数 java -versionjava -help 1.2、XX参数 1.2.1、Boolean类型 公式:-XX:或者- 某个属性值 表示开启、-表示关闭 # 是否打印GC收集细节 -XX:PrintGCDetails -XX:-PrintGCDetails# 是否使用串行垃圾收集器 -XX:UseSerialGC -XX:-UseS…

矩阵的QR分解

矩阵的QR分解 GramSchmidt 设存在 B { x 1 , x 2 , … , x n } \mathcal{B}\left\{\mathbf{x}_{1},\mathbf{x}_{2},\ldots,\mathbf{x}_{n}\right\} B{x1​,x2​,…,xn​}在施密特正交化过程中 q 1 x 1 ∣ ∣ x 1 ∣ ∣ q_1\frac{x_1}{||x_1||} q1​∣∣x1​∣∣x1​​ q k …

网页视频下载工具 iTubeGo mac中文版软件特色

iTubeGo YouTube Downloader mac是一款功能强大的YouTube视频下载工具。 iTubeGo YouTube Downloader mac软件特色 多种格式支持:iTubeGo YouTube Downloader可以将YouTube视频下载为多种常见的视频和音频格式,包括MP4、MP3、AVI、FLV、MOV、WMV等&…

JavaspringbootMYSQL基于移动端的团购网站26449-计算机毕业设计项目选题推荐(附源码)

目 录 摘要 1 绪论 1.1 选题背景 1.2选题目的及意义 1.3springboot框架介绍 2 基于移动端的团购网站系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章…

数学建模值TOPSIS法及代码

TOPSIS法 TOPSIS法简称为优劣距离解法,是一种常见法综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各个评价方案之间的差距。 模型介绍 上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多,太多的…

Actor对象的引用 怎么设置他的材质?或设置是否启用重力?

这个蓝图我是想当重叠触发,将另一个Target Actor(一个球体)设置他的z增加50,但是为什么在触发的时候会抽搐?而且我想要设置他的材质等等这些属性都不行

C# 电脑程序控制电路开关

最近在做系统的监控,想到能不能做一个酷点的功能,当收到异常消息时桌面上的红色小灯(或报警灯)会亮起来。于是在淘宝上找了一下,有这种小设备,插入USB设备,通过串口控制这个设备的继电器来实现&…

基于适应度相关算法优化概率神经网络PNN的分类预测 - 附代码

基于适应度相关算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于适应度相关算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于适应度相关优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针…

算法设计与分析复习--求解最大子段和问题(分支法、动态规划)

文章目录 问题描述分治法动态规划法 问题描述 最大子段和问题; 洛谷P1115.最大子段和 分治法 利用归并排序的方法,但是由于是算最大子段和所以,并不能将它变成有序的,左边和右边的最大子段和通过调用函数,而中间的要…

apply和call在Javascript中的使用与区别

apply和call在js中的使用与区别: 字符串格式化: ${占位符} name小帅 console.log(我是${name}) //我是小帅apply: 语法:function.apply(thisArg, [argsArray])thisArg:可选参数,指定函数执行时的上下文&#xff08…

3.5-构建自己的Docker镜像

首先介绍两个命令: 1.docker container commit,可以简写为:docker commit。这个命令是把一个修改后的container重新变成一个image。 2.docker image build,可以简写为:docker build 首先,演示一下docker c…

mysql优化之explain 以及 索引优化

Mysql安装文档参考:https://blog.csdn.net/yougoule/article/details/56680952 Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设…

MattML

方法 作者未提供代码

让你彻底学会HBase

让你彻底学会HBase Apache HBase(Hadoop DataBase)是一个开源的、高可靠性、高性能、面向列(这里指列族,非列式存储)、可伸缩、实时读写的分布式数据库。利用 Hadoop HDFS 作为其文件存储系统,利用 ZooKee…

图片降噪软件 Topaz DeNoise AI mac中文版功能

Topaz DeNoise AI for Mac是一款专业的Mac图片降噪软件。如果你有噪点的相片,可以通过AI智能的方式来处理掉噪点,让照片的噪点降到最 低。有了Topaz DeNoise AI mac版处理图片更方便,更简单。 Topaz DeNoise AI mac软件功能 无任何预约即可在…

如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中

文章目录 第一步:准备 CentOS 服务器第二步:安装 Node.js 和 Docsify第三步:初始化 Docsify 项目第四步:本地预览 Docsify 项目第五步:配置 Nginx 服务器第六步:重启 Nginx 服务器拓展:使用 HTT…

维修一款20年前的电容测试表VC6013

一、大概情况 在咸鱼市场淘了一台VC6013电感测试表,本来想捡漏的,结果发现是一个大坑,不但被人维修过,还发现被拆了一些ic,网络上也找不到合适的图纸,只找到一份比较接近的图纸,但是比较下来还是…