侧边栏壁纸
  • 累计撰写 35 篇文章
  • 累计创建 9 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

STM32串口收发数据

Hollies
2023-11-28 / 0 评论 / 0 点赞 / 11 阅读 / 5288 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 基础知识

STM32串口收发数据_图1.png

2. 配置

配置STM32CubeMX,“Asynchronous”为异步

STM32串口收发数据_图2.png

Baud Rate的设置值要与首发设备相同(异步的条件)

如要使用中断则对NVIC进行配置

3. 发送函数

阻塞式发送函数(在发送过程中,暂停单片机,直到发送完毕)

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef*huart,	//所要发送给的外设、串口
									uint8_t *pDate,	//指向发送数据的缓冲区
									uint16_t Size,	//发送多少字节的数据
									uint32_t Timeout);	//超时时间

非阻塞式发送函数

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleYtpeDef *huart, uint8_t *pDate, uint16_t Size);

发送完毕中断回调函数

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);

发送一半中断回调函数

void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);

4. 发送示例

要求

使用非阻塞式的串口发送函数,将发送缓数组dat_Txd中的前5个数据发送到USART1,在数据发送完成后,反转PB9引脚的输出电平。

实现

普通方式

HAL_UART_Transmit(&huart1,dat_Txd,5,10000);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);

中断方式

HAL_UART_Transmit_IT(&huart1,dat_Txd,5);
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance == USART1)
	{
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
	}
}

5. 接收函数

阻塞式接收函数(在接受到数据之前单片机会一直停滞,直到接收到数据)(不推荐)

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart,
								  uint8_t *pDate,
								  uint16_t Size,
								  uint32_t Timeout);

非阻塞式接收函数(推荐)

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleYtpeDef *huart,
									   uint8_t *pDate,
									   uint16_t Size);

接收完毕中断回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

接收一半中断回调函数

void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);

6. 接收示例

要求

使用非阻塞式的串口接收函数,接收USART1中的一个字节,将其保存在dat_Rxd变量中,在数据发送完成后,若该字节为0x5A,则反转PB8引脚的输出电平。

实现

uint8_t dat_Rxd=0;
HAL_UART_Transmit_IT(&huart1,&dat_Rxd,1);	//放在main()函数里

void HAL_UART_RxCpltCallback(UART_HandleTypeDer *huart)	//放在main()函数外
{
	if(huart->Instance == USART1)
	{
		if(dat_Rxd == 0x5A) //此处0x5A表示16进制输入的5A
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
	}
}

0

评论区