简述串口通信原理 stm32串口发送数据 如何通过串口发送数据

发布者:SereneNature7最新更新时间:2024-06-14 来源: elecfans关键字:stm32  发送数据 手机看文章 扫描二维码
随时随地手机看文章

串口通信经常作为开发调试的工具,所以先介绍下串口通信。

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。目前STM32一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号。

STM32的串口通信外设有USART和UART。USART是Universal Synchronous Asynchronous Receiver and Transmitter的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。UART(Universal Asynchronous Receiver and Transmitter)在USART基础上裁减了同步通信功能,只有异步通信

接口通过三个引脚从外部连接到其它设备(如以下USART框图所示)。任何 USART 双向通信均需要至少两个引脚:接收数据输入引脚 (RX) 和发送数据引脚输出 (TX)。

图片

RX :接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪声,从而用于恢复数据。

TX :发送数据输出引脚。如果关闭发送器,该输出引脚模式由其 I/O 端口配置决定。如果使能了发送器但没有待发送的数据,则 TX 引脚处于高电平。在单线和智能卡模式下,该 I/O用于发送和接收数据(USART 电平下,随后在 SW_RX 上接收数据)。

TX和RX分别用PA9和PA10。即使用USART1。

配置串口时,首先要对相应的GPIO口进行初始化,初始化方式和LED灯初始化类似。开启外设时钟,设置端口模式,端口输出类型、输出速度、上下拉、初始输入输出状态。由于USART属于可选功能项,所以两个端口工作模式都为复用功能模式。

图片

GPIO口配置好后,需要选用复用的功能USART1。

图片

从图中可以知道USART1属于寄存器GPIOx_AFRH中的AF7。需要在相应GPIO口写入0111。

图片

接着,设置USART1模式。

图片

图片

图片

图片

图片

根据寄存器说明,配置为过采样16倍、字长8位、不校验,设置一个停止位,设置波特率,使能发送器和接收器。最后使能USART。

波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,单位为波特。比特率指单位时间内传输的比特数,单位 bit/s(bps)。对于 USART 波特率与比特率相等。波特率越大,传输速率越快。USART 的发送器和接收器使用相同的波特率。

图片

图片

波特率计算公式

图片

其中,f PLCK 为 USART 时钟,OVER8 为 USART_CR1 寄存器的 OVER8位对应的值,USARTDIV 是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。其中 DIV_Mantissa[11:0]位定义 USARTDIV 的整数部分,DIV_Fraction[3:0]位定义USARTDIV 的小数部分,DIV_Fraction[3]位只有在 OVER8 位为 0 时有效,否则必须清零。

图片

图片

可通过状态寄存器USART_SR的第七位判断发送数据寄存器是否为空,进行下一步的发送数据。

图片

这个函数虽然可以发送数据,但只能单个发送,如果想发送一个字符串就要多次调用这个函数,所以把这个函数再进行封装。判断要输出的数是否为‘�’,如果是,则这个数发送结束,不再进行发送数据。这样就可以一次发送一个完整的字符串了。

图片

主函数

图片

usart源文件

图片

usart头文件

图片

图片

最终编译后将程序烧入,STM32发送数据,电脑通过串口助手接收到数据,串口发送数据成功。这样以后就可以很方便的进行调试了。


关键字:stm32  发送数据 引用地址:简述串口通信原理 stm32串口发送数据 如何通过串口发送数据

上一篇:STM32电子钟万年历时钟闹钟LCD1602仿真设计
下一篇:STM32F103定时器PWM驱动步进电机加减速

推荐阅读最新更新时间:2026-03-20 20:15

STM32 SPI 发送第一个数据不成功问题
STM32的标准库,跟HAL库都是很实用的, 在使用SPI库的过程中一定要注意时序的问题。 我在调试SPI过程中,调试了两个IC,都是用HAL库, 第一个IC没出问题,第二个IC出现了第一次发送数据不成功问题, 不管发什么数据,交互结果都是0x00, 我一开始用的是HAL_SPI_TransmitReceive(); 这个函数,一直无法成功,改用标准库结果也是一样; 后来查到可能是收发太快的原因, 这里说的收发太快并不是说两个数据之间,而是一个交互的时候收发太快; 于是我把它改为发送接收之间加个延时问题解决:   HAL_SPI_Transmit(&hspi1,&temp,sizeof(temp),10);   HAL_Delay
[单片机]
按键控制串口发送数据STM32实例
按下按键,串口调试助手接收区显示接收到的字符“1”,同时LED2亮一下表示发送成功。 开发板用的是STM32F03ZET6芯片。 主函数main.c代码如下: #include SysTick.h #include led.h #include key.h #include uart.h /************************************************* *函数名:主函数 *函数功能:按下按键KEY_UP,向串口发送字符1 *输入:无 *输出:无 **************************************************/ int main()
[单片机]
按键控制串口<font color='red'>发送</font><font color='red'>数据</font>的<font color='red'>STM32</font>实例
如何通过STM32驱动nRF24L01发送数据
最近在一个项目中用到了nRF24L01这个无线2.4G收发芯片,项目中有主机和分机,默认都是使用数据通道0,主机通过nRF24L01发送数据后,对应地址的分机在收到数据后会返回一个确认数据包给主机(注意:这个确认数据包并不是nRF24L01自动应答时的数据包,而是自定义的一个数据包,说明了就是双方都能进行收发),在经过长时间的摸索之后,终于将接收和发送都调通了,基本的SPI驱动我使用的是正点原子的教程,我是使用的中断法来处理相应的收发工作。 我的软件硬件环境大致如下: 服务端:STM32F103VET6+u/COS-III 从机端:STM32F103RBT6+u/COS-III 库函数是使用的3.5版本的。 在这里我只是列出主
[单片机]
如何在STM32串口通信程序中使用printf发送数据
在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义函数 如下: // 发送数据 int fputc(int ch, FILE *f) { USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USART2 等 while (!(US
[单片机]
如何在<font color='red'>STM32</font><font color='red'>串口通信</font>程序中使用printf<font color='red'>发送</font><font color='red'>数据</font>
stm32串口通信用printf发送数据配置
  开发环境:Keil RVMDK   在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。下面就说一下使用printf需要做哪些配置。   有两种配置方法:   一、对工程属性进行配置,详细步骤如下   1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。   [size=12.8000001907349px]2、在main文件中重定义《fputc》函数 如下   // 发送数据   int fputc(int ch, FILE *f)   {   USART_SendData
[单片机]
实现STM32的串口数据发送和printf函数重定向
简介:在调试电机驱动程序的时候,是不能随便利用中断来进行一些寄存器或数据的查看的,不然你在运行的时候突然来一下,如果占空比大的话那可能直接就把MOS管给烧了,所以我们很多情况下只能使用USART(串口)来进行程序的调试和数据的监控了。 对于STM32来说,由于很多内容都是有库来实现的,那就省了很多时间,直接看个例子就可以写了,大致有4步步骤: 1 1、RCC始终初始化,对端口和USARTX使能时钟 2 2、初始化端口功能,RX设置为输入悬空,TX设置为复用功能的推挽输出,注意GPIO_SPEED要设置下,我没设置弄了半天都没输出 3 3、设置USARTX寄存器,波特率、数据位、校验位、停止位等 4 4、看需要是否开中断,我
[单片机]
STM32串口通信中使用printf发送数据配置方法
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 标签: STM32 串口通信 printf方法 2011-06-29 23:29 在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义函数 如下: // 发送数据 in
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved