沧州网站制作公司,邯郸信息港征婚交友,专做国际时事评论网站,北海网站设计1.处理器与外部设备通信的两种方式#xff1a;
并行通信
传输原理#xff1a;数据各个位同时传输。优点#xff1a;速度快缺点#xff1a;占用引脚资源多
串行通信
传输原理#xff1a;数据按位顺序传输。优点#xff1a;占用引脚资源少缺点#xff1a;速度相对较慢…1.处理器与外部设备通信的两种方式
并行通信
传输原理数据各个位同时传输。优点速度快缺点占用引脚资源多
串行通信
传输原理数据按位顺序传输。优点占用引脚资源少缺点速度相对较慢
2.串行通信
2.1按照数据传送方向分为
单工数据传输只支持数据在一个方向上传输半双工允许数据在两个方向上传输但是在某一时刻只允许数据在一个方向上传输它实际上是一种切换方向的单工通信全双工允许数据同时在两个方向上传输因此全双工通信是两个单工通信方式的结合它要求发送设备和接收设备都有独立的接收和发送能力。 2.2串行通信的通信方式
同步通信带时钟同步信号传输。SPIIIC通信接口
有时钟同步信号A传到B的过程中每一个位都是根据时钟来传的比如时钟到达上升沿传1bit。
异步通信不带时钟同步信号。UART(通用异步收发器),单总线
A和B之间没有时钟同步信号双方先约定一些波特率、起始位等计算出发送每一bit占用的时间。
常见的串行通信接口
如果是全双工那么发送和接收都要有独立的引脚。半双工一般只占用一个独立的发送\接收引脚。
如果是同步通信那么一定有同步时钟。
通信标准引脚说明通信方式通信方向UART (通用异步收发器)TXD:发送端 RXD:接受端 GND:公共地异步通信全双工单总线 1-wire)DQ:发送/接受端异步通信半双工SPISCK:同步时钟 MISO:主机输入从机输出 MOSI:主机输出从机输入同步通信全双工I2CSCL:同步时钟 SDA:数据输入/输出端同步通信半双工
3.异步串口通信UART
包含
物理层(电气层接口决定通信接口RS232,RS485,RS422,TTL) 数据格式数据层芯片决定起始位校验位等约定好 通信协议协议层程序决定数据出错能检测出来等
UART异步通信方式引脚连接方法
RXD:数据输入引脚。数据接收。TXD:数据发送引脚。数据发送。 TTL串口 RS232 RS485 RS422
两个电路板相连往往用到一些接口而不是直接相连TXRX。
接口类型逻辑1 典型值逻辑0 典型值说明优缺点TTL5/3.30一般MCU串口引脚都支持TTLRS232-15V-3V3V15V3线全双工点对点接口电平高传输速度相对较低传输距离近RS485两根线的压差2~6V压差-2~6V2线半双工点对多主从通信。使用压差传递信号。传输速度高可达10M抗干扰能力强距离远。RS422相对比较少用。
USB串口
MCU发送串口信号经电平转换芯片变为USB信号通过USB连到电脑电脑可以直接识别USB信号。 STM32 UART异步通信方式引脚
串口号RXDTXD1PA10(PB7)PA9PB6)2PA3(PD6)PA2(PD5)3PB11(PC11/PD9)PB10(PC10/PD8)4PC11(PA1)PC10(PA0)5PD2PC126PC7(PG9)PC6(PG14)
4.STM32串口数据格式和通信过程
STM32串口通信过程:信号一位一位传过来速度根据波特率来传。串行移位寄存器一个一个读过来然后一次性写入到输入数据缓冲器里MCU从中读取数据。
MCU写输出数据缓冲器然后一次性给串行移位寄存器然后在波特率控制下把数据一位位送到外部设备。 STM32串口异步通信需要定义的参数
起始位1个逻辑0数据位开始 数据位8位或者9位 奇偶校验位第9位 停止位1,1.5,2位 波特率设置 5.STM32F4xx串口框图
TX:芯片数据发送出去RX数据接收。接收后放到接收移位寄存器然后全部给接收数据寄存器然后CPU可以通过总线读取数据。发送的话CPU把数据写到发送数据寄存器之后数据送到发送移位寄存器数据一位一位的从IO口出去。 对于这个发送和接收移位寄存器必须提前设定好波特率这两个寄存器受发送控制和接收器控制。可以由下图看到发送和接收端共用一个波特率用于确定串行通信的速度。最下面有一个BRR寄存器首先时钟来自于pCLKx pclk经过/usartdiv和/(8*(2-OVER8)),OVER8由控制寄存器的一个位决定可能为0或1把这个时钟作为发送器和接收器的时钟控制发送和接收移位寄存器实现控制传输数据的速度。
对于接收器控制和发送控制图中还有几个寄存器右边SR寄存器记录一些状态标志位左边CR1有一些使能位高位连接中断控制可以触发一些中断。 6.波特率计算方法
波特率决定了串口的通信速度如何计算。
上图OVER8在控制寄存器 1 (USART_CR1)中可找到其中采样频率越高容错性越好但是限制了速度。如果8倍过采样可以提高速度。 小数波特率生成
对 USARTDIV 的尾数值和小数值进行编程时接收器和发送器Rx 和 Tx的波特率均设置为相同值。 当fck确定又要达到某一种波特率此时可以计算出USARTDIV的值是多少。它的值是由USART_BRR 寄存器决定的。
USARTDIV 是一个存放在 USART_BRR 寄存器中的无符号定点数。 当 OVER80 时小数部分编码为 4 位并通过 USART_BRR 寄存器中的 DIV_fraction[3:0] 位编程。 当 OVER81 时小数部分编码为 3 位并通过 USART_BRR 寄存器中的 DIV_fraction[2:0] 位编程此时 DIV_fraction[3] 位必须保持清零状态。 注意 对 USART_BRR 执行写操作后波特率计数器更新为波特率寄存器中的新值。因此波特率 寄存器的值不应在通信时发生更改。 如图所示USART中DIV_Mantissa是设置USARTDIV 的整数部分DIV_Fraction是设置USARTDIV的小数部分。如果经过公式算出USARTDIV37.5该如何设置 USART_BRR寄存器
可以看到波特率寄存器 (USART_BRR)位154一共12位如果设置USARTDIV37.5只需要把高十二位设置成37 。小数则是由低4位决定的由于低四位一共有2^416个数占满了0-1所以可以0.5*168,赋给低四位即可。 可以总结出OVER80时波特率计算公式 ①根据波特率和串口时钟频率计算出USARTDIV的值。
②DIV_FractionUSART的小数部分 X16所得的整数
DIV_MantissaUSART的整数部分
假如OVER80串口时钟为90M需要得到115200的波特率根据公式计算得到USARTDIV90000000/(115200*16)48.828
DIV_Fraction16*0.828的整数部分130X0D
DIV_Mantissa480x30
得到USART1-BRR值为0x30d只要设置串口1的BRR寄存器值位0x30d就可得到115200的波特率。