STM32F103标准库开发---Uart串口通信实验---I/O口模拟串口通信----延时法

发布者:TranquilSilence最新更新时间:2022-09-21 来源: csdn关键字:STM32F103  Uart  串口通信  延时法 手机看文章 扫描二维码
随时随地手机看文章

UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。


一、串口传输协议

1. 传输方式

串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口, 一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。


每一个字符的前面都有一位起始位(低电平),字符本身由8位数据位组成,接着字符后面是一位校验位(检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。具体如下图所示。


实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置。

在这里插入图片描述

波特率

波特率:每秒钟传输的数据位数(bit)。

波特率的单位是每秒比特数(bps),串口典型的传输波特率600bps,1200bps,2400bps,4800bps,9600bps,19200bps等。

以波特率9600bps为例:1秒钟传输9600位(bit)数据,所以传输1位(bit)数据需要1000000us/9600=104us。


空闲位

空闲位:处于逻辑“1”状态,高电平,每个字符之间都会有一段空闲位,表示当前线路上没有数据传输。


起始位

起始位:处于逻辑”0”状态,低电平,表示数据传输的开始。


数据位

数据位:一般是8位数据位(低位在前,高位在后),传输有效数据。


校验位

校验位:校验方法有奇校验(odd)、偶校验(even)以及无(noparity),用来校验数据传送的正确性。


停止位

停止位:一个字符数据的结束标志,可以是1位、1.5位、2位的高电平,表示数据传输的结束。


二、I/O口模拟串口通信----延时法

这次以波特率9600bps,1位起始位,8位数据位,无校验位,1位停止位的传输方式为例,实现模拟串口通信。

具体程序如下:


Uart1sim.c

#include "Uart1sim.h"

#include "delay.h"


void Uart1sim_GPIO_Config(void) //模拟串口引脚配置初始化

{

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PD端口时钟 

//UART1SIM_TX   PB.5

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出    

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PD端口

  GPIO_ResetBits(GPIOB, GPIO_Pin_5);  

//UART1SIM_RX   PB.6

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

  GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PA10

}


/*

功能:模拟串口发送

参数:data---要发送的数据

*/

void Uart1sim_Txout(u8 data) //模拟串口发送

{

  unsigned char i;

  UART1SIM_TX(1);//空闲---高电平

  delay_us(RATE9600); 

  UART1SIM_TX(0);//起始位---低电平

  delay_us(RATE9600); 

  for(i=0x01;i!=0;i<<=1)//8位数据位

  {

if(i&data) UART1SIM_TX(1);

else       UART1SIM_TX(0);

delay_us(RATE9600); 

  }

  UART1SIM_TX(1);//停止位---高电平

  delay_us(RATE9600); 

}


/*

功能:模拟串口接收

参数:*data存储接收到数据的地址

返回值:1---接收,0---未接收

*/

u8 Uart1sim_Rxout(u8* data) //模拟串口接收

{

unsigned char i=0,Rxdata;

if(UART1SIM_RX==0)//起始位

{

delay_us(RATE9600);

for(i=0x01;i!=0;i<<=1)

{

if(UART1SIM_RX==1) Rxdata|=i;

else        Rxdata&=~i;

delay_us(RATE9600); 

}

*data=Rxdata;

return 1;

}

return 0;

}


Uart1sim.h

#ifndef __UART1SIM_H

#define __UART1SIM_H


#include "stm32f10x.h"


#define RATE9600 (1000000/9600)   //1s=1000ms=1000000us 


#define UART1SIM_RX  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)

#define UART1SIM_TX(a) if (a)

GPIO_SetBits(GPIOB,GPIO_Pin_5);

else   

GPIO_ResetBits(GPIOB,GPIO_Pin_5)

void Uart1sim_GPIO_Config(void) ;

void Uart1sim_Txout(u8 data);

u8 Uart1sim_Rxout(u8* data);


#endif


注意1: 利用延时的方法模拟串口通信,有一些弊端,当程序的中断时间过长的时候,收发都会有影响。

注意2: 由于接收是引脚的低电平检测触发,当程序的运行周期过长的时候,有可能出现接收不到的现象。

关键字:STM32F103  Uart  串口通信  延时法 引用地址:STM32F103标准库开发---Uart串口通信实验---I/O口模拟串口通信----延时法

上一篇:STM32F103标准库开发:KEY按键实验
下一篇:STM32F103标准库开发---Uart串口通信实验---printf()函数重定向

推荐阅读最新更新时间:2024-11-08 22:10

DSP与PC间高速串口通信的实现
    摘要: 利用UART解决DSP与PC机间通信时速率匹配问题,并给出了具体实现电路。     关键词: DSP UART 串行通信 FIFO DSP是一种专门用来实现信号处理算法的微处理器芯片,主要优点有:硬件乘法器,哈佛总线结构,多种寻址方式,零耗循环(zero overhead loop),程序执行时间可预测等。     正是由于DSP的诸多优点能够满足密集的数学计算,而且DSP应用的另一个突出特点是实时性,使其在通信、雷达、数字电视等领域得到了广泛的应用,而且日益渗透到人们的日常生活的各个方面。     在实时信号处理中已经离不开DSP,这些处理系统中包含了各种数据通
[网络通信]
STM32F103x 485通信
一、485通信模块选型 1.1 模块型号 单片机TTL转RS485模块 485转串口UART电平互转 硬件自动控制流向 购买网址: https://item.taobao.com/item.htm?spm=a230r.1.14.95.462418200wPGRW&id=558153026325&ns=1&abbucket=11#detail 1.2 模块简介 1) 美信公司产品,一颗芯片485和自动流向控制,芯片内部集成自动流向控制,非外接流向控制芯片,使用的绝.非相对低廉的MAX485芯片加外置流向控制方案。 2) 具有1/4单位负载的接收器输入阻抗,支持多机通讯,允许接在最多128个设备的总线上。 3) 每个模
[单片机]
<font color='red'>STM32F103</font>x 485通信
基于VB 6.0串口通信的气压测高系统数据采集
  串口通信在系统控制的范畴中一直占据着极其重要的地位,在规格上越来越完善,应用也越来越广泛,使用串行通信的方式可以达到系统控制的目的。以往,要实现计算机的串口通信需要做大量复杂的工作,如今,Visual Basic 6.0(VB 6.0)在开发可视化环境下的监控系统时有其独特的优势,VB 6.0提供了串行通信控件,可以轻松实现串口数据的交换。本文介绍了基于VB 6.0的ActiveX控件——Microsoft Communication(MSComm)通信控件,实现了PC机对气压测高系统的串行通讯功能,完成了对多台气压测高设备进行数据采集。    1 气压测高测试系统的基本构成   气压测高系统的基本构成如图1所示,由PC机
[测试测量]
基于VB 6.0<font color='red'>串口通信</font>的气压测高系统数据采集
STM32F103DAC功能实现
所谓的DAC功能也就是将数字信号转换为模拟信号,一般情况下使用比较多的就是ADC功能,也就是将模拟信号转换为数字信号,多用于读取传感器的值。但是有时候需要控制某些传感器,需要用模拟信号控制,这就需要将数字信号转换为模拟信号了。 数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。 或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压V REF+ 以获得更精确的转换结果。 DAC 主要
[单片机]
<font color='red'>STM32F103</font>DAC功能实现
简述串口通信原理 stm32串口发送数据 如何通过串口发送数据
串口通信经常作为开发调试的工具,所以先介绍下串口通信。 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。目前STM32一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号。 STM32的串口通信外设有USART和UART。USART是Universal Synchronous Asynchronous Receiver and Transmitter的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。UART(Universal Asynchronous
[单片机]
简述<font color='red'>串口通信</font>原理 stm32串口发送数据 如何通过串口发送数据
ARM平台设备WinCE下UART配置
UART串口作为最为常用的工业设备接口之一被广泛且大量的应用,本文就基于Toradex ARM平台设备为例介绍WinCE下UART配置。 我们采用Colibri ARM核心板产品搭配Colibri开发板来进行测试,OS为Toradex官方发布的最新版WinCE,其中Colibri系列默认定义了三个串口,UART A, UART B和UART C,其中UART A用作调试串口使用,下面就分别针对不同SoC产品进行说明。 1).基于NXP i.MX6Solo/DualLite的Colibri i.MX6产品 系统默认定义COM 1 – UART A (调试串口,全功能);COM 2 – UART B (支持Flow con
[单片机]
51单片机入门 - UART串口
对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。 1、初步认识 一位一位的发送出去的,要发送 8 次才能发送完一个字节。 STC89C52有两个引脚是专门用来做 UART串行通信的,一个是 P3.0一个是 P3.1,它们还分别有另外的名字叫做 RXD和TXD,由它们组成的通信接口就叫做串行接口,简称串口。 波特率:发送二进制数据位的速率,习惯上用 baud 表示;即我们发送一位二进制数据的持续时间=1/baud。 通信过程:在UART 通信的时候,一个字节是 8 位,规定当没有通信信号发生时,通信线路保持高电平,当要发送数据之前,先发一位 0
[单片机]
51单片机入门 - <font color='red'>UART</font>串口
基于STM32F103系统的FreeRTOS程序移植
1 FreeRTOS移植及配置 在程序中,移植了正点原子的基于STM32的FreeRTOS程序,编写了自己的内存管理程序malloc.c,程序主要结构如下: FreeRTOS_CORE中是FreeRTOS的核心文件,包括与协程有关的croutine.c,与事件组有关的event_groups.c,与列表有关的list.c,与队列有关的queue.c,与任务有关的tasks.c,与定时器时钟有关的timers.c。 FreeRTOS_PORTABLE中是与FreeRTOS内存管理有关的文件,包括port.c和heap_4.c,port.c中主要包含一些与中断有关的函数,heap_4.c上一篇文章有详细介绍,与内存分配释放
[单片机]
基于<font color='red'>STM32F103</font>系统的FreeRTOS程序移植
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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