问题:USART中断的两种函数有什么区别?
USART_IRQHandler This function handles USART interrupt request. HAL_UART_TxCpltCallback Tx Transfer completed callbacks.USART_IRQHandler是中断服务函数,对应中断向量的跳转执行入口;
HAL_UART_TxCpltCallback是发送回调函数,回调函数是中断服务程序的实现。也就是在USART_IRQHandler中调用HAL_UART_TxCpltCallback,当然也可以调用别的函数,比如中断收等。回调函数只是为了方便跨平台移植,脱离硬件操作。就像在操作系统移植中需要对应器件在相应系统下的BSP包一样,BSP把低层驱动活干了,操作系统中调用接口就可以了。
可以没有回调函数,但不能没有中断服务函数。直接在中断服务函数中处理中断事件,相当于裸跑的话,那么在中断服务函数中调用一条中断回调函数,就相当于在操作系统下处理中断事件,操作系统并不关心中断具体是怎么处理的,只关心能不是得到正确的数据和期待的结果。 除非有很特殊的控制,一般不需要在USART_IRQHandle函数中写代码。
直接在其他代码文件中重定义一个HAL_UART_TxCpltCallback函数来实现中断处理就可以了。 USART_IRQHandler这个是中断响应函数,包含各类中断,HAL_UART_TxCpltCallback()这个是完成发送的后才进来...但这个函数是包含在USART_IRQHandler... 一个是真正的中断函数
一个是回调函数,回调函数也是中断完成调用函数的 区别嘛。。。其实本质上来说,没啥区别,就是个命名的区别。。。但是,有名字就代表有意义。。。USART_IRQHandler就是硬件入口,换句话说就是硬件触发的时候,STM32调用的函数,这个其实可以通过改启动文件,来换成其他名字都可以。。。HAL_UART_TxCpltCallback回调函数,就是硬件调用USART_IRQHandler后,会在里面调用这个。。。看情况要不要,可以把处理直接写在USART_IRQHandler也阔以滴。。。 第一个是串口的中断服务函数,即发送串口中断的时候跳到里面去执行的。对应启动文件的向量表。
第二个是串口发送完成回调函数,一般用于底层驱动中给应用层添加应用的。
第一个就是串口的中断服务函数,如果使用第二个,需要串口的中断服务函数中调用HAL库的中断处理函数,在串口发送送完数据后,HAL库才会调用第二个回调函数,通知应用程序 USART_IRQHandler是USART 中断函数;
HAL_UART_TxCpltCallback()是发送中断函数。 USART_IRQHandler(),这个相当于快递公司,只要有邮件,都进去
HAL_UART_TxCpltCallback(),这个相当于快递公司的发件处,只有发出的邮件,才进去。收到的邮件不进去。 看名字就知道区别了,或者看源代码就知道在USART_IRQHandler中会调用HAL_UART_TxCpltCallback MrJiu 发表于 2018-3-29 10:33
区别嘛。。。其实本质上来说,没啥区别,就是个命名的区别。。。但是,有名字就代表有意义。。。USART_IRQH ...
谢谢, 请问一下HAL_UART_TxCpltCallback 这个函数如果写在IRQHander函数外面,当发送信息的时候,会进入那个函数?如果只会触发IRQHander 函数 ,意思就是说HAL_UART_TxCpltCallback只有在IRQHander函数中才有效吗?
页:
[1]
2