[size=13.3333px] stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。 [size=13.3333px] 什么是串口 [size=13.3333px] UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器 [size=13.3333px] USART : Universal Synchronous Asynchronous Receiver/Transmitter 通用同步/异步收发器 [size=13.3333px] 一种是常用也是最简单的串行数据传输协议。数据线只需要两根就可以实现全双工。 [size=13.3333px] Tx: 发送数据线 [size=13.3333px] Rx: 接收数据线 [size=13.3333px] A B [size=13.3333px] TX -----------> Rx [size=13.3333px] Rx <------------Tx [size=13.3333px] 全双工: 两个设备可以同时发送和接收 [size=13.3333px] 串行数据: 发送只一根线,一次只能发送一bit. 一bit接着一bit发送和接收。 [size=13.3333px] 模块通信: 上位机 下位机 [size=13.3333px] 通信一般需要两个设备,我们把这两个设备,人为叫做上位机, 下位机。 [size=13.3333px] 上位机: 把处理性能强的机子,上位机。数据大部分处理都在上位机完成。 [size=13.3333px] 下位机: 把数据采集的终端,处理性能单一的机子,下位机。 [size=13.3333px] 串口只有一根发送数据线,假如 A要发送一个字符数据 10101010 给B [size=13.3333px] A -------- --------- [size=13.3333px] -------- ------- ... [size=13.3333px] 高电平周期是多长?即使是不发送数据Tx线上也有一个电平状态,接收方 [size=13.3333px] 它怎么知道你是在发送呢?.... [size=13.3333px] UART数据如何传输? [size=13.3333px] UART protocol 串口协议。 [size=13.3333px] 串口发送和接收数据是以帧为单位. Frame [size=13.3333px] 1帧(Frame)= 1 start bit(起始位) + 5-9bits数据位 + 0/1bit 校验位 + stop bits(0.5, 1,1,5,2) [size=13.3333px] 起始位: 一个周期的低电平 [size=13.3333px] 数据位: 5-9bits数据位,具体是多少bits,需要双方协商。并且传送是先传送LSB(最低位) … MSB [size=13.3333px] 校验位: [size=13.3333px] 0 bit :没有校验位 [size=13.3333px] 1 bit :校验位. “赖子” X [size=13.3333px] D0 D1 D2 … Dn X [size=13.3333px] 奇校验:要保证传输的1为奇数 [size=13.3333px] D0 D1 D2 … Dn X 要保证这一串数据中1的个数为奇数 [size=13.3333px] 1 0 1 0 1 0 1 0 X(1) [size=13.3333px] 1 0 1 0 1 0 1 1 X(0) [size=13.3333px] 偶校验:要保存传输的1为偶数 [size=13.3333px] 停止位: 高电平 [size=13.3333px] 0.5 个停止位。 半个周期的高电平 [size=13.3333px] 1 个停止位 [size=13.3333px] 1.5 个停止位 [size=13.3333px] 2 个停止位 [size=13.3333px] Baudrate(波特率): 传输速率。 [size=13.3333px] 决定 时间周期。 [size=13.3333px] 115200 bps: bits per second [size=13.3333px] 物理层标准 the physical layer standards [size=13.3333px] TTL level UART : TTL电平串口 [size=13.3333px] RS-232: [size=13.3333px] RS-422: [size=13.3333px] RS-485: [size=13.3333px] TTL level UART: [size=13.3333px] 逻辑低电平(0) 0V [size=13.3333px] 逻辑高电平(1) 5V/3.3V [size=13.3333px] RS-232: 适合较长距离传输 [size=13.3333px] 逻辑低电平(0) +3v~+15V [size=13.3333px] 逻辑高电平(1) -3v~-15v [size=13.3333px] TTL UART RS-232 RS-422 RS-485 [size=13.3333px] 电平 1 3.3V/5V 1 -5V ~ -15V +/- 2v +/- 1.5v [size=13.3333px] 0 0V 0 5V ~ +15V [size=13.3333px] 信号 单端信号 单端信号 差分信号 差分信号 [size=13.3333px] 传输长度 < 2m <15m <1200m <1200m [size=13.3333px] 不同标准的串口,引脚也不一样。TX/Rx是一定存在的。 [size=13.3333px] TTL [size=13.3333px] RX [size=13.3333px] TX [size=13.3333px] GND [size=13.3333px] VCC [size=13.3333px] STM32F4xx 串口控制器 [size=13.3333px] TX [size=13.3333px] RX [size=13.3333px] 硬件流控: [size=13.3333px] RTS: Request To Send 请求发送信号 [size=13.3333px] 终端告诉对方可以向我传输数据啦。 [size=13.3333px] CTS: Clear To Send 清除发送信号 [size=13.3333px] 对方告知终端,我要向你发送数据啦 [size=13.3333px] RTS -------> CTS(对方) [size=13.3333px] CTS <------- RTS(对方) [size=13.3333px] 标志位: [size=13.3333px] TXE: Transmit data Register Empty [size=13.3333px] 发送数据寄存器为空。 [size=13.3333px] 不代表上一次数据已经发送完成啦,因为数据有可能还在 shifter里面 [size=13.3333px] 但是此时您可以向TDR写数据啦。 [size=13.3333px] TC : Transmit Complete [size=13.3333px] 发送完成。 [size=13.3333px] 发送移位寄存器中的数据已经发送到Tx引脚上面去了。 [size=13.3333px] RXNE: Read Data register Not Empty [size=13.3333px] 接收数据寄存器不为空。意思是你可以读数据啦。 [size=13.3333px] STM32F4xx串口代码流程 [size=13.3333px] (1) GPIO口配置 [size=13.3333px] 串口的TX/RX 引脚是由GPIO口来复用的。 [size=13.3333px] a. 使能GPIO分组的时钟 [size=13.3333px] RCC_AHB1PeriphClockCmd [size=13.3333px] b. 配置GPIO口的功能 GPIO_Init [size=13.3333px] c. 选择具体的复用功能 [size=13.3333px] GPIO_PinAFConfig [size=13.3333px] (2) usart配置 [size=13.3333px] a. 使能usart时钟
|