版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
概述关于自动识别UART串口波特率的这个问题,相信有项目经验,或者认真研究过串口的朋友都应该多多少少知道一点自动识别的方法。
可能绝大部分知道的就是通过通过软件编程让波特率一一匹配来实现,这种方法也是最常见,而且还比较有效的一种方法。
上面这种方法就是大家熟知的通过软件来检测波特率的方法,其实,还有一种方法就是通过串口硬件自身完成波特率来检测。
针对STM32,在ST官方其实在应用笔记和参考手册文档中都有提到。下面,我结合文档简单讲下硬件自动波特率检测的内容。2STM32硬件自动波特率检测ABR:AutoBaudRate,自动波特率检测使接收设备能够接受来自各种以不同速率工作的发送设备的数据,无需事先建立数据速率。1.ABR应用地方事先不知道系统的通信速度。系统正在使用精确度相对较低的时钟源且该机制允许在不测量时钟偏差的情况下获得正确的波特率。2.支持ABR系列在STM32中,支持硬件自动波特率检测的只有部门系列才支持,之前出来比较早的系列不支持(如F1F4),这后面推出来的系列都支持这个功能,包含最新才出来的STM32H7、G0系列都支持。当然,对于内置ABR的STM32系列设备而言,并非所有实例化USART接口均支持自动波特率检测。3.自动波特率检测模式ABR是指接收设备通过检查第一个字符(通常是预先选择的标志字符)确定传入数据速率的过程。
STM32产品上的自动波特率检测功能内置的各种模式基于不同字符模式:模式0:以“1”位为开头的任意字符;模式1:以10xx模式开头的任何字符;模式2:0x7F;模式3:0x55;
提示:A.在所有ABR模式下,都会在同步数据接收期间多次检测波特率,并将每一次的检测值与上一次的检测值进行比较。B.在7位数据长度模式下,不支持0x7F和0x55帧检测ABR模式。
4.代码配置相关代码,官方提供有基于(标准外设库、HAL库的)参考例程,比如F0标准外设库参考代码:staticvoidAutoBauRate_StartBitMethod(void){/*USARTenable*/USART_Cmd(EVAL_COM1,ENABLE);
/*ConfiguretheAutoBaudRatemethod*/USART_AutoBaudRateConfig(EVAL_COM1,USART_AutoBaudRate_StartBit);
/*EnableAutoBaudRatefeature*/USART_AutoBaudRateCmd(EVAL_COM1,ENABLE);
/*WaituntilReceiveenableacknowledgeflagisset*/while(USART_GetFlagStatus(EVAL_COM1,USART_FLAG_REACK)==RESET){}
/*WaituntilTransmitenableacknowledgeflagisset*/while(USART_GetFlagStatus(EVAL_COM1,USART_FLAG_TEACK)==RESET){}
/*LoopuntiltheendofAutobaudratephase*/while(USART_GetFlagStatus(EVAL_COM1,USART_FLAG_ABRF)==RESET){}
/*IfAutoBaudBateerroroccurred*/if(USART_GetFlagStatus(EVAL_COM1,USART_FLAG_ABRE)!=RESET){/*TurnonLED3*/STM_EVAL_LEDOn(LED3);}else{/*TurnonLED2*/STM_EVAL_LEDOn(LED2);
/*WaituntilRXNEflagisset*/while(USART_GetFlagStatus(EVAL_COM1,USART_FLAG_RXNE)==RESET){}
/*WaituntilTXEflagisset*/while(USART_GetFlagStatus(EVAL_COM1,USART_FLAG_TXE)==RESET){}
/*Sendreceivedcharacter*/USART_SendData(EVAL_COM1,USART_ReceiveData(EVAL_COM1));
/*cleartheTEbit(ifatransmissionisongoingoradataisintheTDR,itwillbesentbeforeefectivellydisablingthetransmission)*/USART_DirectionModeCmd(EVAL_COM1,USART_Mode_Tx,DISABLE);
/*ChecktheTransferCompleteFlag*/while(USART_GetFlagStatus(EVAL_COM1,USART_FLAG_TC)==RESET){}}
/*USARTDisable*/USART_Cmd(EVAL_COM1,DISABLE);}5.ABR误差计算由USART时钟源(fCK)决定通信速率范围(尤其是最大通信速率)。接收器采用不同的用户可配置过采样技术,可区分有效输入数据和噪声,从而用于恢复数据。这可以在最大通信速率与抗噪声/时钟不准确性之间实现平衡。可通过编程USARTx_CR1寄存器中的OVER8位来选择过采样方法,可以是波特率时钟的16倍或8倍。USART时钟源频率必须与预期通信速率兼容:•16倍过采样时,波特率介于fCK/65535与fCK/16之间。•8倍过采样时,波特率介于fCK/65535与fCK/8之间。波特率误差取决于USART时钟源、过采样方法和ABR模式。
其中:•预期波特率取决于发送设备•实际波特率是USART接收器使用自动波特率检测操作确定的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论