我用ch374作host接usb键盘 发现键盘有时能正常工作,有时不能,只有键盘灯亮,但是按键没有反应 请教各位大侠知不知道什么原因,不就感激
1、按键是否起作用,通常是通过CH374能否读取到键值来体现的,确认一下是枚举不成功还是读取键值失败 2、读取键值不可以太频繁,否则会读取不到数据,键盘的中断上传端点描述符中的最后一个字节表示读取键值的周期(一般为10mS),获取一次键值后加点延时试试 另,参考我们的例程http://wch.cn/bbs/View.asp?S=101&I=19463
主要和时序有关。根据自己的硬件调节延时,我们给的延时函数是在24MHZ,51MCU运行的。 不能正常工作的话,我们程序中会有返回的错误代码,看看这个代码是多少?你的硬件平台是什么?MCU主频多少?
谢谢ls两位的解答 问题是键盘枚举是成功的,在程序里设置键盘灯亮、灭都可以 在按键按下时会出现,键盘灯灭、程序里得不到键值,过一段时间(1s)后键盘灯重新亮 不知道是什么原因
有时好用,有时不行 不知道为什么啊 硬件平台是stm32103 72mhz
估计主要问题还是出现在延时上面,在获取键值的时候,如果获取失败,则需要先延时2MS之后在获取键值,这个2MS建议稍微的准确点。
谢谢ls,我想问一下这个2ms延时具体在什么地方啊
会不会跟spi的时钟太快有关系
确实和速度有关系,但是不是SPI的速度,是MCU速度很快。 增加重试次数看看是否可行。另外获取不成功你看一下返回的错误代码是多少。是否是0XFA。那么就需要增加 WaitInterrupt函数中的等待时间
我把系统主频降到24Mhz,好像还是这个问题 崩溃了~~~
延时主要在你发送获取键盘值的时候,如果有键值的话,返回应该是SUCCESS,如果没有键值的话,那么返回的数据应该是NAK,在返回NAK之后,应该延时2MS左右。
你这样测试以下,先别测试点灯,就获取键值,看一下返回的错误代码是多少。点灯点不亮可能是没有获取到键值,也可能发SET_REPORT有问题。
鼠标能读到数据 键盘读不到 并且返回的错误代码是48