Cortex-M3内核架构(常回家看看简单的底层)

       说明:此博客用来记录学习过程,防止遗忘。

         STM32F1系列属于Cortex-M3系列是ARMv7架构,ARMv7应用十分广泛,A系列,B系列,C系列Cortex-M0-M1-M3-M4(32位的处理器)。中断控制器嵌在内核之中,中断之前的间隔最少可以达到6个CPU周期(唤醒只需要6个CPU周期)

改进的调试功能:单步调试和JTAG调试

Cortex-M3内核架构(常回家看看简单的底层)_第1张图片

简单架构图

1.ARM公司设计的是内核和调试系统,其他芯片开发厂商设计外设等ST公司设计的。

ST家族怎么区分命名,Flash,RAM容量,引脚数量和外设的区别。

STM32命名规则

Cortex-M3内核架构(常回家看看简单的底层)_第2张图片

 STM32基于ARM的32位控制器,F通用类型,103增强型,C就是48脚,8就是闪存存储器容量64k,T就是封装LQFP,6就是温度范围。----STM32F103C8T6

F1各系列全面兼容引脚标号一样的话可以完全兼容

时钟:高达72M实际上可以超频一点点,单周期乘法和硬件除法

调试SWD和JATG,SWD只需要二根线

外部晶振一般是8M,经过内部锁相环(PLL,倍频)处理后达到72Mhz,一般系统时钟都是外部或者内部高速时钟经过PLL倍频得到。

内部还有8MhzRC振荡器(外部的挂掉了切换成内部)一般没用

内部40Khz低速RC振荡器,看门狗时钟

外部低速32.768k的晶振,做RTC时钟源

低功耗-睡眠-停止-待机

可用电池为RTC和备份寄存器供电

主要的外设(其他的很了解了)

DMA:直接存储器访问,为CPU减负,高速的数据采集用到了DMA,(DMA1,DMA2)一共12个通道可以连接到外设上,ADC,DAC,SDIO,SPI,USART等。

通信接口:I2C,CAN2.0,USB FS,SDIO等

芯片的内部结构(简诉)

Cortex-M3内核架构(常回家看看简单的底层)_第3张图片

芯片内部结构图

内核通过总线矩阵连接Flash-512k,SRAM-64k,然后通过AHB系统总线连接APB1和APB2。FSMC连接到总线矩阵,SDIO连接到AHB系统总线,AHB连接到总线矩阵,APB2连接到左边高速的外设(GPIO,ADC等),APB1连接到右边低速的外设(定时器,I2C等)。复位和时钟控制(RCC)通过AHB系统总线连接到总线矩阵。

串口下载程序:一定对应的是串口1(PA9,PA10)因为固化的程序只支持这个串口。

STM32的启动模式

Cortex-M3内核架构(常回家看看简单的底层)_第4张图片

 主闪存存储器--执行片上Flash的代码,我们使用JTAG和SWD模式下载程序时,就是下载到里面的,重启后也是从这里启动程序。SWD和JTAG的区别,SWD更加可靠需要的下载接口要少一些。

系统储存器--通过串口下载,就是外部接收串口通过PA9,PA10肯定有一段接收数据的程序就是在系统储存器中。芯片在出厂预置了一段bootloader,就是ISP程序,这个区域的内容在芯片出厂后没人可以修改或擦除,它是一个ROM区,通过串口下载成功后又需要将BOOT0置0,按下复位才能正常启动程序。

内置SRAM--执行内置SRAM为启动区域

对MCU,一切底层配置,最终都是配置寄存器。Cortex-M3内核架构(常回家看看简单的底层)_第5张图片

                                                           GPIOA的外设基地址图

51中-sfr P0 = 0X80 P0映射到地址0x80---P0=0X00,寄存器地址0x80赋值0x00

GPIOA->ODR=0x0000 0000这种写法是怎么和GPIOA的ODR寄存器地址映射起来的?

GPIOA基地址是某个值(它下面的寄存器就是以这个基地址为开头加上它们的偏移)

假设GPIOA下有个ODR寄存器,那么ODR的值就是GPIOA基地址+ODR寄存器的偏移值

GPIOA的偏移值怎么来的,它挂载在APB2总线下GPIOA的地址就是APB2的地址加上GPIOA的偏移地址(都是常量),APB2是根据外设基地址+APB2的偏移值。

Cortex-M3内核架构(常回家看看简单的底层)_第6张图片

 时钟系统框图

5个蓝色小块是时钟来源-系统时钟,外设时钟全部来自于这5个时钟源。

HSI RC高速内部时钟--是内置的RC振荡器产生(产生8Mhz是不太准确的),可以作为系统时钟的选择,还可以二分频后作为选择器2的输入

HSE Osc高速的外部时钟--经过选择器1(可以作为系统时钟的时钟源,直接作为选择器1的输入,或者经过二分频作为选择器1的输入)经过选择器2(作为PLL时钟输入)PLL-锁相环(倍频器-把一个评率*系数2-16倍)。CSS-当外部晶振坏掉了,就会切换成内部由RC产生的时钟

LSE Osc低速的外部时钟32.768hz,给RTC时钟输入用。RTC的时钟来源可以是(LSE,HSE的128分频,LSI)

LSI RC低速的内部时钟RC振荡器产生约等于40khz,主要作用给独立看门时钟输入。

MCO输出内部时钟的引脚PA8,可以输出相关的内部时钟(来自SYSCLK,HSI,SHE,PLL的二分频)。

USBCLK 48Mhz时钟来源,来自PLL经过一个分频器(预分频二种选择/1和/1.5),一般来自PLL的是72MHZ,但是USB是48Mhz所以/1.5。

SYSCLK经过一个AHB预分频器(AHB是总线,分频可以是1,2,4,8,16,64,128,256,512),分频后产生一个HCLK时钟(这个时钟最高是72Mhz),经过一个APB1预分频器(APB预分频因子有5种选择分别是1,2,4,8,16)产生一个PCLK1最高36Mhz的时钟(它下面挂了外设例如:TIM2,3等),还可以经过APB2预分频器,产生PCLK2最高72Mhz(高速的外设总线时钟TIM1等)

APB1和APB2下挂载了很多外设,

2022.3.25记。(这只是一个卑微大学生的笔记)

你可能感兴趣的:(单片机)