野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18369|回复: 6

寄存器点亮LED小灯

[复制链接]
发表于 2020-9-6 23:43:18 | 显示全部楼层 |阅读模式
#define PERIPH_BASE                  (unsigned int )0x40000000    //为什么不能写成 (unsigned int * )0x40000000
#define APB1_PERIPH_BASE         (PERIPH_BASE)           //0x40000000
#define APB2_PERIPH_BASE         (PERIPH_BASE+0x10000)      //0x40010000
#define AHB_PERIPH_BASE          (PERIPH_BASE+0x20000)      //0x40020000
#define GPIOB_BASE                   (APB2_PERIPH_BASE+0x0C00)    //0x40010C00
#define RCC_BASE                      (AHB_PERIPH_BASE+0x1000)    //0x40021000
#define RCC_APB2RSTR              *(unsigned int *)(RCC_BASE+0x18)
#define GPIOB_CRL                    *(unsigned int *)(GPIOB_BASE)
#define GPIOB_ODR                   *(unsigned int *)(GPIOB_BASE+0x0C)



为什么第一行不能写成     #define PERIPH_BASE       (unsigned int * )0x40000000
回复

使用道具 举报

发表于 2020-9-8 17:12:47 | 显示全部楼层
下面的宏全部都得改   但这样本身和宏名意义不太符合
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-8 21:55:27 | 显示全部楼层
WishWish 发表于 2020-9-8 17:12
下面的宏全部都得改   但这样本身和宏名意义不太符合

#include <stdio.h>
#define PERIPH_BASE              (unsigned int *)0x40000000                   //0x40000000
#define APB1_PERIPH_BASE     (unsigned int *)(PERIPH_BASE)                   //0x40000000
#define APB2_PERIPH_BASE      (unsigned int *)(PERIPH_BASE+0x10000)        //0x40010000
#define AHB_PERIPH_BASE       (unsigned int *)(PERIPH_BASE+0x20000)        //0x40020000
#define GPIOB_BASE        (unsigned int *)(APB2_PERIPH_BASE+0x0C00)                //0x40010C00
#define RCC_BASE        (unsigned int *)(AHB_PERIPH_BASE+0x1000)                //0x40021000

#define RCC_APB2RSTR      *(unsigned int *)(RCC_BASE+0x18)       
#define GPIOB_CRL              *(unsigned int *)(GPIOB_BASE)       
#define GPIOB_ODR              *(unsigned int *)(GPIOB_BASE+0x0C)


我改成这样也还是不能点亮LED小灯       
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-8 21:59:36 | 显示全部楼层
坏蛋 发表于 2020-9-8 21:55
#include
#define PERIPH_BASE              (unsigned int *)0x40000000                   //0x40000000
#define APB ...

为什么改成这样也还是不对
回复 支持 反对

使用道具 举报

发表于 2020-9-12 13:43:32 | 显示全部楼层
你要看看调用这宏的函数形参类型是什么,函数本体是怎么处理这传进来的参数
回复 支持 反对

使用道具 举报

发表于 2020-9-12 20:38:11 | 显示全部楼层
使用(unsigned int)定义一个无符号的整数,和后面偏移值相加得到我们预期的数值0x4001 0000;
如果使用(unsigned int*)定义一个指针类型,和后面偏移值相加,是指针加上0x10000,后面指针指向0x40040000;
这样地址就不对了。我是这样理解的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-15 21:40:46 | 显示全部楼层
zlf_lufeng 发表于 2020-9-12 20:38
使用(unsigned int)定义一个无符号的整数,和后面偏移值相加得到我们预期的数值0x4001 0000;
如果使用( ...

谢谢  懂了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 09:25 , Processed in 0.044318 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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