STM32F10x--C语言-1

复习51单片机:

寄存器映射:每个外设所对应的内存有个地址,通过关键字(例如sfr)实现寄存器映射,把地址取名字。

单片机有端口(51有4个),对应的地址0x80,0x90,0xA0,0xB0,通过

sfr P0 = 0x80; 
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;

 实现寄存器定义。编程时直接使用P0进行赋值,如:

P0 = 0xFE; /*51只有8 bits,0b11111110*/

STM32F103:

让某个GPIO端口的16引脚实现高/低电平输出(同时):

(端口)输出数据寄存器ODR(output data register),低16位有效,16个引脚都输出低电平需将低16位都设置成1即可。

自己的板卡连接指示灯的是GPIOE,在“总线架构”找到端口E地址范围: 0x40011800-0x40010FFE.

地址偏移:寄存器相对于总线基地址的偏移量,这里是0x4001180C。

(unsigned int *)的作用: 强制类型转换

GPIOE_ODR的地址是0x4001180C,编译器不认为其是一个地址,因此需要用

(unsigned int *)0x4001180C;

对0x4001180C进行强制类型转换。

“*”的作用:对地址进行指针操作。即:

*(unsigned int*)0x4001180C; 

以上是最基础繁琐的实现方式,可以用宏定义进行优化。即用#define对地址(unsigned int *)0x4001180C定义成宏,语句:

#define GPIOE_ODR (unsigned int*)0x4001180C; 

 再对宏进行指针操作并赋值,语句:

* GPIOE_ODR = 0xFF;

可将上句前面的*号移到宏定义语句中,即:

#define GPIOE_ODR *(unsigned int*)0x4001180C; 

直接赋值:

GPIOE_ODR = 0xFF;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值