当前位置: 首页 > news >正文

STM32——串口通信 UART

一、基础配置

Universal Asynchronous Receiver Transmitter

异步,串行,全双工

TTL电平 :高电平1 低电平0

帧格式: 起始位1bit 数据位8bit 校验位1bit 终止位1bit

NVIC Settings一栏使能接受中断。

之前有设置LCD,那么就自动给PA9和PA10设置引脚了。但如果没有设置,默认配置的是PC4和PC5。

二、串口发送

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t 
Timeout)
功能:串口发送数据
参数:
    UART_HandleTypeDef *huart  UART句柄 huart1
    uint8_t *pData  需要发送的数据
    uint16_t Size   发送的字节数
    uint32_t Timeout 最大发送时间,发送数据超时退出发送

案例:每次上电后发送 Hello World!

/* USER CODE BEGIN Includes */
#include "stdio.h" //使用sprintf()
#include "string.h" // 使用strlen()
/* USER CODE END Includes */

/* USER CODE BEGIN PV */
char tx_buf[20];
/* USER CODE END PV */

  /* USER CODE BEGIN 2 */
  sprintf(tx_buf,"Hello World!\r\n");
  HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
  /* USER CODE END 2 */

三、串口接收

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
功能:串口中断接收函数
参数:
    UART_HandleTypeDef *huart  UART句柄 huart1
    uint8_t *pData   接收到的数据存放地址
    uint16_t Size   发送的字节数 为1,每次中断只能接收一个字符 

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
功能:中断回调函数,串口中断接收完之后,会进入该函数。
    这是一个空函数,用户可以重写该函数,在函数里实现相应的操作。

1. 接收单个字符 

案例:接收到 O 时,点亮LED1并发送 LED1 Open! ,接收到 C 时,熄灭LED1并发送 LED1 Close!

char tx_buf[20];
uint8_t rx_data;


/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1,&rx_data,1); //打开接收中断
/* USER CODE END 2 */



void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(rx_data=='O')
	{
		ucled=0x01;
		sprintf(tx_buf,"LED1 Open!\r\n");
		HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
	}
	if(rx_data=='C')
	{
		ucled=0x00;
		sprintf(tx_buf,"LED1 Close!\r\n");
		HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
	}
	HAL_UART_Receive_IT(&huart1,&rx_data,1);
}

2. 接收定长字符串

void Uart_Proc(void)
{
	if(rx_count==4)
	{
		if( strcmp(rx_buf,"LEDO")==0 )
		{
			ucled=0x01;
			sprintf(tx_buf,"LED1 Open!\r\n");
			HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
		}
		if( strcmp(rx_buf,"LEDC")==0 )
		{
			ucled=0x00;
			sprintf(tx_buf,"LED1 Close!\r\n");
			HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
		}
		rx_count=0;
		memset(rx_buf,0,20);
	}
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	rx_buf[rx_count++]=rx_data;
	HAL_UART_Receive_IT(&huart1,&rx_data,1);
}

3. sscanf() 解析字符串

int sscanf(const char* str, const char* format, ...);
参数:
    str:要解析的输入字符串。
    format:格式字符串,指定要匹配的格式规则。
    ...:可变参数列表,用于接收解析后的数据。
void Uart_Proc(void)
{	
	//22个字符
	if(rx_count==22)
	{
		//解析rx_buf,然后用三个参数接收数据
		sscanf(rx_buf,"%4s:%4s:%12s",car_type,car_num,car_time);
		sprintf(tx_buf,"car_type:%4s\r\n",car_type);
		HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
		sprintf(tx_buf,"car_num:%4s\r\n",car_num);
		HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
		sprintf(tx_buf,"car_time:%12s\r\n",car_time);
		HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
		rx_count=0;
		memset(rx_buf,0,20);
	}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	rx_buf[rx_count++]=rx_data;
	HAL_UART_Receive_IT(&huart1,&rx_data,1);
}

 


文章转载自:

http://1aG5e2Er.mydgr.cn
http://6PHYK7vK.mydgr.cn
http://M1Wo8Qwo.mydgr.cn
http://rhvwXXRm.mydgr.cn
http://ZcK7xcOB.mydgr.cn
http://B0OkmIOK.mydgr.cn
http://o64eIPbf.mydgr.cn
http://deDGBj1M.mydgr.cn
http://LtzDvhHy.mydgr.cn
http://t8rRS5lq.mydgr.cn
http://dgvbvE1J.mydgr.cn
http://VsbSe6zd.mydgr.cn
http://JprAzh66.mydgr.cn
http://pML6NLbv.mydgr.cn
http://6RI3QJ0Z.mydgr.cn
http://Mtaz0E9x.mydgr.cn
http://PPn0bNGV.mydgr.cn
http://owk3InGR.mydgr.cn
http://iM1ncur9.mydgr.cn
http://dFxTTgXT.mydgr.cn
http://Hxrj2m26.mydgr.cn
http://sqOryQLB.mydgr.cn
http://ZeHEgfy0.mydgr.cn
http://RlnjKxm1.mydgr.cn
http://xSp5tJ9N.mydgr.cn
http://pIqBtKTm.mydgr.cn
http://gK9cm7EI.mydgr.cn
http://ZMogOSom.mydgr.cn
http://LNbhay4r.mydgr.cn
http://GRbi0pCO.mydgr.cn
http://www.dtcms.com/a/52477.html

相关文章:

  • Gartner:数据安全平台DSP提升数据流转及使用安全
  • 大白话css第九章主要聚焦于前沿技术整合、生态贡献与技术传承
  • 一文了解Conda使用
  • 数据结构:八大排序(冒泡,堆,插入,选择,希尔,快排,归并,计数)详解
  • 《HarmonyOS赋能的智能影像诊断系统安全架构与临床实践》
  • 轻松部署 Stable Diffusion WebUI 并实现局域网共享访问:解决 Conda Python 版本不为 3.10.6 的难题
  • 软件工程与实践(第4版 新形态) 练习与实践1
  • Power Settings Explorer官网下载地址: Windows电源选项设置管理工具
  • 自由学习记录(41)
  • Hive-03之传参、常用函数、explode、lateral view、行专列、列转行、UDF
  • Hive-优化(参数优化篇)
  • 下拉单选(选择后高亮)测试用例
  • llama.cpp: GGUF格式及模型量化参数介绍
  • 数据结构基础之《(19)—矩阵处理》
  • 并发编程(线程池)面试题及原理
  • Matlab实现车牌识别
  • 算法-回溯篇08-子集
  • Python入门(1):Python语言基础
  • //定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果
  • 爆肝实操!KNN 算法性能瓶颈突破,智能安防案例见证飞跃
  • 【每日学点HarmonyOS Next知识】网页Scheme拉起应用、列表刷新、Web下载文件、根据子元素
  • 第1章:项目概述与环境搭建
  • 【C++】vector(上):vector的常用接口介绍
  • 在Linux中开发OpenGL——检查开发环境对OpenGL ES的支持
  • 【C++设计模式】第五篇:原型模式(Prototype)
  • Armbian: 轻量级 ARM 设备专用 Linux 发行版全面解析
  • BitMap实现用户签到、UV统计
  • 最好用的多语言插件Google Language Translator
  • 开源AI应用开发平台Dify
  • Nginx或Tengine服务器配置SSL证书