从目前了解的看,STM32的操作其实就是对内部存储器的操作,寄存器是映射到存储器地址空间上的。 但这些存储器地址可不像普通内存空间一样可以按照自己的需要来操作,它需要遵循硬件特性,先操作哪个再操作哪个。 首先需要了解的是存储器地址映射。7 T) U3 P% @3 j" P. {9 Y9 z STM32自然是32位机,存储器可寻址空间为4GB,即0x0000,0000~0xFFFF,FFFF。) j' |) E8 T* Q; d9 g" t8 B 这里有个通常所说的1024问题,其实这是为了在数字上好用16进制来表示才规定的,说是规定不如说是约定俗成。1k=1024,表示成16进制刚好是0x400,如果1k=1000表示成16进制就是0x3E8,那么2k=0x7D0就不如表示成1024时2k=0x800好表示:2k=2*0x400=0x800。看,刚好是400的2倍。2 _" `8 H6 b }5 H 这些地址空间被粗略地分成了8个块,每块512MB,其中第0、1、2块最重要。 block0:是内部Flash,用于储存用户程序代码和其他必须的工厂代码。可是芯片并非全提供这么多的实体Flash给我们用,比如精英版的STM32F103ZET只有512kB可以用来编程就已经是大容量了。第0块大量的是预留空间,其实是为了将来芯片升级不用再重新设计才预留的,预留就是在该芯片上不提供的意思。 block1:是内部SRAM,也就是我们说的内存,易失性。这512M也只有部分可用,精英版的STM32F103ZET是64kB。片上内存总是很贵的。 block2:是以后学习的重灾区了,片上外设映射到此。 片上外设分两种:低速和高速。低速外设用到APB1总线,或者说APB1就是低速外设,映射到存储器地址是:0x4000,000~0x4000,77FF.) d k* S* J" [6 I' c8 |/ u 高速外设又分两种:APB2和AHB总线。APB2映射地址为:0x4001,000~0x4001,3FFF。AHB地址为:0学4002,000~0x5003,FFFF。看来是AHB总线的地址范围大。 block2的512MB也没有全部提供使用,使用到的空间也不是全都连续。功能不同的总线间有预留空间。 ------------------------ 为什么是总线映射而不是直接寄存器映射呢?寄存器是设备的控制单元,而设备是挂载在总线上的,无论是外设还是核内设备都如此。总线天然地有地址,这对于有一点点51常识的我来说还是比较好理解的。 6 V; x0 H* M& _) L 可以这么理解:总线上的设备和存储器(Flash/SRAM)是统一编址的。 ysTick是内核定时器,有4个相关寄存器,LOAD和VAL是24位寄存器,一直认为STM32的寄存器都是32位的,这下毁三观了。) j, z& t r: W: J 我在M3权威指南和中文参考里面都没有发现这四个寄存器中CTRL和CALIB的具体定义,只看到CTRL中16、2、1、0位的定义,其他位没有说明,怎么回事儿呀?8 X4 D9 Y# a+ O8 X, Z 再看misc.c中的SysTick定时器初始化函数SysTick_CLKSourceConfig(),传入的是宏常量,关于是配置外部HCLK的还是内部HCLK作为SysTick时钟源,宏定义是:- \! p0 o4 `' q( v1 d [mw_shl_code=c,true]#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB) #define SysTick_CLKSource_HCLK ((uint32_t)0x00000004)[/mw_shl_code]: S i- G0 s1 t% }7 h SysTick_CLKSourceConfig()里面直接用这个宏来赋值CTRL寄存器,其中如果是内部HCLK做源第2位为1,则使用“或”,这个好理解,就是把CTRL的第2位赋值为传入的参数。如果是外部HCLK则使用“与”:
外部HCLK值做源为0xFFFFFFFB,低4位B是二进制1011,第2位是0,采用AHB的8分频。第2位&也容易理解。) O, ?! `) _3 m! w, P. A% O! @( D 第0位第1位是1,使能SysTick定时器和定时到产生中断。“与”1就是不用管,不产生影响了。 所以,如果以后要使某位置1则data中的某位为1其他位0,然后或。) r/ x5 ~% s( }: R8 o/ L 如果要使某位置0则data中某位为0其他位为1,然后与。 ———————————————— 版权声明:被大佬糊弄的只会点灯的小菜鸡 如有侵权请联系删除 1 J4 y' t! J6 Y9 j) K |
小马哥STM32F103开源小四轴RoboFly全部资料大放送
STM32固件库分享,超全系列整理
定时器剩余通道是否可以做PWM输出呢?
【MCU实战经验】+STM32F107的USB使用
基于STM32F103两轮平衡小车设计(开源)
基于STM32双定时器+ADC+DMA实战经验分享
基于STM32的定时器触发ADC时可能遇到的情形
STM32F107VCT6官方原理图和PCB
【福利】用STM32库的朋友有福了:STM32F10x_StdPeriph_Lib_V3.5.0chm...
【NUCLEO-U545RE-Q评测】5. 基本计时器