基础程序的设计(百问网7天物联网智能家居笔记2)

本文详细介绍了STM32处理器在启动时如何调用__main函数,以及在main函数之前进行的系统初始化步骤,包括SystemInit和HAL_Init函数的作用。SystemInit主要配置系统时钟,而HAL_Init则涉及中断组别设置、Flash预缓冲区启用等。中断系统中,STM32裁剪了Cortex-M3的中断级别,并讨论了内核滴答定时器的配置和其在系统中的作用。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.移植ST官方软件包

__main

● 为什么要有一个main函数?
○ 从stm32f103的启动代码分析: 在这里插入图片描述 ■ 这段汇编代码表达的意思是,当启动文件的代码执行到这一段的时候,会首先调用外部函数SystemInit , 然后再去调用__main 。 这个【__main】是C库中的函数,C库手册对其的解释是: 在这里插入图片描述
■ 在第三条,跳转到【_rt_entry】 , 这个函数也是C库中的,它的解释是:
在这里插入图片描述
● main函数之前都做了什么动作:( 也就是说处理器从上电启动开始 )
○ 第一步是注册中断向量表,第二部是调用SystemInit这个函数,第三步是调用【__main】函数
○ 而在【__main】函数中又对RO/RW/ZI段做了初始化,之后跳转到C库函数__rt_entry
○ 在__rt_entry函数中初始化堆栈、rt库初始化之后再调用了main函数

SystemInit

● 调用__main函数之前的另一个函数SystemInit是在官方软件包中的"system_stm32f1xx.c"里面定义实现的.

2. HAL 库的初始化

HAL_Init

● 对于ST处理器,且使用ST的HAL库的情况下,我们在main函数中必须要做的一件事情是初始化HAL库,即调用HAL_Init函数,这个函数中,做的事情是:
○ 1、使能内部Flash的预缓冲区;
○ 2、设置内核的中断组别;
○ 3、配置内核的滴答定时器;
○ 4、初始化处理器的系统时钟、总线时钟和外设时钟
■ 不初始化配置这些时钟的话,那么默认情况下ST处理器都是使用的内部时钟 ( 即CPU时钟是内部高速时钟HSI的值,低速时钟是LSI )
○ 5、设置 Flash 的等待周期
在这里插入图片描述

中断

● 《STM32F10xx Cortex-M3编程手册》则是根据《Cortex-M3权威指南》的内容进行了节选和说明,用以适用STM32F10系列的处理器
● 《STM32F10xx Cortex-M3编程手册》2.3.6章和4.4.5章
○ ST 将cortex-m3内核支持的128级中断裁剪成了只支持最高15级的中断
在这里插入图片描述

内核滴答定时器

● 内核的滴答定时器是一个24位的向下计数器,当它从预设值计数到0时,如果使能了中断,就会触发中断,然后再下一个时钟周期重载预设值,然后继续向下计数。
● 可以通过编程修改这个滴答定时器的计数频率
○ HAL_Init中默认是设置位1kHz,且其中断优先级数值位15,即是一个最低中断等级的中断,这意味着这个定时器的中断极易被别的外设中断打断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值