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

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

[复制链接]
pans0ul 提问时间:2018-3-29 10:04 /
阅读主题, 点击返回1楼
收藏 评论15 发布时间:2018-3-29 10:04
15个回答
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

查看全部评分

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

评分

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

查看全部评分

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

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

评分

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

查看全部评分

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

评分

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

查看全部评分

feixiang20 回答时间:2018-3-29 22:13:16
区别不大,第一个是串口的中断服务函数,第二个是串口发送中断函数

评分

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

查看全部评分

12

所属标签

相似问题

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