CubeMX实现STM32F103串口通讯笔记

本文介绍了如何在STM32平台上使用CubeMx配置工程,以及如何通过HAL库实现串口的阻塞和非阻塞发送与接收。特别关注了HAL_UART_Transmit和HAL_UART_Receive函数的用法及其特点。
摘要由CSDN通过智能技术生成

目录

配置CubeMx工程

时钟

代码

主要库函数介绍

1.阻断式串口发送函数

2.阻断式串口接收函数

3.非阻断式串口发送函数

4.非阻断式串口接收函数

实现代码

main.c


配置CubeMx工程

时钟

只需要在这里填入72,系统会自动配置打开串口中断

配置串口结构体

通讯模式设置为异步通信

代码

主要库函数介绍

1.阻断式串口发送函数

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)

第一个参数为串口结构体地址

第二个参数为要发送的数据的地址或是数组

第三个参数为发送的数据长度,常利用函数sizeof()

第四个参数设置超时长度,当超过设定的单位长度的时间时,中止发送

特点:代码简单,但是在发送完成之前会占用MCU资源,单片机不能做其他的事情

2.阻断式串口接收函数

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

参数特点同阻断式发送函数相同

3.非阻断式串口发送函数

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)

第一个参数为串口的结构体

第二个参数为发送的数据的地址或者数组名

第三个参数为发送的数据长度

特点:利用串口中断进行发送,占用MCU资源较少,串口发送中断服务结束后会进入串口发送中断回调函数,可以在回调函数中编写代码

4.非阻断式串口接收函数

HAL_UART_Receive_IT(&huart1,&Usart_Get,1);

参数和特点同非阻断式串口发送函数

实现代码

main.c

unsigned char Usart_Send[]="hello world";
unsigned char Led_On_Send[]="Led Open";
unsigned char Led_Off_Send[]="Led Off";
unsigned char Usart_Get;

int main()
{    
    ...
    ...
    HAL_UART_Transmit(&huart1,Usart_Send,sizeof(Usart_Send),10000);//发送函数
    HAL_UART_Receive_IT(&huart1,&Usart_Get,1);
    while (1)
  {
    /* USER CODE END WHILE */
		
    ...
    /* USER CODE BEGIN 3 */
  }
}


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance==USART1)//判断串口的实例是否是串口1
	{
		if(Usart_Get==0xa1)
	{
		Led1_On();
		HAL_UART_Transmit(&huart1,Led_On_Send,sizeof(Led_On_Send),10000);
		
	}
	}
	if(huart->Instance==USART1)
	{
		if(Usart_Get==0xa2)
		{
			Led1_Off();
			HAL_UART_Transmit(&huart1,Led_Off_Send,sizeof(Led_Off_Send),10000);
			
		}
	}
	HAL_UART_Receive_IT(&huart1,&Usart_Get,1);//回调函数结束后,再次进入中断服务函数
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值