OpenEdv-开源电子网

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

F407开发板,第九章“串口通信实验的中断”与第十章“外部中断实验”关于中断,2章为什么初始化不一样?

[复制链接]

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
发表于 2016-12-6 09:52:28 | 显示全部楼层 |阅读模式
1金钱
第九章“串口通信”这一章,有一个串口接收中断,是用函数“NVIC_Init()”初始化的,而且工程中也没有添加库函数“stm32f4xx_exti.c”;
但是第十章“外部中断函数”这一章,却用函数“EXTI_Init()”初始化,且工程中添加了“stm32f4xx_exti.c”;


请问这2种中断有什么差别?导致要使用不同库函数初始化,非常谢谢!

最佳答案

查看完整内容[请看2#楼]

看错了,EXTI_Init()函数是库里面的,用来根据你设置的参数配置外部中断相关寄存器的,里面没有用NVIC_Init()。EXTI_Init()和NVIC_Init()是两个不同功能的函数!NVIC_Init()用来设置某个中断的优先级,比如串口中断,定时器中断,外部中断等等!但是串口中断、定时器中断、外部中断等这些中断它们还需要其他的设置,比如外部中断就需要设置中断引脚,IO复用什么的。这个时候就是由函数EXTI_Init()来完成的。还有,说谁的串口中断 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-12-6 09:52:29 | 显示全部楼层
本帖最后由 zuozhongkai 于 2016-12-6 10:16 编辑
Gene 发表于 2016-12-6 10:02
NVIC_Init()在misc.c里面
EXTI_Init()在stm32f4xx_exti.c
两个初始化的内容也不一样

看错了,EXTI_Init()函数是库里面的,用来根据你设置的参数配置外部中断相关寄存器的,里面没有用NVIC_Init()。EXTI_Init()和NVIC_Init()是两个不同功能的函数!NVIC_Init()用来设置某个中断的优先级,比如串口中断,定时器中断,外部中断等等!但是串口中断、定时器中断、外部中断等这些中断它们还需要其他的设置,比如外部中断就需要设置中断引脚,IO复用什么的。这个时候就是由函数EXTI_Init()来完成的。还有,说谁的串口中断使用了外部中断!你已经彻底混乱了。去看看参考手册吧,串口的中断章节和外部中断章节
开往春天的手扶拖拉机
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-12-6 09:58:02 | 显示全部楼层
NVIC_Init()是用来设置中断有优先级的,EXTI_Init()是用来配置外部中断相关寄存器的!EXTI_Init()里面也要设置中断优先级,你到这个函数里面去看,肯定也调用了NVIC_Init()!
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-6 10:00:28 | 显示全部楼层
zuozhongkai 发表于 2016-12-6 09:58
NVIC_Init()是用来设置中断有优先级的,EXTI_Init()是用来配置外部中断相关寄存器的!EXTI_Init()里面也要 ...

既然串口通信使用了外部中断,为什么不需要EXTI_Init()和“stm32f4xx_exti.c”啊?
不懂这一点
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-6 10:02:13 | 显示全部楼层
zuozhongkai 发表于 2016-12-6 09:58
NVIC_Init()是用来设置中断有优先级的,EXTI_Init()是用来配置外部中断相关寄存器的!EXTI_Init()里面也要 ...

NVIC_Init()在misc.c里面
EXTI_Init()在stm32f4xx_exti.c
两个初始化的内容也不一样
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-6 10:25:40 | 显示全部楼层
zuozhongkai 发表于 2016-12-6 10:15
看错了,EXTI_Init()函数是库里面的,用来根据你设置的参数配置外部中断相关寄存器的,里面没有用NVIC_In ...

好的,我先回头看下!
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-4-12
在线时间
61 小时
发表于 2016-12-6 10:30:42 | 显示全部楼层
Gene 发表于 2016-12-6 10:00
既然串口通信使用了外部中断,为什么不需要EXTI_Init()和“stm32f4xx_exti.c”啊?
不懂这一点

恩,串口没有外部的中断吧,外部中断是外届触发的
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-6 10:38:02 | 显示全部楼层
Gene 发表于 2016-12-6 10:25
好的,我先回头看下!

F:\第八章说的是“串口中断”,这个不算是外部中断吗?
360桌面截图20161206103359.jpg
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-6 10:43:54 | 显示全部楼层
cloudlj 发表于 2016-12-6 10:30
恩,串口没有外部的中断吧,外部中断是外届触发的

那串口的中断是什么类型的呢?
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-4-12
在线时间
61 小时
发表于 2016-12-6 13:46:55 | 显示全部楼层
Image 2.png   USART中断控制器,内部的
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-6 14:28:29 | 显示全部楼层
cloudlj 发表于 2016-12-6 13:46
USART中断控制器,内部的

我懂了,我之前以为串口中断只是外部中断的一种,实际上两者并没有附属关系,是互相独立,地位相同的。串口中断是串口内部中断,与外部中断无关。
非常感谢!
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-4-12
在线时间
61 小时
发表于 2016-12-6 14:43:26 | 显示全部楼层
Gene 发表于 2016-12-6 14:28
我懂了,我之前以为串口中断只是外部中断的一种,实际上两者并没有附属关系,是互相独立,地位相同的。串 ...

恩,互相学习。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 19:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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