STM32F103C8T6的USART串口通信及中断

这篇具有很好参考价值的文章主要介绍了STM32F103C8T6的USART串口通信及中断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、串口通信
(一)串口协议和RS-232标准
1.串口通信协议
串口通信是指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485

STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。

引脚连接方式:
TXD <-----> RXD
RXD <-----> TXD
GND <----->GND

注:RXD:数据输入引脚,接受数据; TXD:数据发送引脚,数据发送;

对于两个芯片之间的连接,两个芯片GND共地,同时TXD和RXD交叉连接。这里的交叉连接的意思就是,芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD。这样,两个芯片之间就可以进行TTL电平通信了。

2.RS232串口标准
RS232串口标准,它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”,该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。

下面以计算机和调制解调器之间的通信流程来说明RS-232串行通信原理。考虑当调制解调器处于应答方式下,计算机和调制解调器之间的RS-232信号间的交互关系和工作过程。假定调制解调器是全双工的,并以RS-232标准规范工作。

(1)初始状态时,RTS、CTS持续为ON,通过通信程序设置和监测RS232引线状态。在应答模式下,计算机中的软件一直监视着振铃指示(RI),等待RI发出ON信号。

(2)计算机上的通信程序在收到RI信号后,就开始通过振铃指示器ON/OFF变换的次数对振铃进行计数,当到达程设定的振铃次数时,通信程序就发生数据终端就绪(DTR)信号,强迫调制解调器进入摘机状态。

(3)等待2s后(FCC规定),调制解调器自动开始发送其应答载波。这时调制解调器发出调制解调器就绪(DSR)信号通知计算机:它已完成所有的准备工作并等待载波信号。

(4)在持续发出DTR信号期间,计算机软件监测DSR信号。当DSR信号变为ON时,计算机就知道调制解调器已准备数据链路的连接,计算机立即开始监测数据载波监测(CD)信号,以证实数据链路的存在。

(5)当源调制解调器的载波出现于电话线上时,应答调制解调器就发出CD信号。

(6)通过发送数据线(TD)和接收数据线(RD),开始全双工通信。在数据链路传输期间,计算机通过监测CD来确保数据链路的存在。

(7)通信任务一旦完成,计算机就禁止DTR,调制解调器用除去其载波音调、禁止CD和DSR来响应。随着链路被拆除,调制解调器就会返回初始状态。

RS-232串行通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口,若距离较远需附加调制解调器( Mode),最为简单的且常用的是三线制接法,即地、接收数据、发送数据三脚相连。

3.RS232电平
RS232电平是指RS232串行通信接口中使用的电压级别。根据RS232标准,逻辑"1"表示为负电平(通常为-3V至-25V之间),而逻辑"0"表示为正电平(通常为+3V至+25V之间)。这种不对称的电平表示方式使得RS232能够在长距离和嘈杂环境下进行可靠通信。

RS232电平的特点包括:
①高电平范围为+3V至+25V,低电平范围为-3V至-25V。
②逻辑"1"使用负电平表示,逻辑"0"使用正电平表示。
③信号电平较高,能够抵抗干扰,并允许较长的传输距离(最长可达50英尺)。
④传输速率可达115200 bps(比特每秒)。

4.TTL电平
“TTL集成电路的全名是晶体管-晶体管逻辑集成电路(Transistor-Transistor Logic),主要有54/74系列标准TTL、高速型TTL(H-TTL)、低功耗型TTL(L-TTL)、肖特基型TTL(S-TTL)、低功耗肖特基型TTL(LS-TTL)五个系列。
标准TTL输入高电平最小2V,输出高电平最小2.4V,典型值3.4V;输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。
S-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V;输入低电平最大0.8V,输出低电平最大0.5V。
LS-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V;输入低电平最大Ⅰ类0.7V,Ⅱ、Ⅲ类0.8V,输出低电平最大Ⅰ类0.4V,Ⅱ、Ⅲ类0.5V,典型值0.25V。

5.RS232电平和TTL电平的区别
TTL电平标准是 低电平为0,高电平为1(对地,标准数字电路逻辑)。
RS232电平标准 是 正电平为0,负电平为1(对地,正负3-15V皆可,甚至可以用高阻态)。

(1)电压
RS232电平的电压范围较高,正负电平分别为+3V至+25V和-3V至-25V。而TTL电平的电压范围较低,一般为0.2V至3.4V或0V至5V。因此,RS232电平较高,能够提供更大的信号幅度,使其具有较强的抗噪声和抗干扰能力。

(2)范围
RS232电平的电压范围较大,它可用于长距离通信,最长传输距离可达50英尺,甚至更远。而TTL电平的传输距离较短,一般不超过15米。因此,在需要长距离通信的场景中,RS232电平更为合适。

(3)接口电路
RS232电平使用差分信号传输,即发送线和接收线各自携带相反的信号。这种差分传输方式可以有效抑制共模干扰,并提高数据传输的可靠性。而TTL电平使用单端信号传输,只用一根线传输信号,外加一根参考线,也就是地线。那一根线分别携带不同的电平表示逻辑"1"和逻辑"0"。TTL电平的接口电路相对简单,成本较低。

总结:
RS232是一种串行通信接口标准,其电平表示为负电平和正电平,适用于长距离和抗干扰要求较高的通信环境。与之相比,TTL电平具有低电压范围和较短的传输距离,适用于短距离通信和成本敏感的应用。

(二)USB/TTL转232"模块的工作原理
串口数据收发流程:

stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件
以CH340芯片模块为例

CH340C模块
CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps,软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小。

CH40C特点:
①全速USB驱动,兼容USB2.0
②硬件全双工串口,内置收发缓冲区
③支持波特率50bps~2Mbps
④输出TTL电平3.3V,兼容5V的IO电平
stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

输入输出接口引脚均带有LED指示灯
电源接口引脚中,5V的接口引脚带有LED指示灯

stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件t

二、使用HAL库进行STM32的USART串口通信
(一)UART常用函数
1.串口句柄
HAL库在结构上,对每个外设抽象成了一个称为ppp_HandleTypeDef的结构体,其中ppp就是每个外设的名字。所有的函数都是工作在ppp_HandleTypeDef指针之下。

例如,使用USART1时,可以定义USART初始化结构体变量(全局变量)huart。

UART_HandleTypeDef huart1;
huart1就被称为串口的句柄,它被贯穿整个USART收发的流程。
stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

2.HAL_UART_Transmit

通过该函数可向串口寄存器 USART_DR 写入一个数据,当向该寄存器写数据的时候,串口就会自动发送。
函数原型:stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

3.HAL_UART_Receive_IT

作用是开启接收中断,同时设置接收的缓存区以及接收的数据量,并进入回调函数。
函数原型:stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

HAL_UART_Receive_IT函数是启动串口接收并且是中断接收,需要在初始化USART外设之后才能被调用。

在使能了USART接收中断之后,stm32在每次接收到一个字节数据之后,就会自动运行USART1_IRQHandler函数一次,但不会每次都运行一次HAL_UART_RxCpltCallback函数。只有当接收到数据字节数与在HAL_UART_Receive_IT函数设定的接收数目相等时才会运行一次接收完成回调函数。

注:一定要在进入while前写一次,为了开启中断(回调函数里面也会写的)

4.HAL_UART_RxCpltCallback
在判断到是接到串口数据并且数据数目达到设定值时就会调用接收完成回调函数HAL_UART_RxCpltCallback。这样我们在回调函数中实现我们的应用程序。

当CPU向串口发送数据,会产生接收中断,然后进入中断服务函数,调用回调函数,回调函数才是我们进行中断处理的地方

(二)程序编写

1.STM32CubeMX工程创建
2.编写程序
(1)STM32系统给windows11连续发送“hello windows!”

用keil打开刚刚生成的文件,找到main.c,并在main函数循环中使用 HAL_UART_Transmit函数发送hello windows!

stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

(2)在持续发送“hello windows!”的基础上,当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送
①定义全局变量
打开main.c文件,在void SystemClock_Config(void);之后定义全局变量

②开启中断

在进入while循环之前,写入HAL_UART_Receive_IT函数,以启动串口中断接收

③进行传输

在while循环中添加传输代码

④重写中断处理函数

在main函数之后重写中断处理函数

stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件

stm32f103c8t6 通过串口1收发,单片机,stm32,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-786874.html

到了这里,关于STM32F103C8T6的USART串口通信及中断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32F103C8T6的HC-06蓝牙通信

    如果朋友们 遇到了如下问题 ,可以仔细借鉴本文章和另一篇专门讲解 蓝牙通信问题 的文章,一定能够解决你在蓝牙通信时遇到的诸多困难 1.在调试蓝牙模块AT指令时无返回值 2.身边 无USB转TTL模块 可以直接调试蓝牙模块(本人就是由于无模块花了了整整一天才调试成功)

    2024年02月03日
    浏览(69)
  • STM32 F103C8T6学习笔记7:双机无线串口通信

    今日尝试配通俩个C8T6单片机之间的无线串口通信,文章提供原理,源码,测试效果图,测试工程下载: 目录 传输不规范问题: 串口通信资源: 单个串口资源理解: 单片机串口资源: 测试目标与测试硬件连接: 串口初始化与串口中断接收逻辑: 串口初始化: 初步测试能否

    2024年02月09日
    浏览(41)
  • 使用串口烧写程序到STM32F103C8T6最小板(CH340)

    商家没给ST‐LINK V2下载器,故使用串口将程序烧录到最小板,使用仿真软件Flymcu进行。(默认安装过CH340的驱动) 联机下载时的程序文件:编译生成的.hex文件; 编程前重装文件:当选中该项后,flymcu会在每次编程之前将Hex文件重新装载一遍,这对于代码调试的时候比较有用

    2024年02月01日
    浏览(58)
  • 学习记录之STM32F103C8T6最小系统板驱动MPU6050串口打印数据

    1.使用到的工具介绍 2.MPU6050和整体和简单介绍 3.程序的介绍 1.使用到的工具介绍 硬件方面:STM32F103C8T6最小系统板核心板,MPU6050模块三维角度传感器,经典的CH340烧写和串口作用,和若干个杜邦线。 软件方面:keil5编写程序软件,烧写软件FlyMcu.exe烧写工具,sscom.exe串口调试工

    2023年04月09日
    浏览(62)
  • AS608指纹模块与stm32f103c8t6通信实现指纹识别

    目录  AS608指纹模块  stm32f103c8t6最小系统板以及其他外设 工程资料 遇到的问题  光学指纹模块更好用一点,电容式指纹模块的通信协议有一点不一样。 网上可以搜到相关的串口通信协议用户手册 首先可以尝试通过usb转串口让AS608与电脑串口通信,看通信协议,用电脑串口发

    2024年01月18日
    浏览(46)
  • Qt实现安卓手机蓝牙通信并控制stm32f103c8t6驱动VFD屏

    Qt具有跨平台的特性所以非常适合写通信的demo,但是在这个例程中Qt蓝牙部分不支持Windows平台,安卓平台使用没问题。 Qt蓝牙主要涉及到三个类的使用: QBluetoothDeviceDiscoveryAgent //扫描周围蓝牙设备 QBluetoothLocalDevice //扫描本地蓝牙 QBluetoothSocket //建立蓝牙的socket读写 安卓不支

    2024年02月08日
    浏览(55)
  • STM32F103C8T6板子介绍

    STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。  STM32F103C8T6 F1XX片上资源

    2024年02月11日
    浏览(57)
  • 舵机控制(STM32F103C8T6)

            本文是以 STM32F103C8T6 作为主控芯片,通过PB6端口输出PWM,实现控制180°舵机。 (一)概述         舵机是一种位置伺服驱动器器,是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只在控制信号持续不变,伺服机构就

    2023年04月09日
    浏览(56)
  • 功耗测评 | STM32F103C8T6

    STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,外接丰富的传感器、功能模块、通信模块、显示存储等可以形成各种可样的产品项目应用。对于功耗要求比较高的产品,一般会选择STM32L系列的MCU,但是从功耗的评测角度,逻辑上是基本相似的。 在很多应用场合中都对

    2024年02月07日
    浏览(45)
  • STM32F103C8T6系统板

    1.电源部分 2.复位 3.晶振 4. 电源电路——防反接 有关二极管 漫谈二极管防电源反接电路 本次采用上图右下角的NMOS防反接电路。 电源电路——电源芯片 AMS1117是AMS公司的 ,LM1117是NS(美国国家半导体)的,LM1117要贵很多,所以一般的用AMS1117就可以了。 (以下分析参考STM32F10

    2024年02月02日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包