ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【嵌入式学习】嵌入式原理知识-串口(二)

【嵌入式学习】嵌入式原理知识-串口(二) 1. 串口通信协议1.1 基本介绍串口是一种通信方式其通信协议为通过高低电平代表1-0信息一帧数据示意图如下1.2 示例例1通过串口发送十进制数字27这是小头也就是先发低位例2发送字符串”hello“选择的协议是8位数据位无校验位。1.3 协议类型主要包括数据位的数量是否包含校验位是否包含停止位等等。因为我们通常习惯于传输一个字节的数据所以通常选择第一个和第四个类型。校验位如果前面的数据位不满足对应的校验标准那么就通过校验位来调整使得满足标准。2. 串口外设的使用方法2.1 串口内部结构图将要发送的数据放置在发送数据寄存器。串口会自动按照对应的协议标准将数据发送。对于接受的数据。串口会进行协议解析将数据存在接受数据寄存器中。2.2 串口具体的工作原理将发送数据寄存器的数据移至移位寄存器通过移位将数据发送出去。相同的数据接收也是将移位寄存器的值存储至接受数据寄存器。所有的数据接受完毕后一并至接受数据寄存器。上述的过程也就是发送-并到串的过程。接受-串到并的过程。只需要处理接受寄存器中的值即可。2.3 数据帧格式可以选择数据帧的长度是否选择把最后一位作为校验位奇校验还是偶校验停止位的长度2.4 波特率的设置波特率每秒钟最多传输多少位-比特常用波特率9600’115200921600波特率的设置对应结构图的左上角所示其中只有波特率寄存器的值可以自己设置。通过如下操作可以实现波特率为115200的设置2.5 串口的模式全双工半双工同步硬件流控全双工-数据传输完全双向可以同时双向传输半双工-只能单向的发送数据同步- 添加一个时钟线进行同步硬件流控-相比于TX,RX引脚增加CTS与RTS3. 串口发送数据3.1 发送标志位1. TXETransmit Data Register Empty- 发送数据寄存器空.当TXE1时表示发送数据寄存器空。当TXE0时表示发送数据寄存器非空。通常在发送数据时要判断发送数据寄存器是否为空。否则会将发送数据寄存器覆盖掉。2. TCTransmiy Complete- 发送完成当发送数据寄存器和移位寄存器均为空时TC1;否则为0。一般通过TXE来判断是否可以写入数据至发送数据寄存器通过TC来判断是否发送完成了。3.2 串口使能开关HAL库函数__HAL_UART_ENABLE(huart1);// 使能串口__HAL_UART_DISABLE(huart1);// 关闭串口对应下图的总开关3.3 串口获取标志位函数查询标志位函数前面的函数表示 此函数带有返回值。作用 查询串口标志位的值返回值RESET-0;SET-1;// 1. 读硬件标志位SR 寄存器FlagStatus__HAL_UART_GET_FLAG(UART_HandleTypeDef*huart,uint32_tFlag);// 2. 读中断是否使能同时查标志位 中断开关ITStatus__HAL_UART_GET_IT_SOURCE(UART_HandleTypeDef*huart,uint32_tIT);4. 格式化串口发送参照https://blog.csdn.net/2301_81230001/article/details/157473800重定向串口即可实现格式化串口发送在usart.h中更改函数#includestdio.hstruct__FILE{inthandle;};FILE __stdout;void_sys_exit(intx){xx;}intfputc(intch,FILE*f){while((USART1-SR0X40)0);USART1-DR(uint8_t)ch;returnch;}5. 串口接受数据5.1 串口接受数据的过程经过移位寄存器与接受数据寄存器最终实现接受。5.2 接受标志位1. RXNEReceive Data Register Not Empty- 接受数据寄存器非空当RXNE1时 此时接受数据寄存器为空当RXNE0时 此时接受数据寄存器为非空2. PEParity Error- 奇偶校验错误串口接收时硬件会自动算一次奇偶校验算出来的结果和收到的校验位对不上就把 PE 置 1。3. FEFrame Error - 帧格式错误接收到了无效的数据帧则FE1否则FE04. NENoise Error - 噪声错误接受的数据中检测到了噪声则NE1否则NE0在接受数据的时候通过连续三次采样当三次采样的值相同时此时为最终值。当三次有不同时此时会认为检测到噪声认为数据不可靠。5. OREOverrun Error - 过载错由于过载造成数据丢失则ORE1否则ORE0;
返回列表