野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17989|回复: 2

疑问--F103指南者--读取芯片ID实验

[复制链接]
发表于 2018-12-5 21:10:26 | 显示全部楼层 |阅读模式
本帖最后由 j2333 于 2018-12-5 22:55 编辑

int main(void)
{        
        /* USART1 config 115200 8-N-1 */
        USART_Config();

        /* to get the chipid and put it in ChipUniqueID[3] */
        Get_ChipID();        
        
        /* printf the chipid */
        printf("\r\n芯片的唯一ID为: 0x%08X-%08X-%08X\r\n",
                ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);
        
        /* printf the flash memory amount */
        printf("\r\n芯片flash的容量为: %dK \r\n", *(__IO u16 *)(0X1FFFF7E0));

        for(;;)
        {
               
        }
}

void Get_ChipID(void)
{
        ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节  32位  
        ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //
        ChipUniqueID[2] = *(__IO u32 *)(0X1FFFF7E8); // 低字节   
}


-------------以上是实验代码部分---------

根据这个实验,读取的值为
捕获1.PNG
低32位的值为05DB FF33

可是根据参考手册的读法,FF33是高位,05DB是低位,感觉应该读作:FF33 05DB,不知道我理解的对不对?
捕获.PNG


--------------分割线----------
好吧,是我理解错了,图也画错了
u32 ChipUniqueID[2]= *(__IO u32 *)(0X1FFFF7E8),以...E8地址开始,向高地址读取32位。 高地址的值 作为 高字节。也就是说,用二进制来看的话,地址最高位的值作为ChipUniqueID[2]的最高位。所以是0x05DB FF33
捕获.PNG
回复

使用道具 举报

发表于 2018-12-6 08:48:30 | 显示全部楼层
对呀,读回来是什么就是什么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-8 13:45:00 | 显示全部楼层
本帖最后由 j2333 于 2018-12-8 13:46 编辑

谢谢,之前是我地址理解错了,寄存器基地址对应的应该是寄存器位0才对。读的时候寄存器高位地址的内容 对应存放在 u32变量的高位。

所以是0x05DB FF33,而不是0xFF33 05DB
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 23:49 , Processed in 0.046952 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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