【望月追忆】带你入门STM32F0之二:SysTick时钟介绍
STMCU
9746 人阅读
|
3 人回复
|
2012-12-07
TA的每日心情 | 奋斗 2013-9-16 09:51 |
|---|
签到天数: 16 天 连续签到: 1 天 [LV.4]偶尔看看III
秀才
- 积分
- 312
|
前面提到了SysTick中断,这里详细说明一下STM32f051的时钟
清风的关于时钟配置的详细教程https://www.cirmall.com/bbs/thread-3298-1-1.html
我在这里简洁说明一下
1. startup_stm32f0xx.s中- Reset_Handler PROC
- EXPORT Reset_Handler [WE***]
- IMPORT __main
- IMPORT SystemInit
- LDR R0, =SystemInit
- BLX R0
- LDR R0, =__main
- BX R0
- ENDP
复制代码 也就是说,系统在RESET之后,总会执行 SystemInit 函数 ,然后再跳到 Main 函数。在 SystemInit 函数中,调用 SetSysClock 函数,详细的代码可以先不看,你只要知道,到Main函数的时候,系统的时钟设置成了48Mhz。
2.下面配置 SysTick 的代码,SystemCoreClock = 48Mhz, SysTick 你可以把它类似成51的定时器,1/SystemCoreClock就是每隔滴答的时间, SysTick_Config 函数给的数字,就是说每隔这么多次滴答中断一次。(SystemCoreClock / 1000 )*
(1/ SystemCoreClock ) =1ms。注意,一定要加while(1); 。- if (SysTick_Config(SystemCoreClock / 1000))
- {
- while(1);
- }
复制代码 通过以上分析,详细大家对STM32f051的时钟有了初步了解了,不要急,时钟这个东西可以慢慢理解,目前懂这一点,对于理解SysTick是够了。以后再根据使用的外围模块对时钟进行分析。
|
|
|
|
|
|
|
|
|
TA的每日心情 | 擦汗 2016-5-9 12:20 |
|---|
签到天数: 350 天 连续签到: 1 天 [LV.8]以坛为家I
状元
- 积分
- 3355
  
|
沙发
sugar-352625
发表于 2012-12-7 17:02:40
|
只看该作者
|
哦,原来STM32的M0跟STM32的M3有点不一样啊,M3的貌似在主函数中第一个函数是SystemInit()。这个是先SystemInit()才main()函数。学习了。 |
|
|
|
|
|
|
|
|
TA的每日心情 | 奋斗 2013-9-16 09:51 |
|---|
签到天数: 16 天 连续签到: 1 天 [LV.4]偶尔看看III
秀才
- 积分
- 312
|
板凳
upc_arm
发表于 2012-12-7 21:46:27
|
只看该作者
木木 发表于 2012-12-7 17:02 ![]()
哦,原来STM32的M0跟STM32的M3有点不一样啊,M3的貌似在主函数中第一个函数是SystemInit()。这个是先System ...
我刚才看了一下 实际上M3的 启动文件也有- ; Reset handler routine
- Reset_Handler PROC
- EXPORT Reset_Handler [WE***]
- IMPORT __main
- IMPORT SystemInit
- LDR R0, =SystemInit
- BLX R0
- LDR R0, =__main
- BX R0
- ENDP
复制代码 就是说 M3 的启动文件也是执行了 SystemInit 之后跳转到main函数,跟M0一样,你可以在main函数开头填一个SystemInit() 也可以不填,因为启动文件已经调用过了。 |
|
|
|
|
|
|
|
|
TA的每日心情 | 擦汗 2016-5-9 12:20 |
|---|
签到天数: 350 天 连续签到: 1 天 [LV.8]以坛为家I
状元
- 积分
- 3355
  
|
地板
sugar-352625
发表于 2012-12-7 22:49:27
|
只看该作者
upc_arm 发表于 2012-12-7 21:46 ![]()
我刚才看了一下 实际上M3的 启动文件也有就是说 M3 的启动文件也是执行了 SystemInit 之后跳转到main函 ...
哦,没有看启动文件,原来是这样啊。看来要去仔细看看,谢谢提醒 |
|
|
|
|
|
|
|
|