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

STM32-串口-UART-Asynchronous

一,发送数据

#include "stdio.h"
uint8_t hello[]="Hello,blocking\r\n";
HAL_UART_Transmit(&huart1,hello,sizeof(hello),500);	

二,MicroLIB-printf(" hello\r\n")

#include "stdio.h"
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF); return ch; }

注意:每次GENERATE CODE确定勾选MicroLIB,波特率==115200 。

三,中断接收不定长数据

1.usart.c下添加

你只需更改huart->Instance为你使用串口号的,注意发送以回车结束。

uint8_t g_usart_rx_buf[USART_REC_LEN];/* 接收缓冲, 最大USART_REC_LEN个字节. */
uint16_t g_usart_rx_sta = 0;/*  接收状态 bit15,接收完成标志 bit14,接收到0x0d bit13~0,接收到的有效字节数目 */
uint8_t g_rx_buffer[RXBUFFERSIZE];  /* HAL库使用的串口接收缓冲 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == USART1)                    /* 如果是串口1 */{if ((g_usart_rx_sta & 0x8000) == 0)             /* 接收未完成 */{if (g_usart_rx_sta & 0x4000)                /* 接收到了0x0d(即回车键) */{if (g_rx_buffer[0] != 0x0a)             /* 接收到的不是0x0a(即不是换行键) */{g_usart_rx_sta = 0;                 /* 接收错误,重新开始 */}else                                    /* 接收到的是0x0a(即换行键) */{g_usart_rx_sta |= 0x8000;           /* 接收完成了 */}}else                                        /* 还没收到0X0d(即回车键) */{if (g_rx_buffer[0] == 0x0d)g_usart_rx_sta |= 0x4000;else{g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0];g_usart_rx_sta++;if (g_usart_rx_sta > (USART_REC_LEN - 1)){g_usart_rx_sta = 0;             /* 接收数据错误,重新开始接收 */}}}}HAL_UART_Receive_IT(huart, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);}
}
 2.usart.h下添加
#define USART_REC_LEN               200         /* 定义最大接收字节数 200 */
#define RXBUFFERSIZE  1                        /* 缓存大小 */
extern uint8_t  g_usart_rx_buf[USART_REC_LEN];  /* 接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 */
extern uint16_t g_usart_rx_sta;                 /* 接收状态标记 */
extern uint8_t g_rx_buffer[RXBUFFERSIZE];       /* HAL库USART接收Buffer */
3.main.c下开启接收中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
4.验证
	uint8_t len;uint16_t times = 0;while (1){if (g_usart_rx_sta & 0x8000)        /* 接收到了数据? */{len = g_usart_rx_sta & 0x3fff;  /* 得到此次接收到的数据长度 */printf("\r\n您发送的消息为:\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)g_usart_rx_buf, len, 1000);    /* 发送接收到的数据 */while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC) != SET);           /* 等待发送结束 */printf("\r\n\r\n");             /* 插入换行 */g_usart_rx_sta = 0;}else{times++;if (times % 200 == 0) printf("请输入数据,以回车键结束\r\n");HAL_Delay(10);}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}
http://www.lryc.cn/news/522570.html

相关文章:

  • Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
  • Shell控监Kafka积压
  • element-ui textarea备注 textarea 多行输入框
  • Transformer创新模型!Transformer+BO-SVR多变量回归预测,添加气泡图、散点密度图(Matlab)
  • 大疆机场及无人机上云
  • 用Cursor生成一个企业官网前端页面(生成腾讯、阿里官网静态页面)
  • Java 数组排序
  • LeetCode:78.子集
  • 【经济学通识——国债】
  • 联合体(Union)
  • Kibana:ES|QL 编辑器简介
  • 【工具】curl工具
  • idea中远程调试中配置的参数说明
  • JavaWeb 前端基础 html + CSS 快速入门 | 018
  • Debian 设定 tomcat 定时重启
  • 【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
  • 下载文件,浏览器阻止不安全下载
  • 基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)
  • 【17】Word:林楚楠-供应链❗
  • Transformer中基于惊喜的遗忘机制
  • 从玩具到工业控制--51单片机的跨界传奇【3】
  • 基于机器学习的用户健康风险分类及预测分析
  • CF 641A.Little Artem and Grasshopper(Java实现)
  • 5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署
  • 1.Spring AI 从入门到实践
  • 第23篇 基于ARM A9处理器用汇编语言实现中断<五>
  • 攻防世界 unseping
  • Python编程与在线医疗平台数据挖掘与数据应用交互性研究
  • 浔川 AI 翻译已修复,可正常使用
  • apidoc thinkphp likeadmin 遇到解析报错