完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
晚上好,我有一个关于在PIC32MX440F512H上使用UART2的主要问题。我们有一个在多个设备之间共享的库,提供了对不同的arch/lib的支持。具有PIC32MX795F512H和PIC24FJ的设备正在没有任何问题的通信。通信正在通过RS485和ha进行。rdware是完全可操作的,所有内部TX/RX都在工作,范围已验证。在PIC32MX440F512H板上,每次传输都工作,设备得到响应,但传输后不能RX数据包。ISR不被调用。我已经验证了所有的设置(它与PIC32 MX795F512H共享)。在RX挂起期间没有错误,TX和RX被启用,中断被启用,没有悬而未决的中断。信号在RX引脚上被应用,但是没有产生中断。我读过错误信息,这个芯片上UART存在多个问题,但是看起来没有RX问题。我甚至尝试执行所有的错误建议:但是没有帮助。我试图在ea之后/之前重置模块。ch传输,但是对rx问题没有帮助。我已经在范围上验证了信号被正确地传送到RX引脚,但是存在以下错误:接收:0x6F0x5D0x07。或0x6F 0x5D 0x00 0x07…或0x2F 0x5D 0x07…预期:0xAF0xF0x160x000x00007。波特设置正确,因为传输有适当的波特并得到响应,所有比特都可以在范围上通过解码验证。该设备只能在第一个分组之后发送,但接收工作,然后挂起(不中断)。没有设置错误/溢出。中断全部工作并被启用(IEC),没有未决中断(IFS)。内部数据在RX引脚(附件中的底部波形)上被接收,接收的数据位没有被设置(URXDA)。我已经尝试了一切,但是无法弄清楚。有人对此有什么想法吗?我很感激你的建议。
|
|
相关推荐
16个回答
|
|
|
你能分享一下电路板的原理图吗?
|
|
|
|
|
|
我宁愿不要垃圾邮件论坛,因为我在ALTIN使用分层设计的许多图像。传输原理共享所有设备。基本驱动是SN65 HVD非隔离,UART操作在115200。Uart信号在内部用Pi-filter和铁氧体进行滤波,然后直接送到PIC的UART。地面为所有收发信机共享。硬件可以,因为我将测试点定位在紧靠MCU引脚的位置,最重要的是,在引导设备测试所有外围设备期间,并且在此测试期间,data通过RS485总线(传输期间RX打开)和TX==RX,50字节1-50进行反射。因此我循环运行引导测试来验证TX/RX,并且它正常工作,RX缓冲区连续地填充TX,因此外部硬件是功能性的。如果在UART操作期间使用任何断点,它就会设置FRZ,并且之后将无法正确操作。数据表指定FRZ是可写的,但是在MCU头中没有相应的位字段。现在我怀疑内部时钟确实可能影响波特,因为单元传输的数据被正确读取,但是其他单元传输的数据格式不正确。由于这个故障设备传输的数据在其他端被正确接收,这意味着至少传输波特没有问题。我开始考虑用不同的MCU重新运行,因为UART RX在第一次停止后卡住了,我不能调试任何东西。
|
|
|
|
|
|
4xx系列和7xx系列在uart上略有不同,4xx系列有fifos,称为4级深FIFO,7xx系列有8级深FIFO,不同之处在于如何清除Rx、Tx中断。如果你把方向控制在485个芯片上,在UART中断,然后再检查它。
|
|
|
|
|
|
如果没有这个示意图,我只能猜测。我发现需要帮助485条线浮动到非活动级别,以防止第一个字符错误问题。http://www.ti.com/./an/slyt514/slyt514.pdf
|
|
|
|
|
|
我把A、B和数字放在CAN收发器中,以查看与开始位的不同。
|
|
|
|
|
|
我总是这样做。
|
|
|
|
|
|
谢谢你的建议。正如我之前所说,硬件正在工作,因为总线由3个不同的设备共享,而其他2个设备正确地双向通信。此外,请参阅附件中的范围,解码数据是正确的。接收总是启用的,并且在传输之前主动地驱动发送(RTS)。我还提到,数据被正确地接收到这个PIC,因为我对RS485侧和内部UART侧进行了范围验证(顶部是RS485,底部是到RX的UART输出)。不工作的设备(PIC32MX440F512)具有与PIC32MX795F512的工作设备完全相同的硬件和固件。只为每个BSP提供硬件init,但是UART init在UART库中共享,而且在设备传输正确数据时操作的模块也是如此。当我中断时。接收数据看起来可能有停止位译码错误或奇偶校验,但是所有设备都设置为相同的:115200,偶数,1停止位。它对PIC32MX795,PIC24FJ,所有硬件/固件都适用,因为它们共享公共库。波特也如前所述,因为e设备总是发送正确的数据(在附件中的作用域上解码)。作用域上的底部波形,即直接附加到UART RX管脚上的,是逐位正确的数据,应该出现在UART的RX缓冲区中的数据,但不是……我将修改该板以插件JTAG调试和验证。如果在J-Link调试时UART挂起仍然存在。
|
|
|
|
|
|
我不能上传sch,因为它抛出错误,这里是切换到JTAG(停止后不挂起UART)的链接,并尝试运行小测试来验证操作。在其他系统任务启动之前运行时,中断的UART TX/RX是可以的。
|
|
|
|
|
|
您提到过中断,并且当没有其他系统任务运行时,中断仍然有效:您有其他中断共享相同的中断标志寄存器吗?你用原子指令清除中断标志吗?为什么TX引脚在包结束时变低?Ruben
|
|
|
|
|
|
是的,我也这么想,所以除了系统计时器之外,我禁用了所有的任务,但是结果是一样的。我不能禁用系统定时器,因为一切都取决于它,即发送分组的定时、空闲检测等。现在这个值变低了,RS485总线偏置在1-2V,当它不被驱动时它就停留在那里,底部是RX输出,当没有数据时它是低的。
|
|
|
|
|
|
正确终止的RS485总线将偏置A/B电压以提供高电平(A’1’)。否则,当从接收切换到传输时,你会得到一个短的低脉冲。/ Ruben
|
|
|
|
|
|
是的,你是对的,但在这种情况下情况并非如此。偏置不见了,但是接收机输出是正确的,正如我已经说过多次,你可以在附加波形上看到它,这意味着这不是这个问题的原因。我的问题是检测为什么在PIC的UART RX引脚上应用的正确的电信号被错误读取。
|
|
|
|
|
|
嗨,我进一步调查,结果可能是由于UART不匹配的BUADs。起初,在115200进行范围译码时,一切看起来都像波特,但实际情况并非如此。以下是计算的实际波特:Master-PIC32MX795F:192kHzSlave1-PIC24FJ(工作):122kHzSlave2-PIC32MX440F(不工作):142kHzI将尝试将PIC32的波特匹配到125kHz。ng外部振荡器,但是仍然让我烦恼的是主从1可以工作,即使波特的不同比主从2高20kHz。我是通过检查从2是否能够正确地读出从1消息,但是从2不能读出主消息。有人知道为什么会这样吗?SLave1不应该先停止工作吗?
|
|
|
|
|
|
在192kHz下运行的UART无法在122kHz下运行另一个UART。这是50%的错配。误差将出现在5%以上。你应该瞄准不到3%的错配。如果你正在测试的话,就必须有一个缺陷。
|
|
|
|
|
|
是的,你很正确,我真傻,有点偏执。我实际上只是在包开始时测量开始位的差异,这里有波形,你可以看到第一个(主)的起始位比从属2和1要短得多,但是通信仍然如此。在主从机1之间进行分组交换,进行整个协议通信。从起始比特速度计算的波特数主机为190kHz,从机为122-126kHz……我将进一步研究,确保所有波特数完全为125kHz,然后我将检查whY从机2没有正确接收。
|
|
|
|
|
|
这看起来更像是启用TX缓冲器和UART启动之间的可变延迟。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:30 , Processed in 1.075086 second(s), Total 74, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1234