嵌入式软件--stm32 DAY 8.5 基础复习总结
1.时钟树
在数据手册里面,有一张密密麻麻的图,正是时钟系统里的时钟树。
对于时钟,我们注意有两点。一个是系统时钟SYSCLK,一个是依赖外部晶振生成的RTC.
RTC以外部低速晶振作为时钟源或者外部高速晶振128分频后作为时钟源,又或者以内部低速时钟,三选一。我们一般用外部低速晶振。
我们的开发板一般会接两个外部晶振,一高速一低速。
系统时钟也是三选一,内部高速时钟,外部高速时钟和PLLCLK。
PLL:8MHZ外部高速晶振不分频走入PLLSRC,然后倍频(九倍频)作为系统时钟。
虽然有内部,但一般我们都会选择外部晶振,因为内部时钟稳定性不高。但在最先启动单片机上外部晶振时,会有一段起振时间,先得启动内部时钟,二分频后接入PLLSRC.
这几种路径都是为了得到系统总线时钟AHB,也叫高速系统总线,到了AHB这里就不分频了,就是最大72MHZ。
Cortex系统时钟默认8分频,也就是9Mhz,他其实就是SYSTICK系统时钟(系统滴答定时器)。
在连接外设的时候,会有APB1/APB2这样的桥接。APB1前面时72MHZ的AHB,在这里必须至少要二分频。因为APB1他的最大时钟频率36Mhz。
这张图是芯片的总线架构,很清楚的张列了挂载在系统总线上的外设。同一类外设也会挂载在不同速度的总线上,比如USART1,波特率115200.
比如I2C1 I2C2是低速总线,挂在APB1上。
2.调试口
最简易的调试口,除了SWD引脚外,就只有供电和接地引脚。只满足程序烧写功能。
我们用的STink调试口,则包含了串口输出和输入。8针排座,可以串口转USB。
SWD仿真引脚,也是一跟数据线,一根时钟线,和I2C线很像,但I2C是半双工,SWD引脚烧写是单向传输的,不可能反过来烧录程序。
我们基本用老套方式开发,寄存器写法和调取HAL库。
3.点灯
这是我们开发32的最基本的工程,里面用到的就是GPIO。
复用功能,是来自片上外设,GPIO内部集成了这种外设,就能被复用。
每个gpio拥有的模块功能可以选择,但不能改变,这是提前设计好的。
4.USART外设
异步通信 一根线收发全双工交换数据
串口与IIC不同
5.IIC协议
串行同步半双工,SDA SCL双线设备,开漏模式往往外接上拉电阻保证电平能起来。
IIC最重要的就是时序。
读字节时有假写真读的过程。
无论写还是读,都要主设备想从设备发送一个要指定访问的内部寄存器地址。