STM32 串口的使用

2023-05-16

STM32 串口的使用–以串口调试助手为例

@(STM32基本外设)

串口介绍

USART ((Universal Synchronous Asynchronous Receiver and Transmitter, 通用同步异步收发器), 是一 个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个 UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同 步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要接SCLK即时钟线,我们平时用的串口通信基本都是 UART。USART 支持使用中断和DMA,可实现高速数据通信。

  1. 引脚
    TX:发送数据输出引脚。USB转TTL模块的TXD接单片机的RX引脚。
    RX:接收数据输入引脚。USB转TTL模块的RXD接单片机的TX引脚。
    VCC:供电,接单片机的3.3V或5V引脚。
    GND:地端,与单片机共地。

代码说明

  1. 图形配置
    在这里插入图片描述

异步收发模式,八位字长,一位停止位,无奇偶校验位。
2. 重要语句
发送数据
HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100)
功能为由单片机向串口即电脑发送数据,可在串口调试助手的接收区查看
接收数据
HAL_UART_Receive_IT(&huart1, Receive_Databuf, 10);
功能为单片机接收从串口即电脑发来的数据,可借助串口调试助手的发送区向单片机发送数据
注意:串口调试助手发送数据会自动给数据末位加上**‘\r\n’**,当发送数据的长度(包括换行符在内)超过HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100)中设定的SIZE时,超过的数据无法接收;当长度(包括换行符在内)少于SIZE时,无法触发中断。可将该语句写在接收中断里,这样接收的数据不会丢失和混乱。
3. 具体代码
1. 中断回调函数
发送

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100);//单片机向电脑发送数据
  ms_Delay(100);
  m++;

}

接收

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  for(i=0;i<10;i++)
  {
	  printf("%c",Receive_Databuf[i]);
  }
  printf("Finished\r\n");
  ms_Delay(300);
  n++;
  HAL_UART_Receive_IT(&huart1, Receive_Databuf, 10);
}
  1. 中断里使用的延时函数
void ms_Delay(uint16_t t_ms)
{
	uint32_t t=t_ms*3127;
	while(t--);
}
  1. 变量定义
uint8_t Transmit_Databuf[100];
uint8_t Receive_Databuf[10];
uint8_t n,m;
uint16_t i;

参考链接:https://blog.csdn.net/u010160335/article/details/84679260


DMA方式

  1. 图形配置

在这里插入图片描述

  1. 具体代码
    Normal模式下,只需将
    HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100);
    替换为
    HAL_UART_Transmit_DMA(&huart1, Transmit_Databuf, 100);
    中断回调函数不变。
    Circular模式下,无需再在中断中添加
    ``HAL_UART_Transmit_DMA(&huart1, Transmit_Databuf, 100);`,
    因为一旦开始发送数据便会开启循环。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 串口的使用 的相关文章

  • 51单片机 数码管中断操作

    实践目的 1 掌握中断的概念和思想 2 掌握51单片机中断系统和相关软硬件设计 实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • rt-thread studio中新建5.02版本报错

    先吐槽一下 rt thread studio出现BUG真多 好多时间都是在找BUG 但里面用好多控件还是挺好用的 真是又爱又恨 所以一般使用功能不多的话还是用keil多一点 创建5 02版本工程之后直接进行编译 直接会报下面这个错误 资源
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加

随机推荐

  • Ubuntu 切换为root用户

    下述命令来自于https blog csdn net fmyzc article details 79487643 sudo 43 命令 xff0c 输入当前用户密码后以root权限执行命令 xff0c 有时间限制且仅限当前命令 sudo
  • build-essential包

    build essential的作用 Ubuntu 上一般自带的 xff0c 不需要安装 xff1a alexander 64 Darrykinger sudo apt get install build essential 正在读取软件包
  • Cubli_Mini项目

    GitHub ZhaJiHu Cubli Mini 刷到这个 xff0c 想自己制作一个 芯片介绍 xff1a 电机小板 xff1a AS5600 ASOT AS5600 磁编码器使用心得及总结 越吃越胖的黄的博客 CSDN博客 as560
  • Vi/Vim 编辑器常见命令

    Vim的三种模式 经过以上的使用演示 xff0c 我们体验到了Vim编辑器的三种工作模式 xff1a 一般模式 xff08 normal mode xff09 xff1a 一般模式用来浏览文本 xff0c 查找内容 xff0c 但是不可以编
  • make oldconfig && make prepare

    Ubuntu编译开发板驱动时遇到 mac 64 mac virtual machine driver test test 1 ls led test Makefile mac 64 mac virtual machine driver te
  • 【Linux】资源查看top显示信息说明|top、iftop、iotop、htop、atop工具

    目录 一 Top 1 Top返回结果说明 统计信息区说明 进程信息区说明 2 Top交互操作 更改显示项目 更改排序顺序 过滤 3 top使用格式 4 附常用操作命令 二 查看磁盘 IO 性能 1 1 top 命令 1 2 sar 命令 1
  • raw_copy_to_user和 copy_to_user区别

    mac 64 ubuntu driver test 1 driver make make C home mac driver test preparation linux nano 5 2 tf M 61 home mac driver t
  • 以镜像的方式备份整张TF卡备份

    准备 待备份的TF卡 读卡器 Linux电脑 需在Linux系统下操作 xff0c 电脑磁盘空间需大于TF卡存储空间 步骤 1 插入TF卡 xff0c 执行以下命令 xff0c 查看TF卡磁盘号 sudo parted l 1 2 在roo
  • Linux scp命令

    Linux scp命令 菜鸟教程 Linux scp命令 Linux 命令大全 Linux scp 命令用于 Linux 之间复制文件和目录 scp 是 secure copy 的缩写 scp 是 linux 系统下基于 ssh 登陆进行安
  • stm32+mxl90614测温+蓝牙app数据实时显示折线图+syn6288语音播报体温+oled显示

    设计要求 xff1a stm32主控 mxl90614实现测温功能 蓝牙发送数据到手机app界面实时显示数据变换 xff0c 折线图形式 syn6288语音播报当前体温数据 效果展示 qq1633003977 源码 链接 xff1a htt
  • HY-SRF05超声波测距模块的使用

    HY SRF05超声波测距模块的使用 测距模块介绍 VCC和GND 接电源的正负极 xff0c 也可接单片机的5V或3 3V xff0c 注意与单片机共地Trig xff1a 触发控制信号输入 通过这个引脚输入10us以上的高电平触发信号
  • SG90 180°舵机的使用

    SG90 180 舵机的使用 SG90的介绍 舵机是一种位置 xff08 角度 xff09 伺服的驱动器 xff0c 适用于需要角度不断变化并可以保持的控制系统 xff0c 可以根据控制信号来输出指定的角度 xff08 常见的有0 90 0
  • 蓝牙模块的使用

    蓝牙模块的连接与使用 蓝牙模块的介绍 蓝牙模块可通过与单片机的串口相连 xff0c 借助电脑或手机的蓝牙与单片机实现异步全双工通信 常见的蓝牙模块有HC 05主从一体蓝牙模块 HC 06从机蓝牙模块 低功耗BLE蓝牙模块 cc2540或cc
  • PID算法的原理和公式

    PID算法的原理和公式 64 PID PID算法原理 P xff1a 即Proportion xff0c 输入偏差乘以比例常数I xff1a 即Integral xff0c 对输入偏差进行积分运算D xff1a 即Derivative xf
  • PID控制器中的常见问题

    PID控制器中的常见问题 64 PID PID各部分的作用 P控制器 P控制器不能让稳态误差为零 xff0c 然而随着增大 K p Kp K p 参数 xff0c 可以减小稳态误差 稳态误差是系统从一个稳态过渡到新的稳态 xff0c 或系统
  • PID串级控制

    PID串级控制 64 PID 串级控制的基本环路模型 串级控制包含了主控制器和从控制器两个独立的部分 xff0c 其中从控制器的控制变量是由主控制器回路得到的 xff0c 主控制决定了次控制回路的设定值 即从控制器的设定值是主控制器的的输出
  • ocos 信号量

    信号量分为 xff1a 声明信号量 互斥信号量 转 xff1a ucos ii学习笔记 信号量的原理 ucos ii学习笔记 信号量的原理及使用 include 34 INCLUDES h 34 define TASK STK SIZE 5
  • PID调谐方法:根据开环响应特性调谐(一)

    PID调谐方法 xff1a 根据开环响应特性调谐 xff08 一 xff09 64 PID Ziegler Nichols method xff1a 首先将积分和微分增益设置为0 xff0c 然后比例增益从零开始逐渐增加 xff0c 直到到
  • PID调谐方法:根据开环响应特性调谐(二)

    PID调谐方法 xff1a 根据开环响应特性调谐 xff08 二 xff09 64 PID 齐格勒 尼科尔斯和科恩 库恩方法的一个问题是 xff0c 它们会产生一组相当激进的增益 xff0c 这可能导致不稳定 xff08 或稳定性裕度降低
  • STM32 串口的使用

    STM32 串口的使用 以串口调试助手为例 64 STM32基本外设 串口介绍 USART Universal Synchronous Asynchronous Receiver and Transmitter 通用同步异步收发器 是一 个