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函数是留给客户的接口,可以自己写,另外一个就不需要自己改动了。

jjbboox 发表于 2018-3-29 14:06:08

除非有很特殊的控制,一般不需要在USART_IRQHandle函数中写代码。
直接在其他代码文件中重定义一个HAL_UART_TxCpltCallback函数来实现中断处理就可以了。

toofree 发表于 2018-3-29 20:21:05

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

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

stm1024 发表于 2018-3-29 20:49:35

第一个是你只要打开了中断标志,串口的任何中断都会导致代码执行到此中断处理函数中,第二个则只是在发送完成后触发中断的回调函数

feixiang20 发表于 2018-3-29 22:13:16

区别不大,第一个是串口的中断服务函数,第二个是串口发送中断函数
页: 1 [2]
查看完整版本: 问题:USART中断的两种函数有什么区别?