在使用正点原子mini开发板触摸usb鼠标例程时,通过USB抓包软件USBlyzer抓取到的产品序列号iSerialNumber是一组12位的字符串。如图1所示。通过程序跟踪得知,这个字符串是stm32唯一设备ID号。寄存器地址如图2所示。
图1、产品序列号显示为stm32的唯一设备ID号
图2、stm32唯一设备ID寄存器地址
usb_desc.c程序里面Joystick_StringSerial数组虽然写了“STM32”,如图3所示。但由于在hw_config.c程序里面的void Get_SerialNum(void)函数读取了stm32的Unique Devices ID,并对Joystick_StringSerial从第2字节开始的24字节进行填充,所以不管usb_desc.c程序中的Joystick_StringSeria里面写什么字符串,最后显示出来的结果都是stm32的唯一设备ID。如图4所示。
图3、自定义的产品序列号
图4、获取stm32唯一设备ID号,并填充到Joystick_StringSerial数组中
如果想把产品序列号改为自定义的,只需把hw_config.c文件中void Get_SerialNum(void)里面的IntToUnicode (Device_Serial0, &Joystick_StringSerial[2] , 8);和IntToUnicode (Device_Serial1, &Joystick_StringSerial[18], 4);屏蔽掉就可以了。如图5所示。
图5、屏蔽填充指令
图6、重新自定义产品序列号
图7、显示的自定义产品序列号