[嵌入式系统设计(基于STM32F4)][徐灵飞][习题解答] (4)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《嵌入式系统设计(基于STM32F429)》

第4章课后题参考答案

1.尝试分析一下STM32F4系列微控制器从复位到main()启动过程。

答:

复位后。

(1)从存储空间0x00000000处去除栈顶指针到MSP。

(2)从存储空间0x00000004出读取复位终端服务程序入口地址到PC。

(3)执行SystemInit函数,初始化系统时钟和外部存储器接口。

(4)执行__main函数,完成堆栈区域初始化。

(5)点转到main()函数,执行应用程序(C代码)

2.请写出复位异常向量、SVC异常向量和SysTick向量地址。

答:

复位异常向量地址:0x00000004

SVC异常向量地址:0x0000002C

SysTick向量地址:0x0000003C

3.请写出启动文件中定义的SysTick、外部中断0和USART1中断的中断服务函数名。

答:

SysTick中断服务函数名:SysTick_Handler

外部中断0中断服务函数名:EXTI0_IRQHandler

USART1中断的中断服务函数名:USART1_IRQHandler

4.请编写中断EXTI0_IRQHandler的中断服务程序,使用C程序实现,只需要空函数。

答:

void EXTI0_IRQHandler (void)

{}

5.尝试说明在发生EXTI0_IRQHandler中断时,内核响应的过程。

答:

(1)处理器在当前堆栈上把程序状态寄存器、程序计数寄存器、链接寄存器、R12、R3~R0八个寄存器自动依次入栈。

(2)读取向量表中的EXTI0服务程序入口地址(EXTI0_IRQHandler)。

(3)根据向量表更新程序计数寄存器的值(EXTI0服务程序入口地址->PC)。

(4)加载新程序计数寄存器处的指令(步骤(2)~步骤(4)与步骤(1)同时进行)。(开始执行中断服务程序)

(5)更新链接寄存器为EXC_RETURN(EXC_RETURN表示退出异常后返回的模式及使用的堆栈)。

6.如何配置1 s的SysTick系统定时函数?

答:

if (SysTick_Config(SystemCoreClock/1000000))

{

/*SystemCoreClock/1000000超出计数最大值时报错,程序陷入空循环*/

while (1);

}

说明:SysTick_Config函数在文件core_cm4.h中。

相关文档
最新文档