恩智浦MKL26Z128VFT4单片机官方提供keil版SDK配置使用

MKL26Z128VFT4单片机KEIL工程创建验证

最近在用一款恩智浦core-m0核的单片机,由于供应商提供的开发sdk不适用,所以决定自己研究单片机底层创建基于MKL26Z128VFT4单片机的KEIL工程实现底层驱动的开发,在NXP官网下载SKD及keil工程配置工程中遇到的一些问题和解决方案进行记录。

 

1、SDK创建下载

(1)选择芯片适用的SDK模板,进行下载,下载地址:https://mcuxpresso.nxp.com/en/select

(2)创建好SDK后就可以进行下载,下载前进行如下图选择自己适用的配置,我选择的是keil版SDK.

(3)下载SDK及描述SDK的支持文档

下载完成就可以进行SDK的探索了。

2、SDK简介

(1)SDK内容简述

在SDK_2.4.1_MKL26Z128xxx4_doc\docs文件夹下,有SKD使用的介绍文档和API使用示例文档,可以简单了解一下,后面实际用到时再去详细看,这里注意了,SDK默认是MKL46Z的demo版,所以SDK里面也包含了MKL46Z的工程资料,在配置自己的工程时需要特别注意。

(2)keil工程位置

解压下载的SDK压缩包,在SDK解压后的路径SDK_2.4.1_MKL26Z128xxx4\boards\frdmkl46z\下,我们能找到SDK已经有的例程工程

我们可以选取最简单的demo_apps里面的hello_world例程工程进行配置,验证在自己的MKL26板子上运行编译好的程序。但是在能运行之前,这个过程还是比较辛苦的,因为有比较多的问题会出现,因为工程默认是为MKL46Z芯片制定的,所以需要将工程进行一些搬移配置,下面我们就来配置我们需要的MKL26Z芯片适用的keil工程。

3、基础工程搭建验证

(1)hello_word工程基础配置

用Keil5.21打开工程,keil工程缺乏ARM keil对于MKL26Z系列单片机的器件支持包,所以需要在keil官网去下载专门的器件支持包,下载地址:http://www.keil.com/dd2/nxp/mkl26z128xxx4/

下载安装后,再重新打开hello_world的keil工程就会有可选器件包:

打开工程后,查看工程的结构和文件,你会发现,其是MKL46Z的工程模板,所以需要对其进行重新添加配置。

配置过程如下:

步骤1:更换工程中MKL46Z文件(启动文件(startup)和驱动文件(driver)和通用文件(utilities))成MKL26Z适用的

MKL26Z芯片适用的源文件及启文件在SDK_2.4.1_MKL26Z128xxx4\devices\MKL26Z4路径下,把上述的三个文件夹内的相应文件替换掉,点击ok,再进行下一步操作。

步骤2:配置工程options target

上图中步骤3位置需改成图中样子,那个是个芯片型号宏定义,图中步骤4需要将之前我们替换文件时的文件路径重新包含一下:

这样还没完,比较重要的一步,需要照下图提示进行配置,不然程序运行系统初始化时直接进入HardFault_Handler,我遇到这个问题的时候找了一下,收到这篇博文启发,感兴趣的可以参考一下:https://blog.csdn.net/u013184273/article/details/83860802

正确配置如下:

配置正确后,配置OutPut项勾选生产HEX文件,下载到板子上,单步调试可以看到程序能正常运行到main函数里面了。

中间省略了一下比较简单的配置,像j-link调试器配置,和生产hex的配置,这里不再赘述。

 

(2)工程源码更改,实现LED灯闪烁

参照SDK_2.4.1_MKL26Z128xxx4\boards\frdmkl46z\demo_apps\led_blinky\mdk路径下的led闪烁工程的main函数,拷贝到上面配置好的工程的main函数中,如下是main.c的内容

/*
 * The Clear BSD License
 * Copyright (c) 2013 - 2015, Freescale Semiconductor, Inc.
 * Copyright 2016-2017 NXP
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted (subject to the limitations in the disclaimer below) provided
 *  that the following conditions are met:
 *
 * o Redistributions of source code must retain the above copyright notice, this list
 *   of conditions and the following disclaimer.
 *
 * o Redistributions in binary form must reproduce the above copyright notice, this
 *   list of conditions and the following disclaimer in the documentation and/or
 *   other materials provided with the distribution.
 *
 * o Neither the name of the copyright holder nor the names of its
 *   contributors may be used to endorse or promote products derived from this
 *   software without specific prior written permission.
 *
 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "fsl_uart.h"
#include "board.h"

#include "pin_mux.h"
/*******************************************************************************
 * Definitions
 ******************************************************************************/
#define BOARD_LED_GPIO BOARD_LED_RED_GPIO
#define BOARD_LED_GPIO_PIN BOARD_LED_RED_GPIO_PIN

/*******************************************************************************
 * Prototypes
 ******************************************************************************/
volatile uint32_t g_systickCounter;

/*******************************************************************************
 * Code
 ******************************************************************************/
void SysTick_Handler(void)
{
    if (g_systickCounter != 0U)
    { 
        g_systickCounter--;
    }
}

void SysTick_DelayTicks(uint32_t n)
{
    g_systickCounter = n;
    while(g_systickCounter != 0U)
    {
    }
}


/*!
 * @brief Main function
 */
int main(void)
{
    /* Define the init structure for the output LED pin*/
    gpio_pin_config_t led_config = {
        kGPIO_DigitalOutput, 0,
    };

    /* Board pin init */
    BOARD_InitPins();

    /* Init output LED GPIO. */
    GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);

    /* Set systick reload value to generate 1ms interrupt */
    if(SysTick_Config(SystemCoreClock / 1000U))
    {
        while(1)
        {
        }
    }

    while (1)
    {
        /* Delay 1000 ms */
        SysTick_DelayTicks(1000U);
        GPIO_PortToggle(BOARD_LED_GPIO, 1u << BOARD_LED_GPIO_PIN);
    }	
	
}

在如下两个宏修改自己用来控制led的GPIO

#define BOARD_LED_GPIO BOARD_LED_RED_GPIO
#define BOARD_LED_GPIO_PIN BOARD_LED_RED_GPIO_PIN

再就是在BOARD_InitPins()函数中配置控制led的GPIO时钟使能

#define PIN24_IDX    24u   /*!< Pin number for pin 24 in a port */
void BOARD_InitPins(void)
{
	
    /* Port A Clock Gate Control: Clock enabled */
    CLOCK_EnableClock(kCLOCK_PortE);
    /* PORTE24 is configured as PTE24 */	
    PORT_SetPinMux(PORTE, PIN24_IDX, kPORT_MuxAsGpio);         
}

我使用的是PTE24控制的led灯,所以如上配置使能PTE24的时钟和指定引脚复用功能。

编译通过后,下载到demo板上验证,可以看到LED正常闪烁。

 

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
以下是在Keil平台上生成NRF52832芯片模拟IIC的代码示例: 1. 首先,在Keil中创建一个新的工程,并选择NRF52832芯片作为目标设备。 2. 在工程中添加nrf_drv_twi.c和nrf_drv_twi.h两个文件,这是NRF SDK提供的IIC驱动程序。 3. 在工程中添加以下代码来初始化IIC控制器: ```c #include "nrf_drv_twi.h" #define TWI_SCL_PIN 14 #define TWI_SDA_PIN 13 #define TWI_FREQUENCY NRF_TWI_FREQ_100K const nrf_drv_twi_t m_twi = NRF_DRV_TWI_INSTANCE(0); void twi_init(void) { ret_code_t err_code; const nrf_drv_twi_config_t twi_config = { .scl = TWI_SCL_PIN, .sda = TWI_SDA_PIN, .frequency = TWI_FREQUENCY, .interrupt_priority = APP_IRQ_PRIORITY_HIGH }; err_code = nrf_drv_twi_init(&m_twi, &twi_config, NULL, NULL); APP_ERROR_CHECK(err_code); nrf_drv_twi_enable(&m_twi); } ``` 4. 接下来,可以使用以下代码来写入和读取IIC设备: ```c ret_code_t twi_write(uint8_t address, uint8_t reg, uint8_t *data, uint8_t len) { ret_code_t err_code; uint8_t tx_buff[len+1]; tx_buff[0] = reg; memcpy(&tx_buff[1], data, len); err_code = nrf_drv_twi_tx(&m_twi, address, tx_buff, len+1, false); return err_code; } ret_code_t twi_read(uint8_t address, uint8_t reg, uint8_t *data, uint8_t len) { ret_code_t err_code; err_code = nrf_drv_twi_tx(&m_twi, address, &reg, 1, true); if (err_code != NRF_SUCCESS) return err_code; err_code = nrf_drv_twi_rx(&m_twi, address, data, len); return err_code; } ``` 以上就是在Keil平台上生成NRF52832芯片模拟IIC的代码示例。需要注意的是,在使用IIC设备时,需要根据具体的设备规格书来进行读写操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzxjd1314

多谢鼓励,探索前行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值