单片机开发入门---从零开始玩转FRDM-KL25Z

2023-05-16

 一、背景介绍

 

        最近需要开发一个程序,使用飞思卡尔的开发板FRDM-KL25Z,来设计一款《西蒙游戏》的改进版,下面我们先来了解一下西蒙游戏。

        《西蒙游戏》是一款益智休闲类小游戏,它的游戏规则是,让玩家记住不同颜色的灯的亮灯顺序后,依次点击灯,如果次序与AI给予的次序相同,则游戏继续并增加难度,否则游戏结束,重置游戏。

        改版后的《新版西蒙》游戏规则是,机器可以通过RGB灯随机显示红、绿、蓝三种不同颜色的序列,机器首先会显示全部的灯序列,然后第二次显示的时候,会用白色灯来表示当前为隐藏的灯,玩家需要输入隐藏的LED灯序列,即可通过当前关卡,每一轮灯的序列都会变长,隐藏的序列也会变长。下面模拟演示一遍游戏运行过程,我们用Simon来表示机器,Player来表示玩家。

关卡SimonPlayer结果
第一关

完全显示:红、绿、绿、蓝、红;

隐藏显示:红、白、绿、蓝、红;

绿游戏通过
第二关

完全显示:红、绿、绿、蓝、红、蓝;

隐藏显示:红、绿、白、白、红、蓝;

绿、蓝游戏通过
第三关

完全显示:红、绿、绿、蓝、红、蓝、绿;

隐藏显示:白、白、白、蓝、红、蓝、绿;

红、绿、蓝游戏结束

        第三关Player未能正确输入隐藏序列:红、绿、绿,游戏结束Game Over @ _ @

二、软件概要设计

        我们将通过功能需求分解和功能点实现来介绍整个项目软件的设计思想。

 (1)功能需求分解

        我们使用FRDM-KL25Z开发板,来实现《新版西蒙》游戏,从功能模块上划分我们需要实现一下几个部分的功能。  

(2) 游戏状态机实现

        为了便于程序处理,我将游戏划分为以下7种状态,在不同状态下可以执行不同的动作函数(逻辑功能),下面我将用流程图来表示各种状态之间的迁移图。

/*
 * @brief game state enumeration
 */
typedef enum {
	GAME_IDLE = 0,        // 空闲状态
	GAME_INITIAL,         // 初始状态
	GAME_SHOW_LED,        // 显示完整LED序列
	GAME_HIDE_LED,        // 显示隐藏LED序列
	GAME_WAIT_INPUT,      // 等待玩家输入状态
	GAME_PASS,            // 游戏通过状态
	GAME_OVER             // 游戏结束状态
}GAME_STATE_E;

         游戏运行流程图如下:

三、芯片资源介绍 

        通过芯片的datasheet可以查看KL25系列的芯片资源介绍。通过datasheet可以看出芯片的主频是48MHZ,128KB的flash,16KB的SRAM。还有支持的外设资源:TSI、GPIO、USB、SPI、UART、I2C、ADC、DAC、Timer等。

四、开发资料下载

        当拿到一块新的开发板,我们首先要做的就是先去官网下载相关的开发资料,其中包括SDK、数据手册、开发板原理图、用户开发指南,然后安装开发板相关的驱动,搭建开发环境。下面就给出了驱动和开发资料下载的地址。

PED驱动下载地址:www.pemicro.com/opensda

开发资料下载地址:NXP官方资料下载地址

(1) 驱动安装

        PED驱动是开发板自带的OpenSDA调试器所需的驱动,用于开发的调试、下载等工作,还可以通过USB虚拟出一个串口用于打印日志信息。

        运行驱动程序,我们安装默认路径Install即可。

        安装完成后,可通过设备管理器查看驱动安装的情况,这里我们需要先把开发板通过USB线连接到电脑上。 这里一定要接开发板USB OpenSDA接口,驱动安装成功后,可以看到下图所示的设备信息。

(2) 下载SDK开发资料

        进入上面提供的下载链接后,可在网页最下面看到DataSheet和Reference Manual手册,这些都是我们需要下载的,在Embedded Software下面可以下载到SDK包,里面包含了用到的库函数以及一些官方提供的外设demo程序,是我们进行开发中必不可少的软件包。

        下载好的SDK解压后,可在以下路径查看到驱动的demo程序,一般开发一个项目时,只需要参考以下demo程序就能完成开发工作,我们可以选择项目中需要用到的驱动程序,比如我们这里主要用到TSI、UART、PWM驱动,那我们可以copy一份demo中的代码进行相应的开发工作。并参考demo中的驱动程序,来编译我们的工程代码。

(3) 搭建开发环境

        这里IDE有很多可以选择,比如IAR、MDK、Kinetis Design Studio、MCUXpresso等。这里我们选择Kinetis Design Studio作为我们开发的IDE工具。

Kinetis Design Studio下载地址:KDS_IDE下载地址

        IDE安装包下载完以后,我们安装默认配置进行安装即可。

 (4) 导入工程代码

        打开Kinetis Design Studio软件,选择File->Switch Workspace->Other,选择一个路径保存工作空间。

         该路径可自行选择,我这里选择simon_game目录下的workspace目录保存。

        打开Kinetis Design Studio软件,选择File->Import->General->Existing Projects into Workspace。 

        选择代码存放的路径,选择完以后点击Finish即可,完成代码工程的导入。 

        代码导入后,即可在导航栏查看代码。

 (5) 编译下载代码

        先编译代码,点击小锤子按键,编译通过后可在Console窗口查看编译结果。

        编译完成后,点击甲壳虫按键,进入Debug模式,该过程中会将程序烧录到开发板中。 

        退出Debug模式,先点击左边的红色按键,退出调试模式,然后选择右边的Debug右击Close退出,完成代码下载。

这里我们对设计的Simon游戏进行程序说明:

这里使用红、绿、蓝三种颜色作为游戏指示灯。

  1. 开发板初次上电后,会有一个绿色呼吸灯,此时未进入游戏,长按触摸按键后进入游戏模式;
  2. 亮一次青色表示开始显示完整的LED灯序列,(红、绿、绿、蓝、红);
  3. 闪烁2次青色表示开始显示隐藏的LED灯序列,(红、绿、白、蓝、红);
  4. 亮黄灯表示等待玩家输入隐藏的LED灯序列;
  5. 此时需要触摸滑块的左、中、右来表示输入的隐藏LED序列;
  6. 输入正确的隐藏序列游戏通过,会闪烁2次紫色的LED灯;
  7. 输入错误的隐藏序列游戏结束,会闪烁2次白色的LED灯,等待5s或触摸任意按键会重新开始游戏。

五、代码预览

 以上程序设计完成后的部分代码预览。

代码模块划分为led、touch、game三大部分,其中game部分运用状态机设计思想来实现游戏的主体逻辑,touch部分用来实现触摸检测,led部分用来实现PWM调光RGB显示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机开发入门---从零开始玩转FRDM-KL25Z 的相关文章

  • STM32驱动MAX6675读取K型热电偶温度

    MAX6675 进行热电偶冷端补偿和数字化 K 型热电偶信号 输出 12 位分辨率 SPI 兼容 只读的数据 转换器的精度为 0 25 xff0c 最高可读 43 1024 xff0c 如果使用数据的 8LSB 则温度范围为 0 到 43
  • WS2812灯珠(二)-- STM32 SPI+DMA方式驱动

    通过硬件SPI的可以很巧妙的模拟出WS2812的通信时序 xff0c 用spi的8位数据模拟ws281x的一位数据 要将系统时钟设置为56M xff0c SPI分频数设置为8 xff0c 则SPI的通信频率为7M xff0c 1s 7M 1
  • ESP8266(一)---引脚定义&接线说明

    一 引脚定义 xff1a FunctionDescriptionURXDUART RXD xff0c 接收UTXDUART TXD xff0c 发送RST外部Reset信号 xff0c 低电平复位 xff0c 高电平工作 xff08 默认高
  • STM32编码器模式详解(一)---理论

    一 编码器接口模式 选择编码器接口模式的方法是 xff1a 如果计数器只在TI2的边沿计数 xff0c 则置TIMx SMCR寄存器中的SMS 61 001 xff1b 如果只在TI1边沿计数 xff0c 则置SMS 61 010 xff1
  • STM32使用虚拟示波器

    STM32使用虚拟示波器 在调试过程中 xff0c 经常会有需要看到数据实时变化的情况 xff0c 这时候便需要用到虚拟示波器 如 xff1a 制作平衡车时 xff0c 需要了解拟合角度跟随加速度计和陀螺仪的动态变化情况 xff1b 做电机
  • STM32驱动多个超声波模块(只用一个定时器)

    用STM32单片机成功驱动一个超声波模块后 xff0c 接下来便有了疑问如何用stm32单片机驱动多个超声波模块呢 xff1f xff08 驱动一个超声波模块可以参考 xff1a stm32驱动超声波模块测距 xff09 超声波模块型号为H
  • 《SPARK官方教程系列》(标贝科技)

    1 概述 Apache Spark是一个用于大规模数据处理的统一分析引擎 xff0c 它在Java Scala Python和R中的提供了高级api xff0c 以及一个支持通用执行图 general execution graphs 的优
  • linux 在Terminal中打开桌面中的文件夹 nautilus命令; mac 在Terminal中打开桌面中的文件夹 open命令

    图形用户界面 xff08 Graphical User Interface xff0c 简称GUI xff0c 又称图形用户接口 xff09 是指采用图形方式显示的计算机操作用户界面 一 xff0e 在Linux系统中 nautilus 打
  • C/C++文件的编译过程

    在Windows下使用VS VC等编译器 xff0c xff08 其实VS只是编码器 xff0c 在幕后是CL编译器在帮助其编译 xff09 编译C C 43 43 文件我们并不能直观的看到详细过程 xff0c 编译器直接自动编译 其实在L
  • 如何使用带有用户名密码认证的HTTP(S)代理?保姆级教程来了!

    当我们在日常应用HTTP代理的时候 xff0c 终端IP不固定的情况下 xff0c 或者需要多机器同时使用HTTP代理时 xff0c 就会遇到一个问题 xff1a 如何使用带有用户名密码认证的HTTP S 代理 xff1f 按照下列步骤 x
  • PotPlayer的官网

    访问 PotPlayer 的官网 xff0c 需要先能访问到外面的网络 http potplayer tv http potplayer daum net 如果无法访问外面的网络 xff0c 可以使用下面的阿里云盘链接 阿里云盘分享
  • 为什么C++支持重载而C语言不支持重载

    一个函数在C 43 43 中能够被重载 xff0c 但是在C语言确不能被重载的 xff0c 是由于函数名在内存中存储方式不同所导致的 C语言 例如在C语言中 xff0c 有以下三个函数 xff0c 只给声明不给定义 xff01 span c
  • 2020-08-07

    上拉电阻 画红框标记的就是上拉电阻 概念 xff1a 上拉电阻的概念就是一端连接电源正极 xff0c 一端连接到输出口 xff0c 如果没有这个电阻 xff0c 那么电源和输出口就没有直接连接关系 它的作用如上图 xff0c 它可以避免I
  • extern "C" 含义

    extern 34 C 34 含义 extern 34 C 34 被 extern 限定的函数或变量是 extern 类型的 被 extern 34 C 34 修饰的变量和函数是按照 C 语言方式编译和链接的 extern 34 C 34
  • 77. Combinations

    Given two integers n and k return all possible combinations of k numbers out of 1 n For example If n 61 4 and k 61 2 a s
  • 基于STM32的串口通讯

    基于STM32的串口通讯 设备之间通信的方式 串行通信一般是以帧格式传输数据 xff0c 即一帧一帧的传输 xff0c 每一帧都含有起始信号 xff0c 数据信息以及停止信息等 并行通信 数据各个位同时传输 xff0c 速度快 xff0c
  • C语言的艺术之——头文件

    好记性不如烂笔头o o 系列的文章 xff1a C语言的艺术之 头文件 C语言的艺术之 函数 C语言的艺术之 标识符命令与定义 C语言的艺术之 变量 C语言的艺术之 注释 C语言的艺术之 排版与格式 C语言的艺术之 安全性 编码原则 xff
  • 图像高斯分布生成

    给定一些标记点的坐标 xff0c 希望生成其在图像中的高斯分布图 首先 xff0c 上公式 xff1a 不造怎么上公式 嗯稍后学习学习再补充 span class hljs keyword import span numpy span cl
  • 编译原理----词法分析设计

    程序设计实验1 词法分析 一 实验目的 xff1a 通过设计编制调试一个具体的词法分析程序 xff0c 加深对词法分析原理的理解 并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法 二 实验内容 编制一个单词获取程序
  • wwwwwwwwwwwwwwwwwww

    wwwwwwwwwwwwwwwwwwwww

随机推荐

  • C++成员变量的初始化

    类对象的构造顺序是这样的 xff1a 1 分配内存 xff0c 调用构造函数时 xff0c 隐式 xff0f 显示的初始化各数据成员 2 进入构造函数后在构造函数中执行一般计算 1 类里面的任何成员变量在定义时是不能初始化的 2 一般的数据
  • 【BUG解决】使用body-parser失效的实例解决

    前言 最近在使用express框架写Node代码 xff0c 遇到一个问题使用body parser模块失效 整整困在这里一天时间 xff01 xff01 xff01 res send req body 返回结果一直为空 但是代码的书写又看
  • BOCHS问题总结篇

    在官网上下载的bochs 2 4 5 win32版 bochs启动时会读bochsrc bxrc里的配置 xff0c 而bochsrc sample txt则是个sample xff0c 可以在这个sample里阅读相关参数的设置 1 RO
  • 关于Access的左连接

    这篇随笔没有什么深奥的技术要讨论 xff0c 只是自己一个知识上的盲点 xff1a 不知道在Access中如何进行左连接的操作 通过在网上搜索 xff0c 最后在CSDN上找到了自己要的答案 xff0c 因此觉得有必要记录下来 xff1a
  • ubuntu下安装Calibre

    Calibre是电子书管理软件 xff0c 支持Amazon Apple Bookeen Ectaco Endless Ideas Google HTC Hanlin Song设备及格式 xff0c 功能十分强大 ubuntu 有很多包都可
  • 编译Linux内核数

    本文是参考了网上多篇帖子而写的算不上什么原创 唯一值得欣慰的只不过在本机上实现罢了 因为毕竟失败了几次 也因为本人是初学驱动编程 很多简单的问题在我来说是相当的困难的 望有识之士不要笑话 最后 xff0c 希望本文能给刚学驱动而还没开头的人
  • 构造内核源码树

    编写驱动程序时 xff0c 需要内核源码树的支持 内核源码树时从内核源代码编译得到的 下面开始构造内核源代码的步骤 以Ubuntu为例子 1 下载内源代码 xff0c 位置www kernel org 注意 xff1a 源码树内核的版本要和
  • 裁剪图像中感兴趣区域python

    题外话 xff1a 比较全面的缩略图及相应源码 http matplotlib org gallery html http www cnblogs com wei li archive 2012 05 23 2506940 html 题外外
  • Linux设备驱动程序(LDD)中snull的编译问题

    对LDD中snull程序 xff0c 编译的时候会有许多问题 xff0c 鉴于网上还没有合适的解决办法 xff0c 做此总结 xff0c 整理知识 本文在debian6 0上运行通过 xff0c 内核版本为2 6 32 学习LDD中网络驱动
  • 认识(大端--小端)端模式

    span style color 000000 端模式 xff08 Endian xff09 的这个词出自Jonathan Swift书写的 格列佛游记 这本书根据将鸡蛋敲开的方法不同将所有的人分为两类 xff0c 从圆头开始将鸡蛋敲开的人
  • HOW TO install nam for ns2 on debian

    Debian is convinent to install software packages for the tool aptl Like many other packages we can use apt get install n
  • c++ #pragma once和 #ifndef 优缺点对比分析

    pragma once ifndef方式为了避免同一个头文件被包含 xff08 include xff09 多次 pragma once 声明 定义语句 ifndef SOMEFILE H define SOMEFILE H 声明 定义语句
  • roslaunch找不到packge

    roslaunch找不到packge 尝试下面几种做法 1 source bashrc 2 source catkin ws devel setup bash 3 rospack profile 为确保ROS能找到新包 xff0c 常常在发
  • DSP:TMS320C6657 之 UART波特率问题

    6657 设置串口波特率 以614400为例 xff08 1 xff09 根据公式计算分频系数 xff08 2 xff09 1GHz 主频下 UART 输入频率 166666666Hz xff08 1 6 xff09 xff08 3 xff
  • 手写httpServer Demo案例

    相信每一个java程序猿在学习javaWeb的时候 xff0c 或多或少接触了Servlet 或者说通过Servlet来完成页面发送的请求 今天 xff0c 模仿Servlet接受和处理请求实现一个简单的httpServer 该Server
  • ubuntu18.04 查看在用串口

    1 终端输入cutecom 打开串口助手 xff0c 可能没有下载 xff0c 可根据提示下载安装 sudo cutecom 2 点击device旁边的下拉按钮即可查询当前在用的串口
  • Linux解决未定义的引用过程记录

    Linux解决未定义的引用过程记录 在摸索vscode使用的过程中 xff0c 编写的代码出现了为定义的引用错误 csdn上搜索了很多 xff0c 代码小白看完觉得写的非常的简略 xff0c 完全无从下手 xff08 应该是我太菜了 xff
  • 十一种室内定位传感器方案汇总介绍与对比(机器人、物联网领域)

    室内定位传感器方案汇总 目录 室内定位传感器方案汇总 1 定位方案概述 1 1 内定位系统有最基本的5种算法 xff1a 1 2 常用的室内定位技术主要包括以下几种 xff1a 1 3 定位理论 1 4 不同的定位方案对比 2 各种定位方案
  • C++中的unique函数

    STL中的unique函数的头文件 xff1a span class hljs preprocessor include lt iostream gt span unique 的作用是 去掉 容器中相邻元素的重复元素 xff0c 这里所说的
  • 单片机开发入门---从零开始玩转FRDM-KL25Z

    一 背景介绍 最近需要开发一个程序 xff0c 使用飞思卡尔的开发板FRDM KL25Z xff0c 来设计一款 西蒙游戏 的改进版 xff0c 下面我们先来了解一下西蒙游戏 西蒙游戏 是一款益智休闲类小游戏 xff0c 它的游戏规则是 x