Stm32F407——LED闪烁(2)

位带及位带别名区的关系:
位带是指在存储区中可以按位操作的地带;
位带别名区(Bit Band Alias)是指存储区的另一个区域,该区域中的每1个字与位带中的1个位一一对应。

对位带区的1个位的操作和对对应的别名区中的】个字的操作结果一样,但对位带别名区操作代码效率更高。STM32F407中有两个区域支持位带,一个是SRAM区的最低1MB范围(0x2000 0000~0x200FFFFF),另一个是片内外设区的最低1MB范围(0x4000 0000~0x400F FFFF)。这两个区中的地址除了可以像普通的 RAM一样使用,它们还都有自己的“位带别名区”,位带别名区把位带区的每个位膨胀成一个32 位的字,即每个位带别名区有 32MB。其中,SRAM的位带别名区的地址范围为:0x22000000~0x23FF FFFF;片内外设的位带别名区的地址范围为:0x4200 0000~0x43FF FFFF。

GPIOF_ODR的bit9映射到位带别名区的地址的计算:
0x4002 1414&0xf000 0000 + 0x200 0000 +(0x4002 1414&0xfffff)<<5 + 9<<2 = 0x4242 82A4
> 故定义:
#define LED0 (*(volatile unsigned *)0x424282A4)
方便以下LED0的使用.

LED0定义宏

 #define LED0 (*(volatile unsigned *)0x424282A4)

main.c

//GPIOF口相关寄存器的定义
/*将项目2-1中的7)、regdef.h文件下//GPIOF口相关寄存器的定义拷贝过来*/
//注意,只需复制定义,不用复制条件编译
//GPIOF口相关寄存器的定义
	#define GPIOF_MODER    (*(volatile unsigned *)0x40021400) //端口x输入输出模式配置寄存器,控制位=00输入,=01通用输出,=10复用,=11模拟
	#define GPIOF_OTYPER    (*(volatile unsigned *)0x40021404) //端口输出类型配置寄存器。=0推挽输出,=1开漏输出
	#define GPIOF_OSPEEDR    (*(volatile unsigned *)0x40021408) //端口x输出速度配置寄存器。=00,2MHz;=01,25M;=10,50M;=11,30pF时为100M.
	#define GPIOF_PUPDR    (*(volatile unsigned *)0x4002140C)  //端口上拉下拉配置寄存器。=00无上下拉,=01上拉,=10下拉,=11保留
	#define GPIOF_ODR    (*(volatile unsigned *)0x40021414) //端口输出数据寄存器,某位=0对应端口输出低电平,=1输出高电平。
	//时钟系统相关寄存器的定义
	#define RCC_CR  		  (*(volatile unsigned *)0x40023800)
	#define RCC_PLLCFGR    (*(volatile <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值