关于启动文件startup_stm32f10x_hd.s
是一个启动文件,用汇编语言写的基本程序。汇编指令是 Cortex-M3 内核支持的指令,参考《Cortex-M3指南》内指令集章节。
版本:startup_stm32f10x_md.s,startup_stm32f10x_cl.s,startup_stm32f10x_hd.s。芯片型号以及不同编译环境选择使用。
作用:当STM32 芯片上电启动的时候,先执行这里的汇编程序,建立起来C 语言的运行环境,所以称为启动文件。
来源和使用:该文件在KEIL安装目录中,也可以从ST库里面找到,添加到工程里面即可。
该程序启动过程主要功能如下:
- 初始化堆栈指针 SP
- 初始化程序计数器指针 PC
- 设置堆、栈的大小
- 设置中断向量表的入口地址
- 配置外部 SRAM 作为数据存储器
- 调用 SystemInit() 函数配置 STM32 的系统时钟
- 设置 C 库的分支入口 "__main” (最终用来调用 main 函数)
通过一个实例了解启动文件和中断服务程序的关系:
说明:用外部中断方式检测按键
1、在里stm32f10x_it.c添加一段代码,可称为中断服务函数,或中断处理函数。
void EXTI15_10_IRQHandler(void) // 外部中断,对应于启动文件的“EXPORT EXTI15_10_IRQHandler [WEAK]”
{
if(EXTI_GetITStatus(EXTI_Line15) != RESET) //检测是否触发对应的中断
{
delay_ms(10);
LED0 = !LED0;//按键触发,灯的状态翻转
}
EXTI_ClearITPendingBit(EXTI_Line15);//清除中断标志
}
2、 Key.c文件
void Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //GPIOA时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //复用功能时钟打