【STM32学习笔记】#003 UART练习

系列文章目录

-【STM32学习笔记】#001 前期准备
-【STM32学习笔记】#002 GPIO设置练习



前言

本次练习参考ST youtube频道@STMicroelectronics 的系列导入教程《STM32マイコン体験実習(導入編)》中的第四讲 《UART実習編》
系列教程和相关的pdf文件也可以在ST 日本官网找到。
  本次教程的pdf:https://www.stmcu.jp/download/?dlid=761940_jp (需要注册)


1 目标功能

本次练习的主要目的是实现UART的下列基本功能和了解一些相关的基本知识:
    - PC输入的数据,经由STM32处理后返回到PC
    - PC通过终端软件Tera Term模拟

2 功能实现

2.1 流程图

主函数:
在这里插入图片描述
接收完成中断处理:
在这里插入图片描述
发送完成中断处理:
在这里插入图片描述

2.2 CubeMX设置

本次使用PA02,PA03分别作为TX, RX的端口进行通信,对应的内部模块是UART2。
参数数据保留默认设置,波特率为115.2kb/s。
在NVIC中设置USART2的中断优先级,下调抢占优先级为”1“,因为默认了抢占优先级为4位,子优先级为0位,所以子优先级设置不了也不用设置了。
在这里插入图片描述

2.3 代码

2.3.1 定义变量

在下面代码
/* USER CODE BEGIN 0 /
/
USER CODE END 0 */
之间插入定义的变量。

__IO uint8_t uart_status;
uint8_t uartbuff[8];

2.3.2 主函数

在下面代码
/* USER CODE BEGIN 3 /
/
USER CODE END 3 */
之间插入主函数。

		uart_status = 0;
		memset( uartbuff, 0x00, sizeof(uartbuff) );
		if( HAL_UART_Receive_IT( &huart2, uartbuff, 1 ) == HAL_OK )
			{
				while( uart_status != 3 )
				{
					switch( uart_status )
						{
							case 0:
								break; /* recive complete wait */
							case 1: /* recive complete.*/
								uart_status = 2;
								HAL_UART_Transmit_IT( &huart2, uartbuff, strlen((char const *)uartbuff) );
								break;
							case 2:
								break; /* transmit complete wait */
							case 3:
								break; /* end */
						} /* end of switch */
				} /* end of while */
			} /* end of if */

2.3.3 中断

在下面代码
/* USER CODE BEGIN 4 /
/
USER CODE END 4 */
之间插入发送完成中断函数和接收完成中断函数。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  {
  	if( &huart2 == huart )			
  		{
  			uart_status = 1;
  		}
  }

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
  {
  	if( &huart2 == huart )
  		{
  			uart_status = 3;
  		}
  }

2.4 调试

打包文件下载到板子后,打开Tera Term将波特率设置为和程序中的一致。然后点击"New setting"即可验证程序是否正确运行了。
在这里插入图片描述
如果键盘上的输入能够实时的在页面中反应出来,则说明程序如常运行。
在这里插入图片描述

3 相关知识点

3.1 UART

UART, Universal Asynchronous Receiver Transmitter, 通用异步收发传输器,采用异步串行通信方式。
由如下引脚构成:TXD(发送端),RXD(接收端),GND(公共地),
在UART上追加同步方式的串行信号变换电路的产品,被称为USART(Universal Synchronous Asynchronous Receiver Transmitter)。
数据格式,由开始位(1bit)、数据位(5-9bit,常用8bit)、奇偶校验位(0-1bit)、停止位(1bit)组成。
在这里插入图片描述
而每秒能够传输的二进制数据位数被称为波特率(Baud rate),单位为bps(bit per second,位/秒)。常见的波特率9600bps、115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600bps。

3.2 NVIC

NVIC, Nested vectored interrupt controller, 嵌套向量中断控制器
可以参考下面的文章了解基本构成和原理:
STM32的NVIC和中断的总结

3.3 HAL_UART_Receive_IT / HAL_UART_Transmit_IT

函数名:HAL_StatusTypeDef HAL_UART_Receive_IT (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t
Size)
功能描述:以非阻塞模式接收大量数据。
参数:huart,指向 UART_HandleTypeDef 结构的指针,该结构包含指定 UART 模块的配置信息;pData,指向数据缓冲区的指针(u8 或 u16 数据元素);Size,要接收的数据元素(u8 或 u16)的数量。
返回值:HAL: status

3.4 HAL_UART_RxCpltCallback / HAL_UART_TxCpltCallback

函数名:void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart)
功能描述:Rx 传输完成的回调函数。
参数:huart,指向 UART_HandleTypeDef 结构的指针,该结构包含指定 UART 模块的配置信息。
返回值:无


参考资料/拓展阅读

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值