雷竞技注册
项目

使用ARM MBed和Keil MDK v5下载您的第一个程序

2015年12月17日,通过艾略特史密斯

FRDM-K64F是一个利用MK64FN1M0VLL12单片机的开发平台。本教程包括如何使用ARM mbed在线IDE和KEIL MDK下载一个简单的眨眼示例到FRDM-K64F。包括GPIO模块配置的详细信息。

了解有关FRDM-K64F开发平台的更多信息!

FRDM-K64F.开发平台是利用MK64FN1M0VLL12.单片机。该微控制器包含一个带有浮点单元的ARM Cortex-M4核心。它的最大工作频率为120mhz, 256kb RAM, 1mb闪存和许多其他外设。它是许多可利用以太网、SD卡存储和板载模数转换器的物联网应用的理想选择。然而,在我们超越自己之前,我们需要让板子启动并使用我们使用的开发工具运行。最简单的方法是使用FRDM-K64F GPIO模块来闪烁led。这将首先涉及使用mb平台然后在keil中的寄存器级别进行更深入的分析,我们将为输入和输出配置GPIO模块。

使用mbed下载FRDM-K64F闪烁示例

当我提到使用MBED平台下载到FRDM-K6F的简单闪烁示例时,我的意思是使用MBed Online IDE来做,而不是新的MBed OS。MBed Online IDE非常适合快速原型设计,并将在此用于测试电路板上的LED的功能。使用在线IDE非常快速地制定概念证明的能力是其最具吸引力的品质之一。实际上,众所周知的项目的数量,至少欠他们在MBed平台上快速原型设计的开发的次数正在增长。

更新单板固件

在我们做任何事情之前,重要的是要将FRDM板本身上的固件更新为MBED。有关如何执行此操作的详细说明,以及最新的固件更新,可以找到固件FRDM K64页面的位置。

对于Windows系统,应执行以下操作:

  1. 断开主板与电源和计算机的连接
  2. 按住SDAUSB附近的RESET按钮,通过SDAUSB接入单板。
  3. 一个名为bootloader的驱动器应该安装
  4. 释放RESET按钮。
  5. 拖放最新的固件更新下载到驱动器上
  6. 一旦下载完成,板载的绿色状态LED应该快速闪烁
  7. 断开和重新连接usb电缆,板现在应该枚举为MBED

定位并下载Hello World示例到单板上。

坐落在FRDM-K64F信息页面mbed站点上的mbed_blinky示例如下所示:

只需单击导入程序并选择一个适当的名称将程序导入到在线IDE中。通过勾选Update旁边的复选框,可以确保程序使用了最新的库。

一旦导入,该程序将自动打开,您将看到在线IDE的视图。在左手栏中,您应该看到Project Workspace。主编辑器窗口位于它旁边。

编辑器应该显示如下所示的代码。这里,mbed库提取了大量寄存器级代码,我们可以使用DigitalOut接口或DigitalIn接口将引脚配置为输入,从而简单地将其配置为输出。

#include“mbed.h”数字输出(LED1);int main(){whis(1){myled = 1;等待(0.2);myled = 0;等待(0.2);}}

重要的是要确保选择正确的平台。选择的平台位于IDE的右上角。要更改平台,请单击当前所选的平台并通过浏览到所需的平台并单击“添加到编译器”来更改为所需的平台或添加新平台。

只需使用编译按钮下载程序。找到下载并将这个二进制文件拖放到MBED驱动器上。按下复位按钮,红色LED应该每0.2秒闪烁一次。就是这样,板子现在设置与mbed在线IDE工作,它已经闪烁了它的第一个程序!

使用KEIL MDK下载一个Blinky示例到FRDM-K64F

当然,使用在线mbed IDE提供的简单方法有其缺点。如您所料,在浏览器中运行的IDE的调试功能并不广泛。如果您打算尝试使用mbed在线IDE进行调试,那么您只能将内容打印到终端上。然而,对于更复杂的应用程序,有时需要使用具有更完整的调试资源集的工具。逐步遍历代码、添加断点和检查内存中的寄存器和变量是调试代码的一种极好的方式。ARM KEIL MDK提供了这种功能。

设置与KEIL MDK使用的FRDM-K64F

为了设置与KEIL MDK一起使用的板,我们必须首先下载与KEIL一起使用的适当驱动程序。的OpenSDA V2司机是J-Link兼容,将在此处使用。安装驱动程序的过程与安装MBed驱动程序的安装完全相同,如上所述。一旦驾驶员正确安装,电路板应该枚举为jlink。

Keil MDK的示例代码

要使用KEIL MDK创建一个闪烁的示例,我们必须看一下与GPIO模块相关的寄存器。关于这些的信息可以在K64亚族参考手册在1757页第55章

GPIO模块可以访问的寄存器如下表所示:

端口数据输出寄存器GPIOx_PDOR

一个引脚的逻辑级别可以分配给它相应的位。
端口集输出寄存器GPIOx_PSOR 通过将1写入对应位,可以将引脚的逻辑电平设置为1,无论其当前状态如何。
端口清除输出寄存器(GPIOX_PCOR)
通过将1写入相应位,可以将引脚的逻辑电平清除为0,无论其当前状态如何。
端口切换输出寄存器(GPIOx_ptor) 通过将1写入相应的位,可以切换引脚的逻辑电平。
端口数据输入寄存器GPIOx_PDIR 一种只读寄存器,用于确定引脚的状态。
端口数据方向寄存器GPIOx_PDDR 用于配置输入或输出引脚。如果将0或1赋给引脚的对应位,则分别为输入或输出。

简要介绍一些重要的按位操作

也许在配置寄存器中执行的两个最重要的运算符是按位和分配运算符和位向或分配运算符。这些可用于在寄存器内设置或清除特定位,而不改变寄存器的其余部分。

uint8_t myvar# = 00101100;myvar# | = 00000001;myvar# & = ~ 00000001;

在上面的代码中,我们用另一个值OR原始值,并将结果赋给原始值,从而得到如下等价的结果:

00101100 | 00000001 = 00101101

然后,我们将原始值与另一个倒置的值进行AND运算,并将结果赋给原始值,从而得到如下等价的结果:

00101101&11111110 = 00101100

初始化GPIO模块

GPIO模块的初始化代码如下所示。通过包含包含在KEIL库中的微控制器头文件,我们可以使用头文件中的定义来用适当的值为适当的寄存器寻址。在此代码中,使用的端口所需的时钟是启用的。端口控制寄存器用于为每个引脚分配引脚mux到“Alt 1”,即。GPIO。最后,根据函数将位设置为输入或输出。在这种情况下,RGB LED被配置为输出,开关2被配置为输入。

#include“mk64f12.h”void gpio_init(void){sim_scgc5 | = sim_scgc5_portb_mask;//使能端口B时钟门控Sim_scgc5 | = sim_scgc5_portc_mask;//使能端口C时钟门控SIM_SCGC5 | = SIM_SCGC5_PORTE_MASK;//启用端口E时钟门控/ *端口多引擎* / portb_pcr21 | = 1UL << 8;//配置为Alt 1 PortB_PCR22 | = 1UL << 8;//配置为alt 1 porte_pcr26 | = 1ul << 8;//绿色LED配置为alt 1 portc_pcr6 | = 1ul << 8;//交换机2配置为alt 1 gpiob_pddr | =(1UL << 21);//将端口B的位21设置为输出GPIOB_PDDR | =(1UL << 22);//为端口B设置为输出GPIOE_PDDR | =(1UL << 26); //Set bit 26 of port E as Output GPIOC_PDDR &=~ (1UL << 6); //Set bit 6 of port C as Input }

主要功能

main函数中的代码如下所示。一个初步的延迟用来测试GPIO模块的正确配置。该代码通过检查GPIOx_PDIR中的适当位来评估开关2是否被按下。如果是,led闪烁的顺序是红色,然后绿色,然后蓝色。如果不是,红色和蓝色led会一直亮着。在这段代码中,包含了一些使用GPIOx_PDOR、GPIOx_PSOR、gpiox_por和GPIOx_PTOR寄存器的打开和关闭输出的不同示例。

int main(void){uint32_t Delay = 0xFFFFF;//眨眼延时GPIO_init();//初始化GPIO引脚GPIOB_PDOR |= (1UL << 22);//关闭红色LED GPIOB_PDOR |= (1UL << 21);//关闭蓝色LED GPIOE_PDOR |= (1UL << 26);//关闭绿色LED while(1) {if(!(GPIOC_PDIR & (1UL<< 6))) //开关按下时闪烁led {GPIOB_PDOR |= (1UL<< 22);//关闭红色LED GPIOB_PDOR |= (1UL << 21);//关闭蓝色LED GPIOE_PDOR |= (1UL << 26);//关闭绿色LED延时= 0xFFFFF; //Reset Delay GPIOB_PDOR &=~ (1UL << 22); //Turn On Red LED while(Delay != 0) //Wait Delay Value { Delay--; } Delay = 0xFFFFF; //Reset Delay GPIOB_PDOR |= (1UL << 22) ; //Turn Off Red LED while(Delay != 0) //Wait Delay Value { Delay--; } Delay = 0xFFFFF; //Reset Delay GPIOE_PCOR |= (1UL << 26); //Turn On Green LED while(Delay != 0) //Wait Delay Value { Delay--; } Delay = 0xFFFFF; //Reset Delay GPIOE_PSOR |= (1UL << 26); //Turn Off Green LED while(Delay != 0) //Wait Delay Value { Delay--; } Delay = 0xFFFFF; //Reset Delay GPIOB_PTOR |= (1UL << 21); //Turn On Blue LED while(Delay != 0) //Wait Delay Value { Delay--; } Delay = 0xFFFFF; //Reset Delay GPIOB_PTOR |= (1UL << 21); //Turn Off Blue LED while(Delay != 0) //Wait Delay Value { Delay--; } } else { GPIOB_PDOR &=~ (1UL << 22); //Turn On Red LED GPIOB_PDOR &=~ (1UL << 21); //Turn On Blue LED } } return 0; }

GPIO_test.zip

创建一个项目在KEIL MDK和闪烁的板

要在Keil MDK V5中创建一个新项目,请转到Project >>新项目。创建新项目后,必须选择目标设备。浏览到飞思卡尔>> K60系列,选择MK64FN1M0xxx12。请注意,您可能必须从中下载并安装相应的包MDK软件包页面在Keil网站上。

接下来,必须为项目选择正确的驱动程序。在“CMSIS”下选择“CORE”,在“Device”下选择“Startup”。

完成这些步骤后,项目将成功打开。有必要用上面列出的代码保存一个新的主文件,并通过双击“Source Group 1”中的项目导航窗口将其包含在项目中。

完成后,点击工具栏中的“compile all”图标将编译项目。现在是时候把程序下载到板子上了。为此,通过单击工具栏上的小魔棒图标,打开目标窗口的选项。导航到Debug选项卡,并确保在使用设置中选择“J-LINK/ J-Trace Cortex”。

除此之外,点击“设置”按钮查看更多选项,并在调试选项卡中选择“端口”的“SW”选项。

现在该程序最终可以将下载到开发板上。按“构建”工具栏中的“加载”按钮。完成此操作后,该程序应下载到电路板,LED和开关应按预期运行!

1评论