update serial number string with chip unique ID

This commit is contained in:
XIVN1987
2024-12-14 11:36:43 +08:00
parent 6c2759ff5d
commit 5608a39391
4 changed files with 61 additions and 3 deletions
+1 -1
View File
@@ -402,7 +402,7 @@ const uint8_t USB_StringProduct[] =
/* Serial Number Descriptor */
const uint8_t USB_StringSerialNbr[] =
uint8_t USB_StringSerialNbr[] =
{
USB_SIZE_STRING_SERIALNBR,
USB_DESCR_TYP_STRING,
+1 -1
View File
@@ -62,7 +62,7 @@ extern const uint8_t USB_CfgDesc_HS[];
extern const uint8_t USB_StringLangID[];
extern const uint8_t USB_StringVendor[];
extern const uint8_t USB_StringProduct[];
extern const uint8_t USB_StringSerialNbr[];
extern uint8_t USB_StringSerialNbr[];
extern const uint8_t USB_QualifierDesc[];
extern const uint8_t HID_ReportDesc_FS[];
extern const uint8_t HID_ReportDesc_HS[];
+30 -1
View File
@@ -11,7 +11,7 @@ volatile uint32_t SysTick_ms = 0;
void SysTick_Config(uint32_t ticks);
void int_to_unicode(uint32_t value , uint8_t *pbuf , uint8_t len);
void main(void)
{
@@ -19,6 +19,15 @@ void main(void)
VCOM_Init();
/* update serial number string with chip unique ID */
extern uint8_t USB_StringSerialNbr[];
uint32_t serial0 = *(uint32_t*)0x1FFFF7E8;
uint32_t serial1 = *(uint32_t*)0x1FFFF7EC;
uint32_t serial2 = *(uint32_t*)0x1FFFF7F0;
int_to_unicode(serial0 + serial2, &USB_StringSerialNbr[2], 8);
int_to_unicode(serial1 + serial2, &USB_StringSerialNbr[18], 4);
USBHS_RCC_Init();
USBHS_Device_Init(ENABLE);
@@ -52,3 +61,23 @@ void SysTick_Handler(void)
SysTick_ms++;
}
void int_to_unicode(uint32_t value , uint8_t *pbuf , uint8_t len)
{
for(int i = 0 ; i < len ; i++)
{
if((value >> 28) < 0xA)
{
pbuf[2 * i] = (value >> 28) + '0';
}
else
{
pbuf[2 * i] = (value >> 28) + 'A' - 10;
}
pbuf[2 * i + 1] = 0;
value = value << 4;
}
}