用PIC18F14K50对USB功能的实现

2020-02-06 10:33发布

有用过/正在用PIC18F14K50对USB功能的实现的吗?
  好像该IC在USB方面性价比较高,算是比较新的IC,欢迎有用过或正的用的朋友一起讨论,本人刚起步,尤其对PIC只能算是初学者(在ouravr算是借用宝地啦,因为这之前一直用mega)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
33条回答
coolhe
2020-02-07 06:03
采用PIC18F14K50对Custom-Build HID USB设备的开发实例
  前提:因为该类项目可以以“USB Device - HID - Custom Demos”下的“Generic HID - Firmware”为基础进行修改,因此所需要的文件有:main.c usb_descriptors.c 及HardwareProfile - Low Pin Count USB Development Kit.h HardwareProfile.h usb_config.h,以及lkr文件:rm18f14k50.lkr(注意:以下有些步骤相似于上述Standard HID示例)。
第一步:新建项目:
第二步:加载上述两个c文件与三个h文件:

第三步:修改编译选项,使Include Search Path包含:C:MCC18h,C:Microchip SolutionsMicrochipInclude以及该项目所在路径,如:E:ProgramePICGeneric HID - Firmware,如下图所示:

第三步:修改Library Search Path为C:MCC18lib,如下图所示:

第四步:加载C:Microchip SolutionsMicrochipUsb下的usb_device.c和
        C:Microchip SolutionsMicrochipUsbHID Device Driver下的usb_function_hid.c

第五步:加载rm18f14k50.lkr文件,如下所图所示(注意:如果该文件不加载,编译可能不会出错,但功能可能不正常,比如说UART通信收到数据就不正确):

第六步:选择programme工具:

第七步:选择release版本:

第八步:编译下载即可执行,这样下载后的文件可使PC识别到PIC18F14K50,此时对应的PC机测试软件为C:Microchip SolutionsUSB Device - HID - Custom DemosGeneric HID - HID DLL - PC SoftwareMicrosoft Visual C++ 2008 Express,运行程序如下图所示:

当点击Toggle Led(s)时,PC发送一个0x80给PIC18F14K50,可以由此设计相应的应用软件。
第九步:应用软件开发:
   在usb_descriptors.c文件中找到"产品技术符"并修改如下:
//Product string descriptor
ROM struct{BYTE bLength;BYTE bDscType;WORD string[25];}sd002={
sizeof(sd002),USB_DESCRIPTOR_STRING,
{
//'S','i','m','p','l','e',' ','H','I','D',' ',
//'D','e','v','i','c','e',' ','D','e','m','o'

'S','i','m','p','l','e',' ','H','I','D',' ',
'D','e','m','o',' ','B','y',' ','H','m','s'
}
};
下载到18F14K50之后,断开MCU系统电源及下载线,插入USB接头,PC机识别如下图:

在18F14K50的main.c文件中找到void ProcessIO(void)函数,在其下的if(!HIDRxHandleBusy(USBOutHandle))
{
//加载用户自己的应用程序
}
在这里可以加入用户的应用程序,比笔者在这里加入了以下代码,将18F14K50通过HID USB自PC接收到的16 bytes数据通过UART发送出去。
//***********************************
    for(i=16;i>0;i--)
      usend[i-1]=ReceivedDataBuffer[i-1];
        USART_Send(usend, 16);
//***********************************
也就是说,18F14K50通过HID USB自PC接收到数据存放在ReceivedDataBuffer[]数组中,其相应的接收函数为:
HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64);
(接收“端点”为HID_EP,接收数据保存在ReceivedDataBuffer[],而一次接收长度为64)
而18F14K50通过HID USB向PC发送数据的函数为:
HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
(发送“端点”为HID_EP,发送的数据在ToSendDataBuffer[],而一次发送的长度为64)
这样,18F14K50就可以实现HID USB的方式与PC机进行信息交换。
Note:在上述实验第九步中,可以采用“USB-HID描述符工具”修改usb_descriptors.c中的
“设备描述符”-USB_DEVICE_DESCRIPTOR
“配置描述符”-configDescriptor1
“HID类描述符”-ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01={};
以满足自己的要求。

一周热门 更多>