专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
用PIC18F14K50对USB功能的实现
2020-02-06 10:33
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
4080
33
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={};
以满足自己的要求。
加载中...
查看其它33个回答
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
前提:因为该类项目可以以“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={};
以满足自己的要求。
一周热门 更多>