找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 966|回复: 4
收起左侧

stm32单片机点个led,内存地址有个疑问

[复制链接]
ID:1028013 发表于 2022-9-2 14:39 | 显示全部楼层 |阅读模式
板子是stm32F103C8T6最小系统

#define PERIPH_BASE           ((unsigned int)0x40000000)

#define APB1PERIPH_BASE       (PERIPH_BASE + 0x20000)
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
#define GPIOC_CRL *(unsigned int*)(GPIOC_BASE + 0x00)
#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE + 0x04)
#define GPIOC_ODR        *(unsigned int*)(GPIOC_BASE + 0x0c)
#define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE + 0x10)
        
#define RCC_BASE (APB1PERIPH_BASE + 0x1000)
#define RCC_APB2ENR *(unsigned int*)(RCC_BASE + 0x18)

main.c:

        RCC_APB2ENR |= 1<<4;
        GPIOC_CRH &=~(0x0f<<(4*6));
        GPIOC_CRH |=(0x01<<(4*6));
        GPIOC_BSRR = (1<<(14));//通过置位寄存器设置1改变C14引脚输出高电平
        
        
                while(1){
                }
运行结果没问题,通过仿真调试查看内存地址 0x4001100c, 这个应该就是实际的数据地址吧,就是GPIOC_ODR吧? 那值应该是 40 00...(0100 0000..)呀,但是怎么跑到地址 0x4001100d去了?如果要加上高16位的话,也应该是 00 00 40 00...呀?是怎么回事呀
stm32.PNG
回复

使用道具 举报

ID:550613 发表于 2022-9-2 17:52 | 显示全部楼层
因为采用的是小端模式,40 00在内存里会以00 40的方式存储
回复

使用道具 举报

ID:771630 发表于 2022-9-2 18:13 | 显示全部楼层
32位的数据,有高位在前、低位在前的问题吧
回复

使用道具 举报

ID:195496 发表于 2022-9-2 19:42 | 显示全部楼层
你没有接触过不同的系统吧,大小端问题很普遍,每次换平台要先确认一下
回复

使用道具 举报

ID:123289 发表于 2022-9-3 08:19 | 显示全部楼层
芯片实际内存小于程序指定的内存时,高位部分截除。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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