2019-07-20 23:02发布
下页 发表于 2019-7-5 14:28 MY_NVIC_Init(1,3,TIM3_IRQn,2); 抢占 1 ,子优先级 3 ,组 2
1599064432 发表于 2019-7-5 17:00 很明显这是个函数啊,去看看你在哪定义的
最多设置5个标签!
很明显这是个函数啊,去看看你在哪定义的
RCC -->APB1ENR|=1<< //TIM3 时钟使能
TIM3 -->ARR=arr; 设定计数器自动重装值
TIM3 -->PSC=psc; 预分频器
TIM3 -->DIER|=1<<0; 允许更新中断
TIM3 -->CR1|=0x01; 使能定时器 3
MY_NVIC_Init(1,3,TIM3_IRQn,2); 抢占 1 ,子优先级 3 ,组 2
看了,用寄存器去配置中断那么麻烦的吗
复制代码
1 //设置向量表偏移地址
2 //NVIC_VectTab:基址
3 //Offset:偏移量
4 void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)
5 {
6 SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器
7 //用于标识向量表是在CODE区还是在RAM区
8 }
9 //设置NVIC分组
10 //NVIC_Group:NVIC分组 0~4 总共5组
11 void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
12 {
13 u32 temp,temp1;
14 temp1=(~NVIC_Group)&0x07;//取后三位
15 temp1<<=8;
16 temp=SCB->AIRCR; //读取先前的设置
17 temp&=0X0000F8FF; //清空先前分组
18 temp|=0X05FA0000; //写入钥匙
19 temp|=temp1;
20 SCB->AIRCR=temp; //设置分组
21 }
22 //设置NVIC
23 //NVIC_PreemptionPriority:抢占优先级
24 //NVIC_SubPriority :响应优先级
25 //NVIC_Channel :中断编号
26 //NVIC_Group :中断分组 0~4
27 //注意优先级不能超过设定的组的范围!否则会有意想不到的错误
28 //组划分:
29 //组0:0位抢占优先级,4位响应优先级
30 //组1:1位抢占优先级,3位响应优先级
31 //组2:2位抢占优先级,2位响应优先级
32 //组3:3位抢占优先级,1位响应优先级
33 //组4:4位抢占优先级,0位响应优先级
34 //NVIC_SubPriority和NVIC_PreemptionPriority的原则是,数值越小,越优先
35 void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
36 {
37 u32 temp;
38 MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
39 temp=NVIC_PreemptionPriority<<(4-NVIC_Group);
40 temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
41 temp&=0xf;//取低四位
42 NVIC->ISER[NVIC_Channel/32]|=(1<<NVIC_Channel%32);//使能中断位(要清除的话,相反操作就OK)
43 NVIC->IP[NVIC_Channel]|=temp<<4;//设置响应优先级和抢断优先级
44 }
一周热门 更多>