update serial number string with chip unique ID

pull/13/head
XIVN1987 12 months ago
parent 6c2759ff5d
commit 5608a39391
  1. 29
      CH32V203/src/main.c
  2. 2
      CH32V305/src/USBD/usb_desc.c
  3. 2
      CH32V305/src/USBD/usb_desc.h
  4. 31
      CH32V305/src/main.c

@ -59,6 +59,7 @@ void SysTick_Handler(void)
}
void int_to_unicode(uint32_t value , uint8_t *pbuf , uint8_t len);
void USB_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
@ -67,6 +68,15 @@ void USB_Config(void)
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div3);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
/* update serial number string with chip unique ID */
extern uint8_t USBD_StringSerial [];
uint32_t serial0 = *(uint32_t*)0x1FFFF7E8;
uint32_t serial1 = *(uint32_t*)0x1FFFF7EC;
uint32_t serial2 = *(uint32_t*)0x1FFFF7F0;
int_to_unicode(serial0 + serial2, &USBD_StringSerial[2], 8);
int_to_unicode(serial1 + serial2, &USBD_StringSerial[18], 4);
USB_Init();
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
@ -143,3 +153,22 @@ void Delay_Ms(uint32_t n)
for(int i = 0; i < SystemCoreClock / 4000 * n; i++) __NOP();
}
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;
}
}

@ -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,

@ -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[];

@ -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;
}
}

Loading…
Cancel
Save