完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
大家好,我使用pic24fj512gb606和Mplab x ide v3.55和XC16 1.26编译器和MLA 2017。my.(主机)在控制传输中刚刚通过u*** hid类从android设备接收数据,并且只中断连接和拆卸(根据MLA 2017版本-u*** hid与主机示例项目)。USB到MyBoice成功地从设备接收数据。接收到的数据通过UART1模块发送到其他板上,只对少量的数据命令进行工作。之后,UART模块自动禁用(我想)。但是USB仍然处于连接和正常运行状态。如果当uart挂起时软件重置,u***模块也重置。我在while循环中以及在timer1中断中正确地检查了u***.(每5ms检查一次u***任务)。挂起只发生在接收数据时。当u***处于附加状态和正常运行状态时没有问题。我使用32兆赫晶体PLL除法8。我没有对mla库代码u***_host_android.c和u***_host.c i进行任何修改,只是将示例项目转换为我的特定图片。这是硅错误或USB传输设置错误。UART单独工作正常,USB单独工作。谢谢。
|
|
相关推荐
17个回答
|
|
|
它是接收还是发射不起作用?在接收程序中处理错误吗?Ruben
|
|
|
|
|
|
当从u***机箱接收时,仅不附加状态uart通信(发送和接收两者)不,我没有处理错误。当我通过USB接收数据时,经常会出现端点忙错误。
|
|
|
|
|
|
我指的是UART代码。它是中断驱动的吗?哦,永远不要放弃,Ruben
|
|
|
|
|
|
是的,UART RX是中断驱动而不是TX。IF(x)中的更改不能解决这个问题。
|
|
|
|
|
|
那么,UART RX中断中的错误是否被处理了?Ruben
|
|
|
|
|
|
正是No. Uart RX单独,以及与USB连接和正常运行状态(非数据传输)UART RX工作完美。只有当我开始从USB设备接收数据时,它才会挂起。甚至是一个单一的读数。简单的UART,没有USB工作。没有UART的USB单独工作良好。在挂板后用调试器运行时,我只是强制再次运行它。只有uart模式位是0x0000,也就是它得到重置。之后,该板恢复。但USB被禁用,并要求重新连接。你很难理解这个问题吗?
|
|
|
|
|
|
UART RX进入接收器空闲模式RIDLE=1
|
|
|
|
|
|
你的USB任务能在中断上下文中运行吗?在计时器1可能中断?为什么你要响应一个定时器中断调用UbTasks-()?如果你打算使用USB堆栈,就不需要了。Ruben
|
|
|
|
|
|
我确实理解这个问题,我问这些问题是为了帮助你们。我认为这是最初似乎无关的结果。例如,如果您的u***任务在中断上下文中运行,并且中断优先级高于UART RX中断,则可能会丢失UART中的数据(您调用的函数在USB接收函数中花费相对较长的时间-UART2Put())。这将导致需要处理的溢出错误。另一个需要注意的是堆栈空间。如果在原始演示中添加了函数,请确保堆栈中有足够的空间。/ Ruben
|
|
|
|
|
|
谢谢你的帮助,Ruben,是的,我犯了那个错误。我的UART具有比USB中断优先级(6)低的中断优先级(4)。现在我把这个USB中断优先级改为3.3,因为USB侧我只使用这个人机界面。UART将发送比USB数据大的数据。现在它固定了。USB运行良好。对于USB的低优先级有什么问题吗?谢谢。
|
|
|
|
|
|
USB中断不应该是一个问题,因为(根据你的第一篇文章)它只用于连接和拆卸,而不是在轮询模式下使用USB。问题是你调用USB任务时,(1){}循环和定时器中断。(至少我可以从你的帖子中读到)。你为什么那样做?Ruben
|
|
|
|
|
|
我刚刚说过,我的任务的一些状态需要花费很多时间,超过一毫秒,有时状态将等待200毫秒500毫秒3000毫秒。while循环中的u***任务没有得到处理。但是u*** tasks可能至少需要1毫秒,对吧?(不清楚这一点)。因此,我将USB任务置于定时中断,以周期性地调用。这样做是好办法吗?
|
|
|
|
|
|
不,这不是一个好办法。想想看,有一个风险,即USB任务正在运行,然后被计时器中断,也叫USB任务!如果无法以与USB任务(使用非阻塞状态机的协作多任务处理)相同的方式完成任务,所以.(1)循环不会频繁地调用USBTasks,可以尝试在中断模式下而不是轮询模式下运行USB堆栈。参见u***_config.h,USB_INTERRUPT定义而不是USB_POLLING。并确保在任何中断函数中不调用任何阻塞代码(直到完成长时间操作才返回的代码,如UART2Put())。l您自己的任务(从.(1)循环中调用)会尽快返回,这对于USB堆栈来说在1-2ms以内。这主要可以通过状态机来完成,其中工作被划分为多个状态,如果某个状态需要等待某件事情,则它立即返回,并在下次调用状态机时再次进行检查。而不是使用UARTnPUT。如果您不想在中断模式下使用UART TX,那么如果UART准备发送下一个字符,也可以一次只发送一个字符。
|
|
|
|
|
|
是的,关于USB任务,你是对的。但是我的应用程序只用状态机运行。由于一些噪声,我需要在状态内部等待,直到噪声稳定下来,等待必须存在。在我的配置文件中有NUBBJPOLLIN定义,所以我在回环中删除了USB任务。谢谢。
|
|
|
|
|
|
你好,你永远不应该处于等待事件的阻塞状态(在这种情况下,噪音会稳定下来)。这肯定是多个issuesRegards的来源。
|
|
|
|
|
|
+1不要等待进入状态机。只需创建一个额外的“等待”状态,并继续维护您的其他请求。
|
|
|
|
|
|
如上所述,我在状态机中这样做的方法是计算一行信号切换到相反电平的行数。1在同一状态下为每个状态机调用计数。如果信号返回,计数被重置。当达到阈值时,信号被考虑为已切换的代码的其余部分,并且状态被改变,要么设置事件,要么在同一状态机中执行您想要执行的操作。然后更改状态以检查另一个级别。每个状态调用都很短,除非在设置信号时执行一些冗长的操作(然后您需要将此操作分解为几个状态)。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
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 05:15 , Processed in 1.301643 second(s), Total 104, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1284