STM32编程思维

  单片机编程,想象你是CPU,你面对的,是内存,你要操作的对象,就是内存。

Cpu和内存

  内存就像是一排一排的按键,每个按键有按下去和弹起来两种状态,按下去相当于1,弹起来相当于0,Cpu,就是操作这些按键的你,同时,也可以读按键的状态。
  按键是每8个分成一组,每次操作必须整组操作,一个按键称为1Bit,一组按键称为1Byte。
  Cpu分为8位的,16位的,32位的,8位表示它一次只能操作一组按钮,1Byte,16位表示一次可以操作两组按钮,2Byte,Stm32的Cpu是32位的,可以一次性操作4Byte,也就是32Bit。

C语言符号和操作

  1. *(addr) 寻址

  Cpu定位每一组按钮的方式是寻址,就是根据地址找到它,地址是一个整数,也就是这一组按钮的编号。

*(0x20002000) //表示找到位于0x20002000地址的那组按钮
  1. (unsigned char)、(unsigned short)、(unsigned int)强制类型转换

  数据类型,就是对内存的包装,把几组连续的按键包装起来,当成一组不一样的按钮。
  强制类型转换,可以理解为这个包装。

(unsigned int)*(0x20002000)

  表示先找到位于0x20002000那组按钮,然后把这组按钮连同它后面的三组按钮一起包装,作为一个32Bit的无符号整型。

  1. = 赋值

  相当于动手操作按钮。

(unsigned int)*(0x20002000)=3;

  3就是2进制11,把它扩展到32位:

00000000 00000000 00000000 00000011

  每一位对应一个按钮,每一组对应一组按钮,相当于前三组按钮都弹起来,后一组的最后两个按下去。

  1. = 读取

  获取按钮的状态。

int a;
a=(unsigned int)*(0x20002000);

  先准备一个容器a,找到位于0x20002000的那组按键,把它连同它后面3组按钮一起包装为一个无符号整形,然后获取它的状态,存放到容器a里面。

Stm32内存结构

Stm32L476
  这是Stm32L476的内存图,先简单介绍三个部分:

  1. 0x20000000到0x40000000,SRAM1。

  就是最常用的内存,做计算,临时储存这些都是在这块区域,而且经常是编译器分配的,不需要自己指定。

int a;

  这句会划定一小块内存,包装为一个int类型,它的位置是编译器分配的,不过可以基本确定它位于SRAM范围内。

  1. 0x40000000到0x60000000,是外设区域。

  GPIO、USART、ADC、TIMER这些都是外设,操作外设,其实就是操作外设对应的内存,也就是前面比喻的那些按键。
  也就是说,操作外设,就是,读或写,这一段内存区域,具体哪个地址对应哪个外设,可以从寄存器手册查到。
USART_CR2
  这张图片是串口的一个寄存器,参考手册里会说明每一个Bit的作用。

  1. 0x60000000以后,是扩展地址。

  也就是暂时没有实际的内存,只有个地址,需要芯片外面加东西才有的,可以灵活组合的。比如,可以加一块SDRAM,就成了扩展内存。

寄存器手册的使用

  获取寄存器手册可以去官网,搜关键字ST,进官网。
1
2

  这个手册是用来查找的,不是用来顺着看的,请翻到目录:
3

  找到自己需要操作的外设,对照手册编程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值