|
使用KEIL MDK下载Blinky示例到FRDM-K64F开发板
当然,通过使用在线mbed IDE提供的简单方法也有缺点。正如您所料,在浏览器中运行的IDE的调试功能并不广泛。如果你打算尝试使用mbed在线IDE进行调试,只能打印一些内容到终端。但是,有时对于更复杂的应用,有必要使用带有一套更完整调试资源的工具。代码单步运行、添加断点以及检查内存中的寄存器和变量是调试代码的很好的方式。ARM KEIL MDK提供了这种功能。 设置FRDM-K64F用来与KEIL MDK使用 为了设置开发板用于与KEIL使用,我们必须先下载相应的驱动程序用于与KEIL使用。OpenSDA V2驱动兼容J-Link并且将在这里使用。安装驱动的过程与上述描述的安装mbed驱动是完全一样的。一旦驱动安装正确,开发板应该枚举为JLINK。
用于KEIL MDK的示例代码 为了使用KEIL MDK创建一个blinky示例,我们需要来看看与GPIO模块相关的寄存器。这些信息可以在K64子系列参考手册1757页的第55章找到。 可以在GPIO模块中访问的寄存器如下表所示:
简单介绍一些重要的位运算操作 在配置寄存器过程中最重要的两个操作符可能是按位AND赋值运算符和按位OR赋值运算符。这些可以用作设置或者清除寄存器内的特定位而不改变寄存器的其余部分。 - uint8_t myVar =00101100;
- myVar |= 00000001;
- myVar &=~ 00000001;
复制代码在上面的代码中,我们将原始值与其他值进行相或,并且将结果赋值给原始值,与下面所示的结果等效: 00101100 | 00000001 = 00101101 然后我们将原始值与另一个取反的值进行相与,并且将该结果赋值给原始值,与下面所示的结果等效。 00101101 & 11111110 = 00101100
初始化GPIO模块 GPIO模块的初始化的代码如下所示。通过包含微控制器的头文件,该文件包含在KEIL的库中,我们可以使用头文件中的定义来使用适当值值寻址相应的寄存器。在这段代码中,端口需要的时钟被启用。端口控制寄存器用来将每个引脚的复用分配到“ALT 1”,即GPIO。最后,这些位根据功能设置为输入或者输出。该示例中,RGB LED配置成输出,开关2配置为输入。 - #include "MK64F12.H"
- void GPIO_init(void){
-
- SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; //Enable Port B Clock Gate Control
- SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; //Enable Port C Clock Gate Control
- SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK; //Enable Port E Clock Gate Control
- /*Port Multipexing*/
- PORTB_PCR21 |= 1UL<<8; //Blue Led configured as Alt 1
- PORTB_PCR22 |= 1UL<<8; //Red Led configured as Alt 1
- PORTE_PCR26 |= 1UL<<8; //Green Led configured as Alt 1
- PORTC_PCR6 |= 1UL<<8; //Switch 2 configured as Alt 1
-
- GPIOB_PDDR |= (1UL << 21); //Set bit 21 of port B as Output
- GPIOB_PDDR |= (1UL << 22); //Set bit 22 of port B as Output
- 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函数 main函数的代码如下所示。残留延时用来测试GPIO模块的正确配置。该代码通过检查GPIOx_PDIR中的相应位来判断开关2是否按下。如果按下,LED灯按照红绿蓝的顺序闪烁。如果没有按下,红色和蓝色的LED一直常亮。在该代码中,包含一些使用GPIOx_PDOR、GPIOx_PSOR、GPIOx_PCOR和GPIOx_PTOR寄存器打开和关断输出的不同的示例。 - int main(void){
- uint32_t Delay = 0xFFFFF; //Delay for blink delay
- GPIO_init(); //Intialise the pins for GPIO
-
- GPIOB_PDOR |= (1UL << 22); //Turn Off Red LED
- GPIOB_PDOR |= (1UL << 21); //Turn Off Blue LED
- GPIOE_PDOR |= (1UL << 26); //Turn Off Green LED
- while(1)
- {
- if(!(GPIOC_PDIR & (1UL<< 6))) //Blink LEDs when switch is pressed
- {
- GPIOB_PDOR |= (1UL << 22); //Turn Off Red LED
- GPIOB_PDOR |= (1UL << 21); //Turn Off Blue LED
- GPIOE_PDOR |= (1UL << 26); //Turn Off Green LED
-
- Delay = 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;
- }
复制代码
在KEIL MDK创建项目并下载到开发板 要在KEIL MDK V5中创建一个新的项目,转到project >> new project。在创建新项目时,必须选择目标器件。浏览到Freescale >> K60 series并且选择MK64FN1M0xxx12。请注意,你可能需要从Keil网站的MDK软件包页面下载并安装相应的包。
下一步,必须选择项目的正确的驱动程序。在“CMSIS下”选择“CORE”,以及在“Device”下选择“Startup”。
完成这些步骤后,工程成功打开。需要使用上述的代码保存一个新的main文件,并且通过双击项目导航窗口的“Source Group 1”将该文件包含到工程中。 一旦完成后,点击工具栏的“compile all”图标编译该项目。现在是时候将程序下载到开发板中了。要做到这一点,通过单击工具栏上的小魔棒图标打卡options for target窗口。转到“Debug”选项卡,确保在使用设置中选择“J-LINK/ J-Trace Cortex”。
除此之外,单击“Setting”按钮来查看更多选项。然后在调试选项卡的“Port”选择“SW”选项。
现在该程序终于可以下载到开发板了。按下调试工具栏的load按钮。一旦你按下该按钮,该程序会下载到开发板,并且LED和开关的功能和预想的一样。 |