OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2807|回复: 14

有大神能讲解这句代码吗?能否配置成寄存器那样,MY_NVIC_Init(1,3,TIM3_IRQn,2);

[复制链接]

2

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-28
在线时间
9 小时
发表于 2019-7-5 14:18:39 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-7-5 14:18:40 | 显示全部楼层
下页 发表于 2019-7-5 14:28
MY_NVIC_Init(1,3,TIM3_IRQn,2); 抢占 1 ,子优先级 3 ,组 2

很明显这是个函数啊,去看看你在哪定义的
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-28
在线时间
9 小时
 楼主| 发表于 2019-7-5 14:24:05 | 显示全部楼层
void TIM3_Int_Init(u16 arr,u16 psc)
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
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-28
在线时间
9 小时
 楼主| 发表于 2019-7-5 14:28:15 | 显示全部楼层
MY_NVIC_Init(1,3,TIM3_IRQn,2); 抢占 1 ,子优先级 3 ,组 2


我不懂这段是怎么来的,求大神指教
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-7-5 17:00:11 | 显示全部楼层
下页 发表于 2019-7-5 14:28
MY_NVIC_Init(1,3,TIM3_IRQn,2); 抢占 1 ,子优先级 3 ,组 2

go to definition
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-28
在线时间
9 小时
 楼主| 发表于 2019-7-6 16:51:44 | 显示全部楼层
1599064432 发表于 2019-7-5 17:00
很明显这是个函数啊,去看看你在哪定义的

看了,用寄存器去配置中断那么麻烦的吗
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-28
在线时间
9 小时
 楼主| 发表于 2019-7-6 16:53:06 | 显示全部楼层
关于void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group) 函数

复制代码
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 }
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-7-6 16:53:27 | 显示全部楼层
下页 发表于 2019-7-6 16:51
看了,用寄存器去配置中断那么麻烦的吗

寄存器我不怎么用,一般都是用固件库,库函数易懂.
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4519
金钱
4519
注册时间
2018-5-11
在线时间
946 小时
发表于 2019-7-7 10:25:12 | 显示全部楼层
参考一下我这个帖子里模板例程里的同名函数
http://www.openedv.com/forum.php?mod=viewthread&tid=294788
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4519
金钱
4519
注册时间
2018-5-11
在线时间
946 小时
发表于 2019-7-7 10:26:37 | 显示全部楼层
如果不懂中断系统的配置的话,
可以看一下我的这个帖子http://www.openedv.com/forum.php?mod=viewthread&tid=275496
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-28
在线时间
9 小时
 楼主| 发表于 2019-7-8 15:43:29 | 显示全部楼层
STM32F030Cxxx 没有SCB->VTOR,如何重定位向量表
回复

使用道具 举报

10

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
623
金钱
623
注册时间
2019-6-3
在线时间
107 小时
发表于 2019-7-8 16:33:26 | 显示全部楼层
用寄存器,很麻烦的。用标注库比较方便
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4519
金钱
4519
注册时间
2018-5-11
在线时间
946 小时
发表于 2019-7-8 19:52:14 | 显示全部楼层
下页 发表于 2019-7-8 15:43
STM32F030Cxxx 没有SCB->VTOR,如何重定位向量表

向量表并非都是需要重定位的,
用复位值就可以。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
发表于 2019-7-8 20:29:38 | 显示全部楼层
可以的
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-28
在线时间
9 小时
 楼主| 发表于 2019-7-9 08:54:20 | 显示全部楼层
warship 发表于 2019-7-8 19:52
向量表并非都是需要重定位的,
用复位值就可以。

大神指导f0系列用寄存器如何配置中断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 19:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表