STM32(1)

来源:互联网 发布:淘宝图书讲谈社 编辑:程序博客网 时间:2024/05/22 06:54

现在利用空余时间学习下STM32

最小系统STM32F10X

电源,时钟电路,复位电路,下载电路
电源:
AMS1117,电压变换,直接接主板的地,方便散热,5V转3.3V
复位电路:stm32低电平复位
时钟电路:三个时钟提供,
1.内部时钟(8MRC时钟)
2.锁相环
3.外部晶振(4-16M)
STM32最大可用72M时钟
SW选择时钟
时钟寄存器第0,1为SW位00为内部系统时钟,01为外部时钟,10为锁相环,11不可用
锁相环:倍频,时钟寄存器16位,置0为选择内部时钟,1为选择外部时钟;18到21位为倍频选择最大可达16倍频输出
外部时钟:
通过AHB分频器分频,可选择为1,2,4,8,16,64,128,512分频
分频器输出的时钟送给5大模块使用:
1.送给AHB总线、内核、内存和DNA使用的HCLK时钟
2.通过8分频后送给Cortex系统定时器时钟
3.直接送给Cortex空闲运行时钟FCLK
4.送给APB1分频器
5.送给APB2分频器

系统时钟初始化函数
其实也就是根据数据手册设置参数,但需要注意的一点是配置分频器时需要从最后一级分频器往前级分频器配置,若是先配置最先一级的分频器出错的话,在最后一级分频器得到的频率就不能确定。
1.先打开外部振荡器
2.确定振荡器工作
3.配置APB1
3.配置锁相环的值
4.选择外部时钟作为锁相环的值
5.延时
6.选择锁相环为系统时钟
7.等待配置成功

系统时钟初始化程序视频截图


延时函数的实现
软件延时:运行空指令,简单,不占用定时器资源,但缺点执行不稳定,时间精确度不高,占用CPU时间
STM32内置定时器:SysTick定时器
需要注意的是因为LOAD只是一个24bit的寄存器,延时ms数不能过长。否则超出了LOAD的范围,高位会被舍去,导致延时不准。最大延时ms数计算公式:
nms<=0xffffff*8*1000/SYSCLK
SYSCLK单位为HZ,nms单位为ms。若时钟为72MHZ,则nms最大值为1864ms,超过这个值后会导致延时不准确


延时函数视频截图