设置中断是对内核操作,故应该在内核系统文件中进行配置。
1.D:\KEIL软件\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc
2.还是上面的路径,复制以下代码:
#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
4 bits for subpriority */
#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
3 bits for subpriority */
#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
2 bits for subpriority */
#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
1 bits for subpriority */
#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
0 bits for subpriority */
3.找到我们需要用的函数。
a.打开Core_cm3.h文件,找到中断分组设置函数,复制到SYS.C。
b.找到中断使能函数,复制到SYS.C。
void NVIC_EnableIRQ(IRQn_Type IRQn);
c.找到中断优先级设置函数,复制到SYS.C。
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority);
d.找到返回中断优先级的函数,复制到SYS.C。
uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority);
结果如下:
4.在SYS.H中包含中断设置函数。并在USART.C中调用此头文件和需用的头文件。
5.在USART.C中使能相应的中断,并调用设置中断函数,设置中断线,抢占优先级,子优先级。
6.在USART.C中编写中断服务函数,中断服务函数不用在头文件中声明。