STM32F10xxx系列为每块芯片都提供一个96位的独一无二的ID供用户控制使用。
96位的独特ID位于地址0x1FFFF7E8 ~ 0x1FFFF7F4的系统存储区,由ST在工厂中写入(用户不能修改),用户可以以字节、半字、或字的方式单独读取其间的任一地址。
u32 Dev_Serial0, Dev_Serial1, Dev_Serial2;
Dev_Serial0 = *(vu32*)(0x1FFFF7E8);
Dev_Serial1 = *(vu32*)(0x1FFFF7EC);
96位的独特ID位于地址0x1FFFF7E8 ~ 0x1FFFF7F4的系统存储区,由ST在工厂中写入(用户不能修改),用户可以以字节、半字、或字的方式单独读取其间的任一地址。
u32 Dev_Serial0, Dev_Serial1, Dev_Serial2;
Dev_Serial0 = *(vu32*)(0x1FFFF7E8);
Dev_Serial1 = *(vu32*)(0x1FFFF7EC);
Dev_Serial2 = *(vu32*)(0x1FFFF7F0);
程序示例:
uint32_t ID[4];
ID[0]=0xFFFFFFFF;
ID[1]=*(vu32*)(0x1ffff7e8);
ID[2]=*(vu32*)(0x1ffff7ec);
ID[3]=*(vu32*)(0x1ffff7f0);
sprintf(buffer,"%08X%08X%08X%08X",ID[0],ID[1],ID[2],ID[3]);
memcpy(deviceID,buffer,33);
USART1_send_buf(deviceID,32);
void USART1_send_buf(char * buffer, uint8_t length)
{
uint8_t i;
for(i=0;i<length;i++)
{
USART_SendData(USART1, buffer[i]);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}
}
}