你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

问题:USART中断的两种函数有什么区别?

[复制链接]
pans0ul 提问时间:2018-3-29 10:04 /
USART_IRQHandler                  This function handles USART interrupt request.  
HAL_UART_TxCpltCallback             Tx Transfer completed callbacks.  

收藏 评论15 发布时间:2018-3-29 10:04

举报

15个回答
toofree 回答时间:2018-3-29 20:21:05
USART_IRQHandler是中断服务函数,对应中断向量的跳转执行入口;
HAL_UART_TxCpltCallback是发送回调函数,回调函数是中断服务程序的实现。也就是在USART_IRQHandler中调用HAL_UART_TxCpltCallback,当然也可以调用别的函数,比如中断收等。回调函数只是为了方便跨平台移植,脱离硬件操作。就像在操作系统移植中需要对应器件在相应系统下的BSP包一样,BSP把低层驱动活干了,操作系统中调用接口就可以了。

可以没有回调函数,但不能没有中断服务函数。直接在中断服务函数中处理中断事件,相当于裸跑的话,那么在中断服务函数中调用一条中断回调函数,就相当于在操作系统下处理中断事件,操作系统并不关心中断具体是怎么处理的,只关心能不是得到正确的数据和期待的结果。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

jjbboox 回答时间:2018-3-29 14:06:08
除非有很特殊的控制,一般不需要在USART_IRQHandle函数中写代码。
直接在其他代码文件中重定义一个HAL_UART_TxCpltCallback函数来实现中断处理就可以了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

butterflyspring 回答时间:2018-3-29 11:41:11
USART_IRQHandler这个是中断响应函数,包含各类中断,HAL_UART_TxCpltCallback()这个是完成发送的后才进来...但这个函数是包含在USART_IRQHandler...

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wudianjun2001 回答时间:2018-3-29 11:36:11
一个是真正的中断函数
一个是回调函数,回调函数也是中断完成调用函数的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

MrJiu 回答时间:2018-3-29 10:33:01
区别嘛。。。其实本质上来说,没啥区别,就是个命名的区别。。。但是,有名字就代表有意义。。。USART_IRQHandler就是硬件入口,换句话说就是硬件触发的时候,STM32调用的函数,这个其实可以通过改启动文件,来换成其他名字都可以。。。HAL_UART_TxCpltCallback回调函数,就是硬件调用USART_IRQHandler后,会在里面调用这个。。。看情况要不要,可以把处理直接写在USART_IRQHandler也阔以滴。。。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

す疯Ⅱ恒す 回答时间:2018-3-29 10:33:12
第一个是串口的中断服务函数,即发送串口中断的时候跳到里面去执行的。对应启动文件的向量表。
第二个是串口发送完成回调函数,一般用于底层驱动中给应用层添加应用的。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

黑皮男 回答时间:2018-3-29 10:39:52
第一个就是串口的中断服务函数,如果使用第二个,需要串口的中断服务函数中调用HAL库的中断处理函数,在串口发送送完数据后,HAL库才会调用第二个回调函数,通知应用程序

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-3-29 10:46:39
USART_IRQHandler是USART 中断函数;
HAL_UART_TxCpltCallback()是发送中断函数。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhao.zhao 回答时间:2018-3-29 10:57:39
USART_IRQHandler(),这个相当于快递公司,只要有邮件,都进去
HAL_UART_TxCpltCallback(),这个相当于快递公司的发件处,只有发出的邮件,才进去。收到的邮件不进去。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

anobodykey 回答时间:2018-3-29 11:18:08
看名字就知道区别了,或者看源代码就知道在USART_IRQHandler中会调用HAL_UART_TxCpltCallback

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

pans0ul 回答时间:2018-3-29 11:27:30
MrJiu 发表于 2018-3-29 10:33
区别嘛。。。其实本质上来说,没啥区别,就是个命名的区别。。。但是,有名字就代表有意义。。。USART_IRQH ...

谢谢,     请问一下HAL_UART_TxCpltCallback 这个函数如果写在  IRQHander函数外面,当发送信息的时候,会进入那个函数?如果只会触发IRQHander 函数 ,意思就是说HAL_UART_TxCpltCallback只有在IRQHander函数中才有效吗?
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版