这个问题找了两三天,开始并不认为是示例程序的问题,只是感觉是自己代码问题。
这个解决流程大概是: 先调好矩阵键盘=> 调用发送函数。
就是因为调用时,一直发送数据,我也在按键抬起做了操作,始终不行。
最后,发现时示例代码中有个 空闲中断 引起的。
udev->regs.dr->DIEPFEINTEN |= 1U << ep_num;
这个空闲中断好像是只要引脚是高电平,始终会发送数据。
于是,我就把这个代码做了调整。
usb_status usb_transc_inxfer1 (usb_core_driver *udev, usb_transc *transc)
{
usb_status status = USB_OK;
uint8_t ep_num = transc->ep_addr.num;
__IO uint32_t epctl = udev->regs.er_in[ep_num]->DIEPCTL;
__IO uint32_t eplen = udev->regs.er_in[ep_num]->DIEPLEN;
eplen &= ~(DEPLEN_TLEN | DEPLEN_PCNT);
/* zero length packet or endpoint 0 */
if (0U == transc->xfer_len) {