目录
1、引言
2、配置
3、流程
1、引言
近来需要使用蓝牙模块,再了解到蓝牙模块等无线模块许多使用串口透传,便决定在研究一下串口UART 的使用方法。
由于用的板子种类每次都不一样,有F103 有G0 有G4 还有公司的8位自研芯片,所以每次用起来都需要重头开始复习
每次使用UART的目标都是能够发送不定长数据,接收不定长数据。
使用8位单片机的时候,总体思路是使用定时器定一个时间,在里面对一个时间标志进行加法,在使用串口接收数据时候,每当缓存区的一个字节数据存储到定义好的数组里面,就对这个时间标志进行一次清零,当串口不定长数据接收完成以后就是最后一次清零,此后该事件标志位不再清零将一直进行加法,在随后实用查询方式对该时间标志进行查询,当超过一定时间(要远大于字符串发送时候两个字节之间的时间,一般定义为ms级别)则表明数据接收完成,随后对存储数据的数组进行处理,在对串口各个状态标志和刚才制定的时间标志进行清零。这就完成了一次不定长数据的接收。
在使用STM32的时候,也借鉴了这个思路,同时STM32提供的HAL库大体上有三种UART方式可以使用:
轮询模式(Polling mode IO operation)
使用HAL_UART_Transmit()与HAL_UART_Receive()来配合超时操作来发送与接收数据。
中断模式(Interrupt mode IO operation)
使用HAL_UART_Transmit_IT()与HAL_UART_Receive_IT来发送接收,在发送或接收完之后,再进行函数回调HAL_UART_TxCpltCallback与HAL_UART_RxCpltCallback来进行处理这两个函数都是由用户重新定义的,来实现用户自己的操作。
DMA模式(DMA mode IO operation)
使用HAL_UART_Transmit_DMA()与HAL_UART_Receive_DMA()来发送接收,在发送或接收完之后,也使用HAL_UART_TxCpltCallback与HAL_UART_RxCpltCallback来完成实际操作,同时接收到一半的时候,也可以调用相应的 HAL_UART_TxHalfCpltCallback 与HAL_UART_RxHalfCpltCallback,如果需要用到这个操作的情况下可以添加自己的操作,当然来还用到一关于DMA的API函数,如HAL_UART_DMAPause,HAL_UART_DMAResume, HAL_UART_DMAStop等
其中DMA方式加空闲中断方式效率高,但是由于我没有这么高的需求而且对dma模块还不够熟悉,就是用最常用的中断方式实现功能。
这里主要介绍一下中断方式:
2、配置
这里按照流程讲解一下相关的HAL库函数使用文章来源:https://www.toymoban.com/news/detail-411419.html
首先使用cubmax设置所需要的GPIO端口,选定UART功能 ,然后配置基础功能(时钟等)生成文件。文章来源地址https://www.toymoban.com/news/detail-411419.html
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.I
到了这里,关于STM32学习笔记-SMT32使用HAL库UART中断方式使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!