STM32CubeMX系列教程4:基本串行通信

摘要

  本章讲解STM32单片机的串行通信使用方法,主要讲解STM32 HAL库的轮询与中断方式的串口通信。实现单片机将串口接收到的数据再次发送出去。

配置工程

  复制复制 STM32CubeMX系列教程0:创建工程 创建的工程目录GPIO_test,修改文件目录名称为USART,双击打开GPIO_test.ioc。

串口轮询方式发送

启用串口通信

  配置USART1为异步通信方式,默认波特率为115200bps,同时自动设置PA9与PA10为串口的发送与接收引脚。其他参数默认,无需更改。设置完成,点击生成代码。
在这里插入图片描述

编写用户代码

  打开生成的代码,打开mian.c入口文件,找到main(void)函数,删除while中原有的代码。
在这里插入图片描述

添加新的代码

	HAL_UART_Transmit(&huart1,(uint8_t *)"USART_TEST\r\n",12,100);  //以轮询的方式发送字符串
   	HAL_Delay(500);								//延时500ms

在这里插入图片描述

HAL_UART_Transmit(&huart1,(uint8_t*)"USART_TEST\r\n",12,100);
这条语句的功能是以串口1发送字符串“USART_TEST\r\n”,12表示12个字符,100表示超时时间100ms。这个函数来自于stm32f4xx_hal_uart.c
在这里插入图片描述

编译下载

  代码编写完成后,编译下载进入单片机。
  STM32单片机程序下载方法有多种,有需要请跳转

STM32程序下载0:STM32CubeProgrammer安装
STM32程序下载1:通过keil-ST-Link方式下载
STM32程序下载2:通过STM32CubePro-ST-Link下载
STM32程序下载3:通过STM32CubePro-UART下载
STM32程序下载4:通过STM32CubePro-USB下载

  选择你所需要的程序下载方法。

  下载完成,点击复位。打开串口助手,连接到相应的端口,设置波特率为115200,即可接收到单片机发送的数据。
在这里插入图片描述

中断方式收发

启动串口中断

  回到STM32CubeMX,其他参数不变,依然是选中串口1,启动异步通信,打开中断设置,勾选USART1全局中断。
在这里插入图片描述

编写用户代码

  配置完成后,重新生成代码,打开生成的代码,在main.c文件的用户变量去建立串口接收缓冲区数组。
  uint8_t rx1_buf[10];
在这里插入图片描述

  找到主函数,在while语句之前,开始通过串口中断接收数据。
  HAL_UART_Receive_IT(&huart1,rx1_buf,10);
  这句话的意思是以中断的方式从串口1接收数据,接收道到的数据存在rx1_buf数组中,每次接收10个字节。
在这里插入图片描述
这个函数的实现是在stm32f4xx_hal_uart.c中。
在这里插入图片描述
  删除while语句中的程序。

编写中断回调函数

   在main.c文件的底部,填入串口中断接收回调函数,

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){	if(huart == &huart1)   //判断中断是否来自于串口1
	{
		HAL_UART_Transmit_IT(&huart1,rx1_buf,10);  //将接收到的数据通过中断的方式发送出去
		HAL_UART_Receive_IT(&huart1,rx1_buf,10);	//开始接收下一轮数据
	}
}

在这里插入图片描述

编译下载

  代码编写完成后,编译下载进入单片机。
  STM32单片机程序下载方法有多种,有需要请跳转

STM32程序下载0:STM32CubeProgrammer安装
STM32程序下载1:通过keil-ST-Link方式下载
STM32程序下载2:通过STM32CubePro-ST-Link下载
STM32程序下载3:通过STM32CubePro-UART下载
STM32程序下载4:通过STM32CubePro-USB下载

  选择你所需要的程序下载方法。

  下载完成,点击复位。打开串口助手,连接到相应的端口,设置波特率为115200,从串口助手向单片机发送10个字节的数据,单片机将会把发过去的数据在返回给串口助手。必须发够10个字节的数据,才能够触发中断。

串口相关函数

  串口的发送接收函数:

HAL_UART_Transmit();			串口轮询模式发送,使用超时管理机制。  
HAL_UART_Receive();				串口轮询模式接收,使用超时管理机制。

HAL_UART_Transmit_IT();			串口中断模式发送,  
HAL_UART_Receive_IT();			串口中断模式接收

HAL_UART_Transmit_DMA();		串口DMA模式发送  
HAL_UART_Receive_DMA();			串口DMA模式接收

  串口相关的中断函数:

HAL_UART_TxHalfCpltCallback();			一半数据(half transfer)发送完成后,通过中断处理函数调用。
HAL_UART_TxCpltCallback();				发送完成后,通过中断处理函数调用。
HAL_UART_RxHalfCpltCallback();			一半数据(half transfer)接收完成后,通过中断处理函数调用。
HAL_UART_RxCpltCallback();				接收完成后,通过中断处理函数调用。
HAL_UART_ErrorCallback();				传输过程中出现错误时,通过中断处理函数调用。

  可看到串口发送和就是有三种通信模式:

  第一种是上面用到的轮询的模式。CPU不断查询IO设备,如设备有请求则加以处理。例如CPU不断查询串口是否传输完成,如传输超过则返回超时错误。轮询方式会占用CPU处理时间,效率较低。
  第二种就是中断控制方式。当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。
  第三种就是直接内存存取技术(DMA)方式。所谓直接传送,即在内存与IO设备间传送一个数据块的过程中,不需要CPU的任何中间干涉,只需要CPU在过程开始时向设备发出“传送块数据”的命令,然后通过中断来得知过程是否结束和下次操作是否准备就绪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新程序猿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值