[嵌入式系统设计(基于STM32F4)][徐灵飞][习题解答] (4)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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中。