OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4502|回复: 22

20%初学者容易搞混的串口基础知识整理

[复制链接]

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-10-22 12:02:44 | 显示全部楼层 |阅读模式
本帖最后由 秋天 于 2018-10-22 14:42 编辑

在做项目的时候是不是发现串口是最常用的通信接口,所以我自己整理了一下关于串口的一些常识性知识,方便自己学习。
          关键词:Loto虚拟示波器,串口时序,电平标准,模拟串口
    我们常说的串口按电平分类的话有两种,一种是TTL电平的串口,一种是232电平的串口。
首先我们先看一下这两种电平的区别。
TTL电平标准:输出L:  <0.8V;  H: >2.4V,输入L:  <1.2V:   H: >2.0V
TTL器件输出低电平要小于0.8V,高电平要大于2.4V,输入,低于1.2V就认为是0,高于2.0就认为是1.于是TTL电平的输入低电平的噪声容限就只有(O.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V.
RS232标准:
逻辑1的电平为-3~-15V,辑0的电平为+3~+15V,注意电平的定义反相了一次。

   然而TTL电平的串口还可以分为两种UART与USART。我们打开stm32cubeMX看到stm32F103有2个UART3个USART。在日常我们就可以说,它有5个串口,因为USART可以配置成UART

    UART与USART都是单片机上的串口通信,他们之间的区别如下:
首先从名字上看:
UART:universal asynchronous receiver and transmitter通用异步收/发器
USART:universal synchronous asynchronous receiver and transmitter通用同步/异步收/发器
  从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型,事实也确实是这样。但是具体增强到了什么地方呢?
  其实当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如STM32的USART可以提供时钟支持ISO7816的智能卡接口。


     在实际的项目中用的最多的还是UART ,配置为:N, 8 ,1.波特率常用的有2400,9600,57600,115200.我们用串口来干什么呢?用过一些模块的工程师会知道,很多模块都是通过串口来控制或者通过串口透传数据的,比如gsm(2g,4g),gps,wifi,蓝牙等等,这些模块都是通过串口来控制。所以作为一个工程师,必须要搞懂串口。
首先我们了解一下我们的工具,大家可以到我的淘宝店里看看:
https://shop296209296.taobao.com/index.htm?spm=a1z10.5-c.w5002-18352947751.2.acd4173daNW4Pn

想要的可以联系我
下面我们通过Loto虚拟示波器采集不同波特率的TTL的UART 波形:


对比理论的时序图,我们找找起始位和停止位,这个数据是多少?
有时候我们面试会考一个题目,那就是UART波特率9600的时候,它的一个bit是多长时间,这个怎么算?初学者肯定蒙了,我用串口直接就配置然后发数据就行了,从来没算过,下面我总结一下:

波特率2400:1/2400416.67*10^(-6)s=416.67us
波特率4800:1/4800208.33*10^(-6)s=208.33us
波特率9600:1/9600104.17*10^(-6)s=104.17us
波特率19200:1/1920052.08*10^(-6)s=52.08us
波特率57600:1/5760017.36*10^(-6)s=17.36us
波特率115200:1/1152008.68*10^(-6)s=8.68us

对比我们用Loto虚拟示波器采集的数据看看是不是一致呢?


我们算这个数据有什么用呢?是的!没错!就是模拟串口!当单片机串口不够用的时候项目中会用到。接下来我会分析几个论友写的代码,逐步深入理解TTL串口。

下面这个模拟串口的代码:
首先说它的发送吧,发送一个字节,先发送起始位OI_TXD = 0;  然后delay_us(BuadRate_9600);然后依次从低位开始检测Data的每一位,从而拉高拉低OI_TXD,然后延时,移位,重复8次,最后发送停止位发送完一个Data
接收的话:它是stm32开了个定时器4和一个外部中断.外部中断采到下降沿,然后定时器设置为107us中断一次,去采集一个bit,为什么是107us呢?因为此时波特率是9600,一个bit是104.17us,然后可以依次采集每个bit,直到采完一个data。(个人感觉107us不稳定)[mw_shl_code=c,true]#define BuadRate_9600        100

u8 len = 0;        //接收计数
u8 USART_buf[11];  //接收缓冲区

enum{
        COM_START_BIT,
        COM_D0_BIT,
        COM_D1_BIT,
        COM_D2_BIT,
        COM_D3_BIT,
        COM_D4_BIT,
        COM_D5_BIT,
        COM_D6_BIT,
        COM_D7_BIT,
        COM_STOP_BIT,
};

u8 recvStat = COM_STOP_BIT;
u8 recvData = 0;

void IO_TXD(u8 Data)
{
        u8 i = 0;
        OI_TXD = 0;  
        delay_us(BuadRate_9600);
        for(i = 0; i < 8; i++)
        {
                if(Data&0x01)
                        OI_TXD = 1;  
                else
                        OI_TXD = 0;         
               
                delay_us(BuadRate_9600);
                Data = Data>>1;
        }
        OI_TXD = 1;
        delay_us(BuadRate_9600);
}
        
void USART_Send(u8 *buf, u8 len)
{
        u8 t;
        for(t = 0; t < len; t++)
        {
                IO_TXD(buf[t]);
        }
}
        
void IOConfig(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStruct;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);         //使能PB,PC端口时钟
         
         //SoftWare Serial TXD
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;            
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz         
  GPIO_Init(GPIOC, &GPIO_InitStructure);                                          
  GPIO_SetBits(GPIOC,GPIO_Pin_13);                                                
         
         
        //SoftWare Serial RXD
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;               
        GPIO_Init(GPIOB, &GPIO_InitStructure);         

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
        EXTI_InitStruct.EXTI_Line = EXTI_Line14;
        EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //下降沿触发中断
        EXTI_InitStruct.EXTI_LineCmd=ENABLE;
        EXTI_Init(&EXTI_InitStruct);


        NVIC_InitStructure.NVIC_IRQChannel= EXTI15_10_IRQn ;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;  
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  
        NVIC_Init(&NVIC_InitStructure);  
        
}

void TIM4_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
        
        //定时器TIM4初始化
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值        
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
        TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);
        TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断

        //中断优先级NVIC设置
        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级1级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //从优先级1级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器                        
}


int main(void)
{               
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
         delay_init();
         IOConfig();
  TIM4_Int_Init(107, 71);         //1M计数频率
         
  while(1)
        {
                if(len > 10)
                {
                        len = 0;
                        USART_Send(USART_buf,11);
                }
        }
}

void EXTI15_10_IRQHandler(void)
{
        if(EXTI_GetFlagStatus(EXTI_Line14) != RESET)
        {
                if(OI_RXD == 0)
                {
                        if(recvStat == COM_STOP_BIT)
                        {
                                recvStat = COM_START_BIT;
                                TIM_Cmd(TIM4, ENABLE);
                        }
                }
                EXTI_ClearITPendingBit(EXTI_Line14);
        }
}

void TIM4_IRQHandler(void)
{  
        if(TIM_GetFlagStatus(TIM4, TIM_FLAG_Update) != RESET)
        {
                TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);        
                 recvStat++;
                if(recvStat == COM_STOP_BIT)
                {
                        TIM_Cmd(TIM4, DISABLE);
                        USART_buf[len++] = recvData;        
                        return;
                }
                if(OI_RXD)
                {
                        recvData |= (1 << (recvStat - 1));
                }else{
                        recvData &= ~(1 << (recvStat - 1));
                }        
  }               
}
[/mw_shl_code]

Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-22 14:44:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-10-22 15:56:00 | 显示全部楼层
讲的非常详细,感谢分享。
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-22 16:03:57 | 显示全部楼层
HXYDJ 发表于 2018-10-22 15:56
讲的非常详细,感谢分享。

帮忙去店铺踩踩,我会更加努力的
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

3

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2018-8-18
在线时间
67 小时
发表于 2018-10-23 10:38:38 | 显示全部楼层
这示波器必须的顶
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-23 10:53:28 | 显示全部楼层
agelarui 发表于 2018-10-23 10:38
这示波器必须的顶

那我也标记一下您,谢谢支持
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-23 10:58:27 | 显示全部楼层
本帖最后由 秋天 于 2018-12-24 15:03 编辑
agelarui 发表于 2018-10-23 10:38
这示波器必须的顶

谢谢分享
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-23 17:13:05 | 显示全部楼层
自己顶一下
回复 支持 反对

使用道具 举报

0

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2017-8-23
在线时间
23 小时
发表于 2018-10-23 21:03:52 | 显示全部楼层
串口这类还用模拟,肯定没被坑过
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-24 09:20:32 | 显示全部楼层
吃瓜群众 发表于 2018-10-23 21:03
串口这类还用模拟,肯定没被坑过

抛砖引玉
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-24 13:48:44 | 显示全部楼层
本帖最后由 秋天 于 2018-12-24 15:05 编辑

谢谢分享
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-10-24 14:32:37 | 显示全部楼层
这个虚拟示波器怎么样?
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-25 09:09:39 | 显示全部楼层
本帖最后由 秋天 于 2018-12-24 15:03 编辑
ssssssssssss 发表于 2018-10-24 14:32
这个虚拟示波器怎么样?

谢谢分享
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-25 13:55:51 | 显示全部楼层
本帖最后由 秋天 于 2018-12-24 15:04 编辑

谢谢分享
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-10-27
在线时间
5 小时
发表于 2018-10-26 17:04:43 | 显示全部楼层
MARK!  帮顶!!!!!!
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-10-27
在线时间
5 小时
发表于 2018-10-26 17:05:06 | 显示全部楼层
你们的虚拟示波器一般场合够用吗?还有,这虚拟示波器就是采样、宽带分别是多少啊?
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-30 08:57:03 | 显示全部楼层
a673261839 发表于 2018-10-26 17:05
你们的虚拟示波器一般场合够用吗?还有,这虚拟示波器就是采样、宽带分别是多少啊?

我们现在主推的是80m采样,25m带宽,双通道,后续我们还会有逻辑分析仪,信号发生器,
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-30 11:04:22 | 显示全部楼层
a673261839 发表于 2018-10-26 17:05
你们的虚拟示波器一般场合够用吗?还有,这虚拟示波器就是采样、宽带分别是多少啊?

顶一下
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-30 15:53:15 | 显示全部楼层
沉起来快
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-30 16:49:14 | 显示全部楼层
本帖最后由 秋天 于 2018-12-24 15:04 编辑
a673261839 发表于 2018-10-26 17:05
你们的虚拟示波器一般场合够用吗?还有,这虚拟示波器就是采样、宽带分别是多少啊?

谢谢分享
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-10-31 09:13:35 | 显示全部楼层
本帖最后由 秋天 于 2018-12-24 15:05 编辑
ssssssssssss 发表于 2018-10-24 14:32
这个虚拟示波器怎么样?

谢谢分享
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-11-5 15:07:14 | 显示全部楼层
本帖为密码帖 ,请输入密码 
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
 楼主| 发表于 2018-11-7 08:51:38 | 显示全部楼层
本帖为密码帖 ,请输入密码 
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 13:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表