存储器映像:内存放在计算机内是没有地址一说的,只有当内存需要用来存储数据时,才需要给内存分配地址,其目的就是为了更好的管理数据。给内存分配地址的过程叫做存储器的映像。
STM32内部存储器的地址分配图:
寄存器:
首先要强调的是,寄存器的本质就是内存,通过控制寄存器可以实现对外设工作的控制。
寄存器的映射:寄存器其实也是一种特殊的存储器,给寄存器地址命名的过程就叫寄存器映射。
为什么会存在寄存器映射这种操作呢,是因为如果直接通过存储器的地址来操作寄存器的话需要反复的利用指针操作,这样的话操作麻烦且繁琐。通过寄存器映射的方式,可以减少对指针的操作,大大提高开发效率(但当然,直接通过地址对寄存器进行操作的方式也是行得通的)
STM32对外设地址的映射方式:外设地址=总线基地址+外设相对于总线基地址的偏移量+寄存器相对于总线基地址的偏移量(其实就是对一个地址,通过几次细分。变成一个易记的地址)具体的映射地址表,可以通过数据手册查询。
时钟树:时钟就相当于单片机的心脏,单片机的各个外设和功能都是通过时钟来提供统一信号谐调的。(在使用单片机的外设时,第一步要做的就是打开该外设的时钟)
HSE = 高速外部时钟(高速外部时钟用来作为系统时钟,因为外部晶振产生的时钟会更加稳定)
HSI = 高速内部时钟(高速内部时钟通过锁相环,最大能为系统提供的时钟也只有64mhz)
LSE = 低速外部时钟
LSI = 低速內部时钟
高速时钟主要是为了提供系统时钟,用于协调各个外设的功能实现。
低速时钟主要是用来实现RTC和IWDG等功能。
下图为STM32F103C8在CUBEMX中的时钟树配置图(详细的时钟树图在相应的数据手册内)
systick滴答定时器:是内核的一个特殊定时器,用来提供系统的定时服务。该定时器是一个24位的递减计数器,具有自动重装载值寄存器的功能。当计数器到达自动重装载值时,它会自动重新加载并开始新的计数周期。
滴答定时器的主要功能:包括实现简单的延时,生成定时中断以及进行精确定时和周期定时操作,此外滴答定时器还可以被用于其他目的,例如操作系统的时基(如FreeRTOS)或者软件看门狗等系统调度操作。在stm32中,滴答定时器通常以HCLK(AHB时钟)或HCLK/8作为运行时钟(滴答定时器的时钟来源)。
滴答定时器的工作原理