问题标签 [nxp-microcontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Kinetis KEA:产生定时器中断的 LED 切换频率
我正在使用 NXP 的 Kinetis KEA64 微控制器。
时钟的实际频率为 20MHz,每 2.5ms 产生一次定时器中断。我有一个中断处理程序,可以在生成此定时器中断时切换 LED。LED 在此定时器中断上切换,但我不确切知道 LED 的频率。我的 LED 是否以 5kHz 切换?这是对的吗?
这是我的中断处理程序
arm - 为什么 ARM Cortex M3 MCU 中的 RAM 有不同的内存部分?
我正在使用 NXP LPC 1837,它是基于 Cortex M3 的架构,并且蜜蜂使用其 136k 的 ram,它分为如下部分内存概述
我不知道为什么内存有不同的部分,每个部分的用途是什么?
c - 引导加载程序应用程序中的向量表重定位
我为 NXP Kinetis 微控制器编写了一个引导加载程序应用程序。以下是我做同样的事情: 1. 在 CFlash 地址 0x0000 到 0x8000 中创建引导加载程序应用程序 2. 从地址 0x8000 到 0x1FFFF 创建我的主应用程序代码
这段代码工作正常。现在我的疑问是,我在引导加载程序和主应用程序代码中都放置了 ISR,并且没有使用任何 ISR 向量重定位。是否有必要在主应用程序中重新定位向量表?
PS:我可能不会因为两个应用程序中的 ISR 相同而面临这个问题。
c - 如何让 USB 主机 CDC(冲浪棒)连接在 Cortex M4 上工作
我正在做一个项目,通过 USB 将 Hauwai E3531i-2 Surf Stick 连接到 frdmk64F 板(NXP 的 Cortex M4 开发板),但在使用 CDC 主机堆栈时遇到了困难。我的目标是通过 USB 端口像终端工具一样发送 AT 命令。出于测试目的,并且因为在示例中,所有数据都流式传输到我计算机上的终端(Putty/Terra Term/HTerm)。我也从哪里发送数据。
我正在使用 Kinetis Design Studio(KDS) 3.2 和 Kinetis Software Develpment Kid (KSDK)2.2 并运行 USB-Host BM 示例 CDC 和 MSD,并为我的目的对其进行了修改。我重写了枚举过程,因此我可以自动区分不同的类并相应地执行 Init 和 Task。
使用此 Stick 必须首先将他连接为大容量存储,因为默认情况下它枚举为包含 Windows 驱动程序的 MSD。所以我将它作为 MSD 设备连接并发送“ModeSwitch”命令。Linux 用户将熟悉此过程。然后,Stick 会自行断开连接,并将被枚举为供应商特定设备(类:0xFF)。不幸的是,它不是 CDC 设备。好久不见,就像在 Linux 中一样,我现在可以通过终端(例如 MiniCom)发送 AT 命令。现在我的代码加载了它运行的 CDC-Component,就像从这一点开始的 CDC-Host 示例一样。我收到一些错误:
中断管道建立失败
线路状态为“ok”,但所有值均为零。
代码 10 的数据传输错误
从此时起,该示例本身并没有做任何可见的事情。经过一番尝试,我达到了可以运行的程度。它非常不稳定,但我想我找到了一些东西。问题似乎来自 Buffer 结构
和相应的变量
在本例中,它们用于存储来自 USB 管道和调试终端的数据。如您所见,它们是一种列表,包含缓冲区中的数据、缓冲区中的字节数和指向下一个列表元素的指针。
但是在某些时候下一个元素和当前元素是 NULL 并且从这一点开始我不能再收到任何消息。缓冲区的重置会有所帮助,但这会导致其他错误。这是我运行的代码。
它基本上来自示例中的 host_cdc.c 文件。我在第 22 行到第 39 行之间添加了一些 if 条件和重置部分,并在休息之前。这会导致缓冲区在收到特定数量的 NULL 后重新初始化。据我了解文本 g_EmptySendQueue 包含我通过 USB 从 Stick 获得的数据,但我基本上不知道它是如何进入这个缓冲区的。
这样我就可以运行代码,直到出现断言错误:
我认为这来自一些在重新初始化时触发的中断,或者因为一些标志没有被重置并且代码认为它仍然必须发送数据。
但是我在 usb_host_cdc.c 中的 USB_HostCdcDataRecv 中出现故障
在 USB_HostMallocTransfer 函数中,似乎缺少传输标头。这个错误确实经常出现,但是当我“静音”它时,它运行得很好。这些消息的数量与计数器 NoReceivCounter 和 host_cdc.h 中的 Makro 成正比
我对USB不是很熟悉,接触Controllers才半年。所以任何信息都可以提供帮助。
现在我想知道为什么我必须重置缓冲区以及如何在不导致错误的情况下进行重置。
数据究竟是如何收到的?它是如何进入缓冲区的?我在代码中找不到任何相关内容。
我有一种感觉,让它运行起来并不难,感觉可能只是某些设置错误,现在我尝试治愈症状,但疾病应该是显而易见的。
这是我的第一篇文章,所以如果我错过了一些重要的信息,我很乐意提供给他们。
干杯
巴斯蒂安
c - 在另一个软件中调用函数
µC 中有两个软件,固件和应用程序。从应用程序我想调用在固件中编译的Calculate_Crc。当我直接执行调用时,执行没有成功,代码跳转到其他位置。在那个函数中,我有全局数据和一个子函数。
调用此函数的最安全方式是什么?
我正在使用 Diab 编译器和 C 语言。
microcontroller - SPI 和 QPI(嵌入式)有什么区别?
在我的项目中,我使用的是Winbond W25Q64 64-MB 串行闪存,当我阅读此串行闪存的数据表时,有两种类型:
SPI(W25Q64 闪存 ID:- 0xEF4017)和 QPI(W25Q64FV 闪存 ID:- 0xEF6017)。
我非常了解SPI,但我第一次听说QPI。所以我有一些问题-
1.SPI和QPI有什么区别?
2.我可以使用QPI通信类型的Flash(使用SPI)吗?
3.QPI的主要特点是什么,什么是QPI(通信协议或其他)?
c - 刷新数据缓存(dcbf 汇编指令)
语境:
我目前想刷新我的 L1 数据缓存(目标:NXP P2020 Qoriq e500)。
我在使用“dcbf”指令时遇到问题:
问题:
我的问题是我不知道该指令提供什么参数才能到达 DATA 缓存并刷新行?
我尝试使用“刚刚创建”的变量:
我认为 dcbf 指令将通过 &i 参数到达数据缓存,但是当我通过探针进一步查看内存时,我发现缓存未刷新且未失效。
c - 如何在 GNU LD 中实现自定义输出部分?
我试图弄清楚如何在我的应用程序的 LD 文件中定义自定义输出部分。到目前为止,这就是我想出的......
不幸的是,这就是我卡住的地方。当应用程序链接时,我不确定如何指定我希望将代码的哪些部分分配给该部分。任何帮助都会很棒。:)
c - 无法读取 UART 数据
我想做的很简单,从 UART 读取 ASCII 数据。我正在使用 NXP kl27并且正在使用 Kinetis 1.2.0。我有一个 GPS(tx 引脚)连接到引脚 PTD2,并将该引脚配置为 UART2_Rx。
UART对象的配置如下:
最后,这是我用来尝试接收 UART 数据的代码:
问题是 UART_DRV_RecieveDataBlocking 永远不会返回。
我试过的
- 我已确认 GPS 正在输出数据
- 我已经确认引脚 PTD2 实际上已连接并接收数据(感谢示波器)
- 使用引脚 PTE22 发送 UART 数据以查看故障是否与 UART 对象有关。数据发送成功。
- 使用 GDB 进行调试。这很快变成了一个兔子洞,我在一段时间后就放弃了。我发现在 fsl_uart_hal.c 中调用 UART_SET_C3 后代码在调试器中永远等待(第 325 行)
- 更改配置对象(更改 parityMode)。
据我所知,我正在关注我在阅读 UART 数据时看到的每个示例/演示。如果有人对正在发生的事情有任何想法,我很想听听。
c - 带有 8051 微控制器的 7 段显示器上的数字闪烁
我用 C 语言为微控制器 8051 架构编写了程序,它从串口接收数据并显示在 7seg 显示器上,但数字在闪烁。你能帮我解决这个问题吗?处理器是 80C32。4051多路复用器与微控制器连接并选择显示器。有5个7seg显示器,通过ULN2803与微控制器连接。谢谢。这是我的代码: