搜索
查看: 8970|回复: 4

求助ST提供的USB例程中的Get_SerialNum(void)问题

[复制链接]

该用户从未签到

14

主题

34

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-4-27 08:09:37 | 显示全部楼层 |阅读模式
社区朋友您好!
  这段时间一直在看ST提供的USB例程,有很不明白的地方 ,请社区的朋友帮忙解辞。例程中
  Device_Serial0 = *(u32*)(0x1FFFF7E8);
  Device_Serial1 = *(u32*)(0x1FFFF7EC);
  Device_Serial2 = *(u32*)(0x1FFFF7F0);
这三行是将址(0x1FFFF7E8、0x1FFFF7EC、0x1FFFF7F0)存的内容传给Device_Serial0 、Device_Serial1 、Device_Serial2
请问这三个地址是任意自已定义的吗?有没规定.还有usb hid中的报告好复杂不好解理,我买了圈圈教你玩USB/USB开发大全等书还没搞懂,一知半解,社区的朋友如有关于这方面容易理解资料传一份给我,我的QQ:1668340344
谢谢!!
 
以下是例程中的Get_SerialNum(void)函数.
/*******************************************************************************
* Function Name  : Get_SerialNum.
* Description    : Create the serial number string descriptor.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Get_SerialNum(void)
{
  u32 Device_Serial0, Device_Serial1, Device_Serial2;
  
  Device_Serial0 = *(u32*)(0x1FFFF7E8);
  Device_Serial1 = *(u32*)(0x1FFFF7EC);
  Device_Serial2 = *(u32*)(0x1FFFF7F0);
  
  if(Device_Serial0 != 0)
  {
     CustomHID_StringSerial[2] = (u8)(Device_Serial0 & 0x000000FF); 
     CustomHID_StringSerial[4] = (u8)((Device_Serial0 & 0x0000FF00) >> 8);
     CustomHID_StringSerial[6] = (u8)((Device_Serial0 & 0x00FF0000) >> 16);
     CustomHID_StringSerial[8] = (u8)((Device_Serial0 & 0xFF000000) >> 24); 
    
     CustomHID_StringSerial[10] = (u8)(Device_Serial1 & 0x000000FF); 
     CustomHID_StringSerial[12] = (u8)((Device_Serial1 & 0x0000FF00) >> 8);
     CustomHID_StringSerial[14] = (u8)((Device_Serial1 & 0x00FF0000) >> 16);
     CustomHID_StringSerial[16] = (u8)((Device_Serial1 & 0xFF000000) >> 24);
    
     CustomHID_StringSerial[18] = (u8)(Device_Serial2 & 0x000000FF); 
     CustomHID_StringSerial[20] = (u8)((Device_Serial2 & 0x0000FF00) >> 8);
     CustomHID_StringSerial[22] = (u8)((Device_Serial2 & 0x00FF0000) >> 16);
     CustomHID_StringSerial[24] = (u8)((Device_Serial2 & 0xFF000000) >> 24);
  }  
}
回复

使用道具 举报

该用户从未签到

42

主题

143

帖子

0

蝴蝶豆

高级会员

最后登录
1970-1-1
发表于 2012-4-27 10:23:58 | 显示全部楼层

RE:求助ST提供的USB例程中的Get_SerialNum(void)问题

地址 不是 自己定义的 ,而是 芯片手册已经定义好的
回复 支持 反对

使用道具 举报

该用户从未签到

42

主题

143

帖子

0

蝴蝶豆

高级会员

最后登录
1970-1-1
发表于 2012-4-27 10:27:14 | 显示全部楼层

回复:求助ST提供的USB例程中的Get_SerialNum(void)问题

呵呵 你好,我也卖了这个,我们可以互相交流了,我买了也没有怎么弄过 就放在家里了。地址的问题 已经定义好的 你不过是用程序来实现一下
回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

34

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-28 09:10:31 | 显示全部楼层

RE:求助ST提供的USB例程中的Get_SerialNum(void)问题

2楼的朋友,谢谢您的回覆!
你说的很对是手册上已定义好的,是产品的唯一身份标识.那定义u8 CustomHID_StringSerial[CUSTOMHID_SIZ_STRING_SERIAL] =
  {
    CUSTOMHID_SIZ_STRING_SERIAL,           /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    'S', 0, 'T', 0, 'M', 0,'3', 0,'2', 0, '1', 0, '0', 0
  };
这样定义那不是多余的吗?
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-9-21 22:03:02 | 显示全部楼层

回复:求助ST提供的USB例程中的Get_SerialNum(void)问题

不是多余的,你应该可以看到,代码中:
void Get_SerialNum(void)
{
  u32 Device_Serial0, Device_Serial1, Device_Serial2;
  Device_Serial0 = *(u32*)(0x1FFFF7E8);
  Device_Serial1 = *(u32*)(0x1FFFF7EC);
  Device_Serial2 = *(u32*)(0x1FFFF7F0);
  if (Device_Serial0 != 0)
  {
    Joystick_StringSerial[2] = (u8)(Device_Serial0 & 0x000000FF);
    Joystick_StringSerial[4] = (u8)((Device_Serial0 & 0x0000FF00) >> 8);
    Joystick_StringSerial[6] = (u8)((Device_Serial0 & 0x00FF0000) >> 16);
    Joystick_StringSerial[8] = (u8)((Device_Serial0 & 0xFF000000) >> 24);
    Joystick_StringSerial[10] = (u8)(Device_Serial1 & 0x000000FF);
    Joystick_StringSerial[12] = (u8)((Device_Serial1 & 0x0000FF00) >> 8);
    Joystick_StringSerial[14] = (u8)((Device_Serial1 & 0x00FF0000) >> 16);
    Joystick_StringSerial[16] = (u8)((Device_Serial1 & 0xFF000000) >> 24);
    Joystick_StringSerial[18] = (u8)(Device_Serial2 & 0x000000FF);
    Joystick_StringSerial[20] = (u8)((Device_Serial2 & 0x0000FF00) >> 8);
    Joystick_StringSerial[22] = (u8)((Device_Serial2 & 0x00FF0000) >> 16);
    Joystick_StringSerial[24] = (u8)((Device_Serial2 & 0xFF000000) >> 24);
  }
}
有一个条件判断:
if (Device_Serial0 != 0)
加入该寄存器操作失败,那样就不会导致:
u8 CustomHID_StringSerial[CUSTOMHID_SIZ_STRING_SERIAL]
数组为空的现象出现了,至少有一个默认值.....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-8 08:01 , Processed in 1.152590 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表