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

问题: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个回答
七哥 回答时间: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

查看全部评分

疯de_恒 回答时间: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函数中才有效吗?
MrJiu 回答时间:2018-3-29 13:40:53
pans0ul 发表于 2018-3-29 11:27
谢谢,     请问一下HAL_UART_TxCpltCallback 这个函数如果写在  IRQHander函数外面,当发送信息的时候, ...

肯定是在USART_IRQHandler里面调用了这个函数,才会执行。。。不调用执行个毛线。。。HAL_UART_TxCpltCallback就是个普通的函数。。。只是HAL库为了统一API才提供的一个接口而已。。。当然了也是为了彻底分开底层和上层。。。
pythonworld 回答时间:2018-3-29 13:50:42
Callback函数是留给客户的接口,可以自己写,另外一个就不需要自己改动了。

评分

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

查看全部评分

STM1024 回答时间:2018-3-29 20:49:35
第一个是你只要打开了中断标志,串口的任何中断都会导致代码执行到此中断处理函数中,第二个则只是在发送完成后触发中断的回调函数

评分

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

查看全部评分

12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版