串口收发数据

1.1 字符串接收函数

        发送方结束标志是你接收方判断的依据,也可以说是属于协议的一部分。

我们这里使用串口助手数据发送自动添加了\r\n,所以我们将它们看成结束标志。

1.2 数据传输方式

        计算机与外部进行沟通只有并行和串行两种方式,计算机只能知道断电和上电,一根线同一时间只有断电或者上电,多根线就存在断电和上电同时存在。

所以一根线的时候称之为串行通信,多条线就是并行通信。

 

同样速度下一条线传输和8条线传输,谁快?8条,也就说并行传输数据的速度快,但是成本更高

一般情况下对传输速度有要求的地方,比如说:屏幕显示,这些地方使用的都是并行。

串行传输一般在远程地方更合适一些。

 

1.2.1 串行通信的连接方式

一共有三种:单工、半双工、全双工

  • 单工只能发送或者只能接收。
  • 能收发但是不能同时进行。
  • 能同时进行收发操作。

​​​​​​​​​​​​​​

我们的串口使用的是哪一种方式??半双工,虽然USART是全双工异步通信的设备,但是程序和硬件上不支持它这样做,所以选择的是半双工方式工作

​​​​​​​​​​​​​​1.2.2 同步和异步

同步:使用同一个时钟(产生时钟频率的设备是一个)。

异步:使用的时钟不是同一个,但是频率是一样的。

 

​​​​​​​1.3 USART特性 

 

        串口现在好用吗??接收数据要等待,如果没有数据过来不做其它事情,这样是不合理的,有什么办法可以处理这件事?中断 

2.1 中断的简介

2.1.1 中断是什么?

中断是一种处理事件的方式,或者说是一种机制。

在STM32中就是一种它提供给我们的机制,一种用于处理事件的方式。

什么机制??程序在运行过程中如果发生了中断对应的事件,优先处理中断事件

假设程序正在运行流水灯,此时如果有数据从电脑发送过来了,我要先去把数据接收到程序中。

     

要产生中断必要的条件:

1)程序一直在运行状态

2)中断机制是开启状态

3)产生中断的东西报备了

4)中断产生后处理方式设计好了

中断处理过程:异常(中断)中断源-->允许中断-->申请中断--> CPU 响应-->保护现场(栈)--> 跳转处理-->返回。

​​​​​​​2.1.2 中断有什么用??

处理突发事件。

为什么用中断处理突发事件,为了节约CPU资源,因为突发事件是不确定什么时候产生的。

​​​​​​​​​​​​​​2.1.3 中断如何使用?

首先,确定中断源——串口接收

然后,开启中断——串口

申请中断??——有数据到达

CPU响应??——数据到了

保护现场??——现有程序停止

处理——中断服务函数

返回——继续执行原有程序

2.2 串口中断

2.2.1 查找串口中断

 

从这里可以了解到,串口1的中断是37

​​​​​​​2.2.2 怎么开启?

 

 

中断使能寄存器。

​​​​​​​2.2.3 优先级的概念

优先级代表谁先谁后,在这里代表谁先执行,谁后执行,说的是中断,意思是多个中断一起触发谁先执行。

但是它还包含另一层意思,意思是谁可以打断谁。如果有某个中断正在执行处理,但是我这个更加紧急,优先要处理我这个中断,这时候优先级设置要更高。

总结:中断优先级表示了谁可以打断谁的执行,还有就是谁先谁后。

因为优先级有三种:抢占、响应和自然。

  • 抢占优先级代表谁可以打断谁;
  • 响应优先级代表谁先谁后执行。
  • 自然优先级只有在抢占和响应一样,并且无法区分谁先谁后的时候起作用,自然优先级就是它的位置也就是编号。

优先级数字越小优先级越高。

怎么设置优先级???

 

给谁设置优先级就指定其对应的下标,设置的8位数据就代表优先级,但是需要根据分组进行判定。

注意:一个程序只能存在一种分组。

在cortex-m3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:

  • 第0组:所有8位用于指定响应优先级(抢占:0,响应:0~255)
  • 第1组:最高1位用于指定抢占式优先级(0~1),最低7位用于指定响应优先级(0~127)
  • 第2组:最高2位用于指定抢占式优先级(0~3),最低6位用于指定响应优先级(0~63)
  • 第3组:最高3位用于指定抢占式优先级(0~7),最低5位用于指定响应优先级(0~31)
  • 第4组:最高4位用于指定抢占式优先级(0~15),最低4位用于指定响应优先级(0~15)
  • 第5组:最高5位用于指定抢占式优先级(0~31),最低3位用于指定响应优先级(0~7)
  • 第6组:最高6位用于指定抢占式优先级(0~61),最低2位用于指定响应优先级(0~3)
  • 第7组:最高7位用于指定抢占式优先级(0~127),最低1位用于指定响应优先级(0~1)

分组没有设置,咋设置?

 

​​​​​​​2.2.4 串口中断允许

 

 

 

​​​​​​​2.2.5 编写中断服务函数

 

 

配置完成,看完现象,现在总结一下。

所谓中断是用于处理突发事件的,你首先要开启中断(CPU允许,自己开启),然后编写中断服务函数,当中断事件产生的时候,代码回自动进入到中断服务函数去执行,执行完返回原来的地方继续执行原有程序。

注意:你不要在中断里面做过多停留。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值