完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
usb一旦没有接入,比如说usb只接电源,不通信的时候,下面的函数一直卡在内部,有什么办法绕过去的哦!就是EA=1启动,我别的功能都没有用了(注意重点gpio中断函数不执行,执行失败),一直卡在里面!现在就是需要我usb万一只是通电,不能影响我其他功能(GPIO中断);要是usb通信的时候,也要能通信!
USBDeviceInit(); EA = 1; //注意这个是中断函数,只要usb通信了,哪怕是当前状态usb通电状态,再加入usb信号,这个中断都可以使能,一旦usb通信数据线拔掉又没有功能,再插入usb数据线又有功能,请问这个是啥问题呢?? void GPIOInterruptCfg() { GPIO_IE &= ~bIE_IO_EDGE; //?/????? // GPIO_IE |= bIE_IO_EDGE; //??/???? // GPIO_IE |= bIE_RXD1_LO; //RXD1????????? GPIO_IE |= bIE_P3_1_LO; //P15P14P13?????;RST????? // GPIO_IE |= bIE_P3_1_LO; //P31????????? // GPIO_IE |= bIE_RXD0_LO; //RXD0????????? IE_GPIO = 1; //GPIO???? IP_EX|=bIP_GPIO;//注意这个中断在while循坏就搞定了!! } IT0 = 1; EX0 = 1; 你开启gpio外部中断IN0(P3.2) 跟我那个P3.1没有任何关系! voidGPIOInterrupt( void ) interrupt INT_NO_GPIO using 3 //GPIO??????,??????1 { kd_led(); } void main( void ) { CfgFsys( ); kd_pwm_init(); kd_gpio_init(); mDelaymS(5); memset(TP,0,sizeof(TP)); CTP_Info.x_max_pos = 0; CTP_Info.y_max_pos = 0; CTP_Info.IRQ_Flag = 0; GT_Init(); MAX_POINT = 5; MyManuInfo_Len = sizeof(MyManuInfo); MyProdInfo_Len = sizeof(MyProdInfo); GPIOInterruptCfg(); USBDeviceInit(); EA = 1; //注意就是卡在了这里,因为usb只通电了,USBDeviceInit 源码也看不到,只有lib文件,把相关函数放在EA=1前面就可以正常,EA=1后面就不行了,因为这个是全局中断使能啦啦!usb中断优先级比gpio中断优先级要高,就卡在那里了! while( USB_Enum_OK == 0 ) { }; IT0 = 1; EX0 = 1; /* ??????????????????,?????ì?????? */ CH554WDTModeSelect(1); /* ?????????ú?????????· */ while(1) { CH554WDTFeed(0); GT_Touch_Check(); } } |
|
相关推荐
12个回答
|
|
EA = 1后代码卡在了while循环里,USB_Enum_OK这个变量应该是usb枚举完成后才置位的。
|
|
|
|
把相关函数放在EA=1前面就可以正常,EA=1后面就不行了,因为这个是全局中断使能啦啦!usb中断优先级比gpio中断优先级要高,就卡在那里了!
|
|
|
|
你好,这个不是bug,也跟中断没有关系,看你上面贴的代码,是死在了while循环里面,你把那个while循环注释掉就好了。
|
|
|
|
你好,这个不是bug,也跟中断没有关系。看你上面贴的代码,是死在了while( USB_Enum_OK == 0 )循环里面,你把那个while循环注释掉就好了。
|
|
|
|
//注意这个是中断函数,只要usb通信了,哪怕是当前状态usb通电状态,再加入usb信号,这个中断都可以使能,一旦usb通信数据线拔掉又没有功能,再插入usb数据线又有功能,请问这个是啥问题呢??
voidGPIOInterrupt( void ) interrupt INT_NO_GPIO using 3 //GPIO??????,??????1 { kd_led(); } 这个中断函数不管你while啥的,都是可以中断到的,结果就是不行!!!请问到底是啥问题,莫名其妙的!usb随时通信,功能都可以,不通信这个功能就没有了!!! |
|
|
|
另外还有一个问题就是这个芯片对电流稳定性很敏感,我用这个芯片去复位别的芯片,结果这个芯片就自动重启了!浪涌敏感有点高!!
|
|
|
|
|
|
|
|
void GPIOInterruptCfg()
{ GPIO_IE &= ~bIE_IO_EDGE; //?/????? // GPIO_IE |= bIE_IO_EDGE; //??/???? // GPIO_IE |= bIE_RXD1_LO; //RXD1????????? GPIO_IE |= bIE_P3_1_LO; //P15P14P13?????;RST????? // GPIO_IE |= bIE_P3_1_LO; //P31????????? // GPIO_IE |= bIE_RXD0_LO; //RXD0????????? IE_GPIO = 1; //GPIO???? IP_EX|=bIP_GPIO;//注意这个中断在while循坏就搞定了!! } IT0 = 1; EX0 = 1; 你开启gpio外部中断IN0(P3.2) 跟我那个P3.1没有任何关系! |
|
|
|
只要usb通信了,哪怕是当前状态usb通电状态,再加入usb信号,这个中断都可以有功能,一旦usb通信数据线拔掉又没有功能,再插入usb数据线又有功能,请问这个做如何解释??
|
|
|
|
第一次若只是上电运行程序,肯定不会影响你的gpio中断。当usb通讯后再去掉d+ d-线的话会进挂起中断,我们例程中会将芯片睡眠,不知道你的代码是怎么处理的,有可能后面就将芯片睡眠了。
|
|
|
|
例程中会将芯片睡眠!如何关闭这个功能!谢谢!!我需当usb通讯后再去掉d+ d-线,不能影响我的芯片功能!!
|
|
|
|
您好,TP例程在USB收到挂起信号之后就进入睡眠,该功能集成在LIB库内部无法修改。如果对USB有自定义开发需求,可以尝试使用通用USB例程进行开发,参考http://www.wch.cn/downloads/CH554EVT_ZIP.html
|
|
|
|
只有小组成员才能发言,加入小组>>
463 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2868 浏览 2 评论
2357 浏览 1 评论
808浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
630浏览 1评论
492浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
356浏览 1评论
630浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:42 , Processed in 1.148376 second(s), Total 99, Slave 82 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号