原创 串行通讯介绍+程序编写+程序编写的优化

2016-2-12 22:24 992 16 17 分类: MCU/ 嵌入式

首先比较一下串行通讯和并行通讯的特点。

并行通讯的特点:接线较多,速度快,控制简单。

串行通讯的特点:接线少,速度慢,控制复杂。


一、串口通讯的传输方向:

1)单工:数据传输仅能沿一个方向。不能事项反向传输。

2)半双工:数据传输可以沿两个方向,但需要分时进行。

3)全双工:数据可以同时进行双向传输。

半双工的通讯实例(RS485通讯电路):

一个数据通道,是差分信号,由A线和B线共同构成。

接收管脚1,发送管脚4,方向控制管脚23,当方向控制管脚拉低时,允许485总线上的数据传到单片机(左边);当方向控制管脚拉高,允许单片机向485总线上发送数据。

倘若有很多设备挂在485总线上,这些设备在同一时刻只有一个设备处在发送状态,其他设备都处于接收状态。如果在同一时刻有两个或两个以上设备处于发送状态会导致485总线错误,通讯失败。因此设计电路和编写程序都要注意。在每次单片机发送数据完毕后要把发送管脚的电平拉低,不允许485总线上其他设备发送数据。

二、串行通信的类型:

(1)同步通信:指发送方在同步时钟的控制下,将数据逐位发出去,接收方在同步时钟控制下逐位接收,如SPI,IIC等。

(2)异步通信:指双方要线约定好通讯格式,如:波特率,数据格式(位数,有无起始位、停止位个数、有无校验位)如UART,单总线通讯(DS18B20)

三、Stm32f4 串口通讯程序编程:

1.    新建串口通讯模块文件:SCI.CSCI.H

2.    编写 SCI.CSCI.H文件

(1)    开启 USART1时钟 RCC_APB2PeriphClockCmd

(2)    开启GPIOA时钟:RCC_AHB1PeriphClockCmd

(3)    配置GPIOA Pin9Pin10为串口功能:GPIO_InitGPIO_PinAFConfig

(4)    初始化串口参数:USART_Init

(5)    串口中断配置:USART_ITConfig

(6)    中断优先配置:NVIC_PriorityGroupConfigNVIC_Init

(7)    使能串口:USART_Cmd

(8)    串口中断函数编写

(9)    main函数中调用串口初始化

下面是一丝不苟的截图:

20160212221239242.jpg

20160212221143357.jpg

四、串口通讯的优化:

1.    文件优化:增加NVIC模块

2.    中断函数优化:中断函数内做的事情越少越好也就是说中断函数的运行时间越短越好

3.    变量优化

Volatile 的使用: volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能有货读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

 一般来说寄存器的暂时值和这个变量直接地址上存放的值是相等的,但是对于如果在中断中改变的变量那么这个值的暂存值和直接地址上存放的值可能不相等。


一下是一本正经的截图:

将中断从USART_Init中拿出来作为一个中断函数的模块。

NVIC.C文件:

 20160212221735166.jpg

定义两个全局变量:

20160212221807766.jpg

用以:

20160212222128694.jpg


这样,主函数整洁就如下图所示:

20160212222306972.jpg

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1734959 2016-3-10 23:50

__I0,__O,__I
相关推荐阅读
用户1868903 2016-04-24 11:12
Cadence 画原理图
    Cadence 里面很多库,但是用多了就会知道,很多芯片库都是没有的,这个时候就需要自己画原理图了。很多工程师为了更快捷的画原理图,都会建立自己的原理图库。    自己建立一个平时用得...
用户1868903 2016-04-03 18:54
Arduino模拟串口
      现在很多人喜欢  Arduino 因为简单好用方便。虽然Arduino的串口只有一个,但是不担心,因为还有其他的IO口可以模拟串口,这篇博文里咱就分享一个用其他IO口模拟串口的exam...
用户1868903 2016-03-27 22:20
学习心得
 最近的一个项目里涉及到文件的打开...
用户1868903 2016-03-10 14:11
学习心得
最近在做一个项目,里面要用到stm32的HTTP网页服务器相关的知识,于是开始学习各种网络知识,都是以前没接触过的。看了一大堆协议,绕得我晚上都睡不踏实了,, 囧。。。网上的资源丰富但是同时也很杂。...
用户1868903 2016-03-04 13:47
电子时钟的设计(三)
一个蛮简单的要用三篇博文也是够够的。主要是我把程序贴得太仔细了。。囧。。应该详略得当,,,好吧。就最后cut掉一点了。。继上面的电子时钟的设计(二)了。 /**********************...
用户1868903 2016-03-04 13:39
电子时钟的设计(二)
上接电子时钟的设计(一)。由于篇幅和板式的限制,将.h和.c 合并在同一个文件,便于大家查看。这里再贴上 模式选择函数和秒表函数。 /*********************************...
我要评论
1
16
关闭 站长推荐上一条 /3 下一条