| 
在线时间143 小时
UID2039986
注册时间2013-9-8
NXP金币31 
 TA的每日心情|  | 开心 2019-6-24 18:51
 | 
|---|
 签到天数: 6 天 连续签到: 1 天 [LV.2]偶尔看看I 版主   
 
	积分2015 
最后登录2021-3-10 | 
 
| 拿到FRDM-KL02Z开发板有段时间了. 不管各种studio ide ,心中永远觉得适合快速上手的就是ARM自家的通用ARM开发板环境,MDK for ARM, 各种版本,自寻咨询百度盘,qq群,微云等,终于一款适合您.
 资料也无需东奔西走, 本论坛,就有完美的开发支持包下载:
 如下:
 https://www.nxpic.org.cn/document/detail/index/id-12822
 
 
 
 于是上手就变得很简单,因为大家对mdk应该是0难度的,
 解压缩,得到如下的几个文件夹:
 
 1: schmatic, 放置的是开发板的原理图;
 2: samplecode: 内置了10个例程,
 3:refference: 参考手册, 内置了at24c02,等所用到的一些板载ic的数据手册 ;
 4: tools:    这个比较重要,涉及到我们如何下载调试,因为出厂预置的调试器版本,仅仅虚拟了一个u盘,用于程序下载,  如果要实现在线调试
 需要,tool内的jlink驱动安装,并且讲相应的固件,更新到板载的调试工具中去,详细方法见readme.txt
 
 1.未插板前,先安装JLINK驱动Setup_JLink_V500e.zip
 2.把FRDM-KL02板子的调试接口固件换为JLINK固件,步骤如下:
 1)板子断电,按住reset按键的同时,连接板子和电脑,这时候电脑中会出现一个名为"BOOTLOADER"的磁盘,松开reset按键
 2)解压JLink_OpenSDA.rar,把里面的JLink_OpenSDA.sda文件发送到“BOOTLOADER‘磁盘,并等待发送完成
 3)FRDM-KL02板子断电,再重新上电,这时候板子的调试器变为JLINK,可以在我的电脑->设备管理器中查看到JLINK及其虚拟串口
 安装好后,可以通过JLINK下载例程代码到FRDM-KL02板子
 
 
 
 如此之后,就可以调试体验程序了. 我在用MDK 5.18版本打开本例程时, 先是 先是
 正在加载packs... 然后就闪屏 退出了, 原因不明, 于是更换MKD4.74版本,可以正常打开.
 于是基于此版本进行在线调试,例程的调试工具默认是选择的JLINK
 
 
 
 
 总体的调试感受和流畅度非常不错,可以在线查看各个内部资源.美中不足的是,因为硬件的断点有限, 依赖于软件技术可以实现多个甚至是无限多个断点,业内已经有厂家这个功能, 厂家附送的廉价调试工具里就可以具备该功能,;经过测试, nxp的本开发板板载的调试器没有实现这个功能,做了测试,打了10多个断点,跳出以下提示:
 
 
 
 
 
 
 
 显然, 强大的jlink是有这个能力,但是因为授权给本开发板调试器的license权限所致,无法实现多个断点.
 不过常见的查看内部变量,周期性刷新变量,查看内部资源寄存器这样的主流功能都是具备的.
 附录是: 按键的程序,程序功能有详细说明: 实现功能,写的是最ABC的按键扫描和执行, 输入与输出的.
 实际用到项目, 按键扫描必定要做必要的修改, 至少有个定时器或者时间标记吧.各种状态机,按键的各种输入类型,长按,短按等,希望以后实际项目能够把KL02这种性价比极高的entry level的 低功耗系列芯片充分利用起来.
 
 
 
 复制代码/************************************************************************
*例程功能:
*   实现扩展板上按键控制LD的功能。
* K4控制LD4,K3控制LD3,K2控制LD2,按键按下,相应小灯点亮,松开按键,相应小灯熄灭。K1与reset引脚相连,未做控制。
* 串口以9600波特率打印:2-KEY demo!
*注意K3和FRDM板上MMA8451Q INT2共用,若用扩展板K3按键,需要去掉FRDM板上R26电阻
*************************************************************************/
#include <stdio.h>
#include <string.h>
#include "gpio.h"
#include "common.h"
#include "uart.h"
/* LED pin */
#define LED0_PORT   HW_GPIOB
#define LED0_PIN    11
#define LED1_PORT   HW_GPIOB
#define LED1_PIN    10
#define LED2_PORT   HW_GPIOB
#define LED2_PIN    7
#define LED3_PORT   HW_GPIOB
#define LED3_PIN    6
/* KEY pin */
#define KEY3_PORT   HW_GPIOA
#define KEY3_PIN    12
#define KEY2_PORT   HW_GPIOA // 注意此脚和FRDM板上MMA8451Q INT2共用,若用扩展板按键,需要去掉FRDM板上R26电阻
#define KEY2_PIN    10
#define KEY1_PORT   HW_GPIOB  //NMI
#define KEY1_PIN    5
#define KEY0_PORT   HW_GPIOA//RESET
#define KEY0_PIN    11
int main(void)
{
    /* 开机延时 */
    DelayInit();
    /* LED */
    GPIO_QuickInit(LED0_PORT, LED0_PIN, kGPIO_Mode_OPP);
    GPIO_QuickInit(LED1_PORT, LED1_PIN, kGPIO_Mode_OPP);
    GPIO_QuickInit(LED2_PORT, LED2_PIN, kGPIO_Mode_OPP);
    GPIO_QuickInit(LED3_PORT, LED3_PIN, kGPIO_Mode_OPP);
    /* KEY */
  // GPIO_QuickInit(KEY0_PORT, KEY0_PIN, kGPIO_Mode_IPU);// reset
    GPIO_QuickInit(KEY1_PORT, KEY1_PIN, kGPIO_Mode_IPU);  //NMI
    GPIO_QuickInit(KEY2_PORT, KEY2_PIN, kGPIO_Mode_IPU); //kGPIO_Mode_IFT
    GPIO_QuickInit(KEY3_PORT, KEY3_PIN, kGPIO_Mode_IPU);
    /* UART 初始化 */
    UART_QuickInit(UART0_RX_B2_TX_B1, 9600); 
    printf("2-KEY demo!\r\n");
  
    while(1)
    {
        if(GPIO_ReadBit(HW_GPIOA, 12)==0)
              GPIO_WriteBit(LED0_PORT, LED0_PIN, 0);
        else
              GPIO_WriteBit(LED0_PORT, LED0_PIN, 1);
        
        if(GPIO_ReadBit(HW_GPIOA, 10)==0)  // 注意此脚和FRDM板上MMA8451Q INT2共用,若用扩展板按键,需要去掉FRDM板上R26电阻
              GPIO_WriteBit(LED1_PORT, LED1_PIN, 0);
        else
              GPIO_WriteBit(LED1_PORT, LED1_PIN, 1);
        
        if(GPIO_ReadBit(HW_GPIOB, 5)==0)
              GPIO_WriteBit(LED2_PORT, LED2_PIN, 0);
        else
              GPIO_WriteBit(LED2_PORT, LED2_PIN, 1);
        
    }
}
 
 
 
 | 
 |