STM32中HAL库使用-串口发送(二)

2.中断发送。#

2.1发送中断的触发流程。#

由于在STM32中usart2的入口中断只有一个:

STM32中HAL库使用-串口发送(二)_第1张图片

就是上图的中断向量表中红框标出来的。其他的所有中断其实都是从这里出发的,我们再和捋接收一样捋一遍发送。

首先是USART2_IRQHandler,找到这个函数原型(这一步和接收完全一样):

STM32中HAL库使用-串口发送(二)_第2张图片

再找HAL_UART_IRQHandler(&huart2);原型:

STM32中HAL库使用-串口发送(二)_第3张图片 

到这里还是和接收完全一样,注意是完全一样,源码也就是上面接收贴出来的一样。这次我们主要注意该函数最后几行(可以翻上去看源码):

STM32中HAL库使用-串口发送(二)_第4张图片 

把中间代码收起来以后看最后红框,这就很明显了,这里触发了发送中断(软件触发)

接着去找这个UART_EndTransmit_IT(huart)的函数原型:

STM32中HAL库使用-串口发送(二)_第5张图片

第一个红框里清除了发送中断使能(同接收一样,在用完之后就关掉,但是不同于接收,发送完成就不用再在回调函数中使能了,因为在中断发送的时候就会使能),第二个红框调用回调函数。

 2.2如何使用发送中断。#

中断发送的意思,非常类似于中断接收,但其中有一些不同,看下面这个函数:

HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

 一个非常类似于中断接收使能的函数。接收中断使能函数的作用是绑定接收缓存区使能接收中断,但是对于发送,该函数的作用是发送指定长度的指定数据使能发送中断

比如有一个unsigned char 数组a[10],HAL_UART_Transmit_IT(&huart2, a, 10),这一句的意思是用usart2(串口2)发送a数组中的10个数据,然后使能发送中断。

当发送完成之后(或者发送一半,发送一半也有个中断)就会执行回调函数。

总结一下发送中断:

使用HAL_UART_Transmit_IT函数发送指定长度的数据,并使能发送中断,发送到一半和发送结束会触发中断(相关的回调函数是HAL_UART_TxHalfCpltCallback()HAL_UART_TxCpltCallback())中断触发后发送中断使能会被清除,然后调用回调函数,回调函数执行完成之后结束本次发送。

中断传输方式

HAL_UART_Transmit_IT发送立即执行,执行完成后调用HAL_UART_TxCpltCallback回调函数。因此用户重新定义这个函数,把发送完成后想做的事情写在这里面。

而HAL_UART_Transmit发送完成后不引发中断,跟printf使用类似。

 

 

 

你可能感兴趣的:(stm32,单片机,arm)