使用STM32进行串口实验(非中断+中断)

关于串口相关的基本知识可以看这篇文章https://blog.csdn.net/weixin_62599865/article/details/129963991?spm=1001.2014.3001.5501

一.使用非中断的方式进行串口通信

串口发送/接收函数:

HAL_UART_Transmit(); 串口发送数据,使用超时管理机制
HAL_UART_Receive(); 串口接收数据,使用超时管理机制
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size, uint32_t Timeout)
作用:以阻塞的方式发送指定字节的数据
形参 1 UART_HandleTypeDef 结构体类型指针变量
形参 2 :指向要发送的数据地址
形参 3 :要发送的数据大小,以字节为单位
形参 4 :设置的超时时间,以 ms单位
将串口发送数据和接收数据应用于实战
CubeMX32的配置:

定义一个数组用来存放数据

进行函数调用 

 像这样写的话,每次按下单片机复位就会每次发送一个"hello world"

但是当单片机接收到一个数据后,它会进入while循环无限返回数据.

所以要加上memset初始化数组。

 这里我们进行一个优化,我们使用printf发送数据。

需要重写fputc函数

并打开MicroLIB库。

 二.使用中断的方式进行串口通信

CubeMX配置:

HAL_UART_Transmit_IT(); 串口中断模式发送  
HAL_UART_Receive_IT(); 串口中断模式接收
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size)

作用:以中断的方式接收指定字节的数据

形参 1 UART_HandleTypeDef 结构体类型指针变量
形参 2 是指向接收数据缓冲区
形参 3 是要接收的数据大小,以字节为单位

当我们使用中断的方式接收发送指定数据我们需要使用到一个变量

状态标记变量:
USART_RX_STA
到最后使用中断的方法做出来的效果和使用超时函数做出来的效果是一样的,代码和USART_RX_STA的解释需要 的可以私我。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值