一、HAL库相关函数
1、串口发送/接收函数
HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制
HAL_UART_Receive();串口轮询模式接收,使用超时管理机制
HAL_UART_Transmit_IT();串口中断模式发送
HAL_UART_Receive_IT();串口中断模式接收
HAL_UART_Transmit_DMA();串口DMA模式发送
HAL_UART_Transmit_DMA();串口DMA模式接收
2、串口中断函数
HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用
HAL_UART_TxCpltCallback();数据完全发送完成后调用
HAL_UART_RxHalfCpltCallback();一般数据接收完成时调用
HAL_UART_RxCpltCallback();数据完全接受完成后调用
HAL_UART_ErrorCallback();传输出现错误时调用
二、程序思路
使用中断控制方式,当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。
三、工程模板生成
1、打开STM32CubeMX,点击New Project
2、选择单片机对应的参数,这里使用的是STM32F429IGTx,选择后点击OK。
3、创建完成后在左边找到并打开RCC选项卡进行时钟使能,将高数外部时钟(HSE)的时钟源选择为晶体振荡器
4、在窗口上方的选项卡找到Clock Configuration ,进行时钟源的选择与倍频/分频系数的设置
5、由于之前使能了HSE,故在Clock Configuration中可用。这里将PLL时钟源选择为HSE,系统时钟源(SYSCLK)设置为PLLCLK,分频与倍频系数如图
6、返回之前设置RCC的页面(pinout),找到USART1,使能为异步通讯(Asynchronous)
7、此时在Configuration选项卡中可以找到USART1,点击进行进一步的设置
8、点击进入后,在Parameter选项卡中设置波特率(Baud Rate)为115200 Bits/s,字长(Word Length)为 8bits,无奇偶检验(Parity),停止位(Stop Bits)为1,其他选项保持默认。
9、因为该程序使用的是中断处理,所以还需要打开NVIC Settings页面,使能中断
10、设置完毕后点击Apply,再点击OK关闭页面。在窗口左上角的Project选项卡中点击Generate Code 来创建模板
11、分别填入工程名,工程输出目录,所使用的编译器(这里使用MDK5)
12、生成成功
13、点击Open Project打开生成好的模板,在Application/User文件夹下找到main.c。
对工程模板生成方法的介绍到此为止,接下来是对代码的介绍
四、程序编写
1、首先在main函数前定义两个数组变量
uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n";
uint8_t aRxBuffer[20];
2、在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中。
HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取目标长度
HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10);
3、在main.c文件后面添加中断接收完成函数,将接收到的数据又通过串口发送回去。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时间
}
4、编译后下载至开发板 ,进行复位后通过串口监视器可看到串口发送的aTxStarMessages字符串,向串口发送10个字节的数据后可看到串口将所接收数据又发送回来(注意由于HAL_UART_Receive_IT()函数中的字节参数设置为了10,故只有发送10个字节的字符串才会被串口返回,且由于while循环中无语句,该程序只能执行一次)