问题标签 [pic32]
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 - --fill PIC32MX 引导闪存上的命令
过去几周我一直在尝试找出为什么这不起作用。我已尝试阅读在我的PIC32 MCU ( PIC32MX795F512L ) 和我正在使用的XC32编译器 (v1.34) 上可以找到的所有文档,但目前还没有成功。
我需要一个特殊的常量值写入物理引导闪存地址0x1FC02FEC
(虚拟地址:)0x9FC02FEC
。这个常数是0x3BDFED92
。
pic32
通过以下命令行(我在xc32-ld
项目属性下的“附加选项”下放置),我已经成功地在我的主程序(如果我直接使用 Real ICE 编程)上做到了这一点:
然后我可以检查(在我的主程序中)这个地址是否确实存储了正确的值,这也有效。我为此使用以下代码:
我的问题如下。我不希望我的主程序十六进制文件将常量写入该位置。我希望我的引导加载程序十六进制文件执行此操作,并且我的主程序必须能够读取该位置并查看该常量是否存在。如果我在引导加载程序中使用 --fill 命令xc32-ld
,它会像主程序一样成功写入常量(我已经通过在调试模式下使用相同的 --fill 命令运行引导加载程序并检查0x1FC02FEC
地址来测试这一点为常数)。问题是,当我的引导加载程序通过 MicroSD 读入一个新的主程序,然后跳转到新的主程序时,一切都不起作用。似乎,在它跳转到新的主程序之前,发生了一些不好的事情,一切都崩溃了。几乎就像向1FC02FEC
当程序从引导加载程序跳转到主程序时,位置是一个问题。
是否有一个原因?我希望我的解释是好的,如果不是,请让我知道,我会尝试以更容易理解的方式改写它。
我正在使用 Microchip 提供的示例代码来使用 MicroSD 卡执行引导加载程序。以下是代码:
c - 在 C 中与多个中断服务例程共享全局变量
我正在用 C 语言为 PIC32 uC 编写一个程序,它有一个全局变量(uint32_t 类型),可以从多个中断服务程序和主程序中读取/修改。
我知道这不安全,所以我想知道如何使它安全?有没有一个例子说明如何使它安全?
编辑1:
中断可以互相打断吗?是
ISR 是否更新变量?是 main 是否更新变量?是的 对变量的写入和读取是原子的,你怎么知道?不确定
是否存在 RTOS?不
c - long long pic32 的位运算错误
我正在使用 pic32mx 控制器并使用 C32 工具套件 v2.02 编译器和 MPLAB-X IDE v 3.05。我正在对 long long 变量使用按位运算,但得到错误的结果。
输出:
根据计算,这个结果是错误的。data0 和 data1 必须相等。
请建议我对此操作有更好的方法。如果上述过程有任何错误,请提出正确的路径。
pic - Pin lo 在调试模式下,但在发布模式下是 hi,没有代码更改
我有一个 PIC32MX695F512L 项目,它可以在使用 PicKit3 的调试模式下工作,但不能在发布模式下工作。使用调试器时,设置为输入引脚的端口 F5 为 lo。但是如果我在发布模式下运行它,引脚就会变好。只有一根电缆连接到它,这是lo。在发布模式下,我无法读取 lo。知道为什么在释放模式下端口 F5 变高吗?
丹尼斯
uart - PIC32MX795F512H UART 与 RS232 通信
我目前是第一次使用 PIC 微控制器。在代码中,我准确指定了我正在使用的 PIC、编译器等。也许这有帮助。
我正在尝试在 PIC32 上设置 UART 通信,并通过 RS232 将 0x41 之类的十六进制代码发送到我计算机上的终端。要将信号从 PIC UART 转换为 RS232 电平,我使用的是 MAX232EPE。
目前我遇到的问题是,当我将 0x41 例如从 PIC32 发送到终端或反之亦然时,接收到的数据不匹配。我认为这是由我的波特率设置错误引起的,但我不确定。有人可以查看我的代码,看看是否有人能看到问题吗?我忘了定义什么吗?我定义错了吗?我是不是计算错了波特率?
PS 我知道接收到的数据与发送的数据不匹配,因为我在 mplab 的调试模式下检查了“watches”,当我将从终端发送到 PIC32 的数据回显到终端时,它也不匹配.
延迟和中断代码可以忽略,它们按预期工作,所以我真的相信问题与 PIC/buad 速率的初始设置有关。
我希望这足够清楚,非常感谢任何帮助
谢谢,
请参阅下面的代码
c - 程序在 MPLAB 中完美运行,但在 PIC 32 上无法正确加载
我现在正在使用 UART、键盘和 LCD 根据用户要求在一个单元中交换数据。表示用户可以根据选择位选择上面列出的任何输入和输出设备。当我使用 MPLAB X 3.50 进行调试时,代码和输出工作得非常好。我有一个 PIC32 开发板和 ICD3 作为加载器,但是当我尝试通过 ICD UART 将我的代码加载到 PIC32 时工作得非常好,但是 LCD 打印数据如???->->->->??。当我断开整个电路板并再次连接时,我完美地观察到了 UART 输出,但 LCD 显示类似于上述消息。
有什么想法吗???\\
mplab - PIC32MZ2048ECH144 USART - 传输的垃圾字符
我是 MPLAB X Harmony 框架的新手,也是使用微控制器的新手。我正在研究 PIC32MZ2048ECH144。我想使用 USART 传输一个简单的字符串,并在 RealTerm 终端中看到它的显示。(我也尝试过超级终端。)无论我发送什么字符串,我只看到显示垃圾字符。当我浏览解决显示垃圾字符问题的解决方案时,有人建议检查波特率。我在 MPLab Harmony 配置器中将波特率设置为 9600(选项 -> Harmony 框架配置 -> 驱动程序 -> USART -> USART 驱动程序实例 0 -> 波特率 -> 9600)。所以我在 app.c 中使用以下行来明确设置波特率。(PBCLK 为 100MHz)。但没有运气!PLIB_USART_BaudRateSet(USART_ID_2, 100000000 ,9600); app.c 文件的代码:
很抱歉,由于我没有足够的积分,我无法附上我在 RealTerm 中收到的输出图像。我不知道还有什么问题可能导致波特率不匹配。任何提示或帮助都会有很大帮助。提前致谢。请为帖子中的任何错误向我道歉。
embedded - 如何使用 Microchip Harmony Configurator (MHC) 为 PIC32MZ2048ECH144 的同一端口上的 2 个引脚编写 ISR 宏?
我正在使用 PIC32MZ2048ECH144。我有两个开关连接到 RH8(引脚 81)和 RH9(引脚 82)。我在 MHC 中没有看到任何在引脚级别设置中断的选项,因此我得到了为端口 H 生成的 ISR。我需要单独调用每个引脚的 ISR。因此,在“system_init.c”中,在“SYS_Initialize”函数中,我添加了以下几行,
PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_8); PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_9);
MHC在“system_interrupt.c”中生成的ISR:
我用以下几行替换了上面的 ISR 宏:
这没有成功。我提到了链接http://microchip.wikidot.com/faq:78。我觉得从“/pic32mx/include/proc/p32mz2048ech144.h”中选择 ISR 宏的向量号是错误的。(我使用 _ADC1_DATA22_VECTOR 和 _ADC1_DATA23_VECTOR 认为针对它们的值 81 和 82 是引脚编号,这同样不起作用。)关于如何设置引脚电平中断(同一端口上的 2 个引脚)的任何帮助或提示都会非常棒!请为我帖子中的任何错误道歉。
提前致谢。
driver - PIC32 USB CDC 写入缓慢并引发错误标志
我目前正在尝试为 pic32MZ2048EFH100 编写代码,该代码通过 USB CDC 驱动程序和谐地接收和响应来自 PC 上的自定义程序的消息。
目前,图片能够发送和接收消息。但是,每当它向 PC 发送消息时,它总是错误地引发缓冲区 80% 满标志 (EV_RX80FULL)。除此之外,PIC32 发送消息的速度相对较慢。我正在从工作正常的 TERN 板上移植固件。有时 PC 会非常快速地发送两条消息,TERN 会发送一条确认消息,接收下一条消息,然后确认该消息。另一方面,PIC 将接收两者,然后发出两个确认,这将导致 PC 端的程序出现问题。
两个板之间最大的区别是驱动程序不同,这是我们认为问题的根源。PIC 使用 Microchip 的驱动程序,.inf 如下
这是PIC上的USB配置: