stm32f4xx_it.c
5.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*
*********************************************************************************************************
*
* 模块名称 : 中断模块
* 文件名称 : stm32f4xxx_it.c
* 版 本 : V1.1
* 说 明 : 本文件存放中断服务函数。
*
* 我们只需要添加需要的中断函数即可。一般中断函数名是固定的,除非您修改了启动文件中的函数名
* \Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f4xx.s
*
* 启动文件是汇编语言文件,定了每个中断的服务函数,这些函数使用了WEAK 关键字,表示弱定义,因此如
* 果我们在c文件中重定义了该服务函数(必须和它同名),那么启动文件的中断函数将自动无效。这也就
* 函数重定义的概念。
*
* 为了加强模块化,我们建议将中断服务程序分散到对应的驱动模块文件中。比如systick中断服务程序
* 放在 bsp_timer.c 文件中。
*
* 修改记录 :
* 版本号 日期 作者 说明
* v1.0 2013-02-01 armfly 首版
* v1.0 2013-06-20 armfly 在硬件异常中断服务程序中增加打印错误信息的功能。
*
* Copyright (C), 2013-2014, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/
#include <includes.h>
#define ERR_INFO "\r\nEnter HardFault_Handler, System Halt.\r\n"
/*
*********************************************************************************************************
* Cortex-M3 内核异常中断服务程序
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 函 数 名: NMI_Handler
* 功能说明: 不可屏蔽中断服务程序。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void NMI_Handler(void)
{
}
/*
*********************************************************************************************************
* 函 数 名: HardFault_Handler
* 功能说明: 硬件故障中断服务程序。其他异常处理被关闭,而又发生了异常,则触发。
* 执行异常处理时,发生了异常,则触发。复位时默认使能。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void HardFault_Handler(void)
{
#if 1
const char *pError = ERR_INFO;
uint8_t i;
for (i = 0; i < sizeof(ERR_INFO); i++)
{
USART1->DR = pError[i];
/* 等待发送结束 */
while ((USART1->SR & USART_FLAG_TC) == (uint16_t)RESET);
}
#endif
/* 当硬件失效异常发生时进入死循环 */
while (1)
{
static u8 Count = 0;
WWDG_SetCounter(0x7f); //重设窗口看门狗值
WWDG_ClearFlag(); //清除提前唤醒中断标志位
Count += 1;
if(Count > 1)return;
USART_ITConfig(USART6, USART_IT_RXNE, DISABLE);
USART_ITConfig(USART6, USART_IT_TXE, DISABLE);
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
USART_ITConfig(USART3, USART_IT_RXNE, DISABLE);
USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
NVIC_SystemReset();
}
}
/*
*********************************************************************************************************
* 函 数 名: MemManage_Handler
* 功能说明: 内存管理异常中断服务程序。违反MPU设定的存储器访问规则时触发。 复位时默认未使能
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void MemManage_Handler(void)
{
/* 当内存管理异常发生时进入死循环 */
while (1)
{
}
}
/*
*********************************************************************************************************
* 函 数 名: BusFault_Handler
* 功能说明: 总线访问异常中断服务程序。取指令、数据读写、堆栈操作出现异常。 复位时默认未使能
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void BusFault_Handler(void)
{
/* 当总线异常时进入死循环 */
while (1)
{
}
}
/*
*********************************************************************************************************
* 函 数 名: UsageFault_Handler
* 功能说明: 用法错误中断服务程序。执行未定义指令、非对齐操作、除零时触发。 复位时默认未使能
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void UsageFault_Handler(void)
{
/* 当用法异常时进入死循环 */
while (1)
{
}
}
/*
*********************************************************************************************************
* 函 数 名: SVC_Handler
* 功能说明: 通过SWI指令的系统服务调用中断服务程序。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void SVC_Handler(void)
{
}
/*
*********************************************************************************************************
* 函 数 名: DebugMon_Handler
* 功能说明: 调试监视器中断服务程序。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void DebugMon_Handler(void)
{
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/