STM32Cube HAL库串口总结

STM32Cube HAL库串口总结


定义了三种传输方式:阻塞传输,中断传输、DMA传输

HAL_UART_Transmit

HAL_UART_Receive

HAL_UART_Transmit_IT

HAL_UART_Receive_IT

HAL_UART_Transmit_DMA

HAL_UART_Receive_DMA

此外还定义了两个中断回调函数,供中断和DMA使用,分别在数据传输一半和完成时使用

扫描二维码关注公众号,回复: 1059836 查看本文章

voidHAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);

void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef*huart);

voidHAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

voidHAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);

阻塞传输是调用这个函数并在等待时间内一直等待操作完成。

HAL_UART_Transmit

HAL_UART_Receive

中断传输方式

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

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

HAL_UART_Receive_IT通过设置接收缓冲区和需要接收的数据个数。当数据接收达到设定个数后引发一次中断调用回调函数HAL_UART_RxCpltCallback。由于只引发一次中断,如果需要连续接收,则需要在HAL_UART_RxCpltCallback再调用HAL_UART_Receive_IT。这种定长的接收可能并不是想要的,往往传输的数据都是不定长的,我想这需要将HAL_UART_Receive_IT长度设置为1,然后自己根据接收的数据判断。

由于回调函数没有指明是哪个串口引发的中断,因此有必要在回调函数中做判断,如if(huart==&huart1){}

 具体怎么使用STM32CubeMX产生代码就不介绍了,因为很多博客都介绍过了。

猜你喜欢

转载自blog.csdn.net/u013701860/article/details/79457078
今日推荐