i.MX RT1061 使用MCUXpresso SDK生成示例工程

1. 什么是SDK

SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。

2. MCUXpresso SDK 生成SDK文件

MCUXpresso SDK是NXP官方推出的开发工具,里面有开源驱动程序、中间件和参考示例应用程序,可定制和下载特定于开发者的处理器或评估板选择的SDK。

1) 进入NXP官方SDK生成器,注册并登录后进入选择开发板界面。
在这里插入图片描述

2) 选择相应的MCU型号,构建SDK在这里插入图片描述

3) 根据自身需要,勾选配置。此处勾选了FreeRTOS、lwIP等配置。
在这里插入图片描述

4) 构建完成并选择好开发环境后,下载SDK
在这里插入图片描述
到这里就完成了SDK文件的生成。

3. MCUXpresso Config Tools 生成MDK工程

MCUXpresso Config Tools是一套集成的配置工具,用户在使用基于Arm® Cortex®-M内核的恩智浦微控制器(包括通用、跨界和Bluetooth™ MCU)进行设计时,此套工具有助于指导用户进行第一次评估直到开发生产软件。这些配置工具允许开发人员快速构建定制SDK,利用引脚、时钟和外设工具生成支持定制板的初始化C代码。与ST公司推出的STM32CubeMX软件功能类似。

在NXP官网下载MCUXpresso Config Tools并安装。

1) 打开后创建新配置和工程
在这里插入图片描述

2) 解压章节2下载的SDK文件,浏览路径并选择SDK文件
在这里插入图片描述

3) 选择SDK示例工程。以下说明以freertos_pluart示例工程为例。
在这里插入图片描述

4) 由于硬件使用串口4,示例代码使用串口1,需要对串口4引脚M5和L5进行初始化。
在这里插入图片描述

5) 配置时可看代码预览,查看后更新源代码
在这里插入图片描述

注意:上图左下角 路由详情 里的引脚配置需要一个个点才能生成下列代码(下图配置没选择时字体是斜体,重新选择后字体变正)。

在这里插入图片描述

到这里就完成了MDK示例工程的创建。

4. MDK工程 更改代码并编译下载

1) 打开MDK工程文件并选择目标工程,该示例工程有6个目标工程,此处选择 flexspi_nor_debug 工程进行修改编译。
在这里插入图片描述

2) 因为用的串口4,需要修改示例代码
在这里插入图片描述

3) 编译下载工程,此处使用JLink下载。
在这里插入图片描述

4) 断电重启设备,打开串口工具查看实验现象,数据回传成功。
在这里插入图片描述
注意:10秒后会自动关闭数据回传功能。

到这里就完成了整个示例工程的实验。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MCUXpresso IDE RT1064 SDK中,SPI主机代码匹配从机数据的方法可以分为两种:中断方式和DMA方式。 中断方式:主机通过SPI发送数据到从机,从机将接收到的数据存储到接收缓冲区中,然后触发SPI中断,主机通过中断服务程序获取接收数据。 DMA方式:主机通过SPI发送数据到从机,从机将接收到的数据存储到接收缓冲区中,然后触发DMA传输完成中断,主机通过DMA传输完成中断服务程序获取接收数据。 无论是中断方式还是DMA方式,主机都需要在发送数据前将接收缓冲区清零,然后等待从机回复数据后再进行数据匹配。在匹配数据时,主机需要比较发送的数据和接收到的数据是否一致,如果一致,则说明数据传输成功,否则需要重新发送数据。 以下是一个使用中断方式匹配从机数据的示例代码: ```c #define SPI_MASTER SPI1 #define SPI_MASTER_CLKSRC kCLOCK_BusClk #define SPI_MASTER_CLK_FREQ CLOCK_GetFreq(kCLOCK_BusClk) #define SPI_MASTER_IRQ SPI1_IRQn #define SPI_MASTER_IRQHandler SPI1_IRQHandler #define EXAMPLE_SPI_MASTER_SSEL 0 #define BUFFER_SIZE (64) uint8_t masterRxData[BUFFER_SIZE] = {0}; uint8_t masterTxData[BUFFER_SIZE] = {0}; volatile bool isTransferCompleted = false; void SPI_MASTER_IRQHandler(void) { /* Clear interrupt flag.*/ SPI_MasterTransferAbort(SPI_MASTER); SPI_MasterTransferGetCount(SPI_MASTER, &bytesTransferred); isTransferCompleted = true; } void spi_master_init(void) { spi_master_config_t masterConfig; uint32_t srcClock_Hz; SPI_MasterGetDefaultConfig(&masterConfig); masterConfig.baudRate_Bps = 500000; masterConfig.sselNum = EXAMPLE_SPI_MASTER_SSEL; masterConfig.sselPol = kSPI_SpolActiveAllLow; SPI_MasterInit(SPI_MASTER, &masterConfig, SPI_MASTER_CLK_FREQ); srcClock_Hz = SPI_MASTER_CLK_FREQ; SPI_MasterTransferCreateHandle(SPI_MASTER, &g_m_spiHandle, masterCallback, NULL); NVIC_SetPriority(SPI_MASTER_IRQ, 5); EnableIRQ(SPI_MASTER_IRQ); } void spi_master_transfer(void) { spi_transfer_t xfer = {0}; status_t status; /* Prepare transfer structure. */ xfer.txData = masterTxData; xfer.rxData = masterRxData; xfer.dataSize = BUFFER_SIZE; xfer.configFlags = kSPI_FrameAssert; isTransferCompleted = false; status = SPI_MasterTransferNonBlocking(SPI_MASTER, &g_m_spiHandle, &xfer); /* Wait transfer complete. */ while (!isTransferCompleted) { } /* Check if the received data matches the transmitted data. */ if (memcmp(masterTxData, masterRxData, BUFFER_SIZE) == 0) { PRINTF("SPI master to slave data transfer succeed!\r\n"); } else { PRINTF("Error: SPI master to slave data transfer failed!\r\n"); } } int main(void) { BOARD_InitPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); spi_master_init(); /* Fill masterTxData array. */ for (int i = 0; i < BUFFER_SIZE; i++) { masterTxData[i] = i % 256; } /* Start SPI transfer. */ spi_master_transfer(); while(1) { } } ``` 在上述示例代码中,主机通过SPI向从机发送数据,并在中断服务程序中匹配接收到的数据。在数据匹配成功后,程序会输出提示信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值