单片机交流
直播中

手托初梦

9年用户 849经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

洋桃一号开发板测试U盘有什么问题?如何去解决?

在使用洋桃一号开发板测试U盘插拔时发现了哪些问题?有什么解决办法?

回帖(1)

李欣媛

2021-7-6 15:57:55
  发现的问题
  在使用洋桃一号开发板测试U盘插拔时,发现洋桃电子官方例程对于Query376Interrupt();函数的疑问。
  1,在CH376.h文件中#define CH376_INT GPIO_Pin_15
  2,在CH376.C文件中如下定义Query376Interrupt();函数
  /******************************************************************************** 描 述 : 查询CH376中断(INT#低电平).* 返 回 : **0:无中断。 1:有中断*********************************************************************************/u8 Query376Interrupt(void){ u8 i; i = GPIO_ReadInputDataBit(CH376_INTPORT,CH376_INT); return( i ); } 答疑之路
  对于问题1,了解到GPIOA15是JDTI引脚,只能用于JATG功能;同时,在CH376端口初始化函数CH376_PORT_INIT中针对GPIO_Pin_8做了初始化。结合以上两点判断是例程错误,正确的应该是#define CH376_INT GPIO_Pin_8。
  对于问题2,参照CH376官方提供例程,发现l两个Query376Interrupt函数返回值意义相同,同时在filesys.c中的处理情况也完全一致。
  /******************************************************************************** 描 述 : 查询CH376中断(INT#低电平).* 返 回 : FALSE(0):无中断。 TRUE(1):有中断.*******************************************************************************/UINT8 Query376Interrupt( void ){ UINT8 i; i = (CH376_INT_WIRE ? FALSE : TRUE ); /* 如果连接了CH376的中断引脚则直接查询中断引脚 */ return( i ); } 出现以上两个问题,但是洋桃电子官方例程仍然能够正常运行。
  经过测试:将GPIO_Pin_15改为GPIO_Pin_8时,程序无法正常运行,即无法检测U盘插入。继续修改:将洋桃官方例程Query376Interrupt函数中的语句修改为i = ~GPIO_ReadInputDataBit(Int_Port,Int_Pin);程序恢复正常。
  问题解决
  解决方法:
  1,将洋桃电子例程#define CH376_INT GPIO_Pin_15修改为#define CH376_INT GPIO_Pin_8。在这里,之前的错误程序能运行的原因便是,CH376_INT引脚也就是GPIO_Pin_15总是保持高电平,而调用Query376Interrupt函数的时候就是返回值为1的,也就是GPIO_ReadInputDataBit读出的高电平,这里的凑巧确实让人哭笑不得。
  不知道杜洋老师当时是不是只为了程序能够执行出来,而没有仔细检查。
  2,在分析了以上情况之后,将Query376Interrupt函数中的i = GPIO_ReadInputDataBit(CH376_INTPORT,CH376_INT);修改为: i = ~GPIO_ReadInputDataBit(Int_Port,Int_Pin);
  最终程序完美运行,但是,不要忘记插上PA8与USB INT之间的接线帽。
1 举报
  • bayiqiu: 我看视频也卡在这儿1个小时,觉得程序运行不下去,一个是管脚定义错误,一个是返回值没有取反。反复翻看视频电路图,手上没有完整的(free),问D娘找到这里来,杜洋老师经常回头更正自己的错误。

更多回帖

发帖
×
20
完善资料,
赚取积分