CN115437991A - 一种通过模拟串口接收程序校准mcu晶振频率的方法 - Google Patents
一种通过模拟串口接收程序校准mcu晶振频率的方法 Download PDFInfo
- Publication number
- CN115437991A CN115437991A CN202211135639.1A CN202211135639A CN115437991A CN 115437991 A CN115437991 A CN 115437991A CN 202211135639 A CN202211135639 A CN 202211135639A CN 115437991 A CN115437991 A CN 115437991A
- Authority
- CN
- China
- Prior art keywords
- serial port
- mcu
- frequency
- crystal oscillator
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Synchronisation In Digital Transmission Systems (AREA)
Abstract
本发明涉及一种通过模拟串口接收程序校准MCU晶振频率的方法,其解决了有MCU通讯存在误差导致串口通讯失败的技术问题,其在MCU程序里面设定特定的串口通讯波特率;使MCU模拟串口接收程序能接收到非0bit;在延时半个bit的时间,再依次循环读取bit0~bit7的数据,读取到bit7之后,程序运行到串口数据为0的时刻,加一个固定的延时时间t,每次检查后将检查的总次数n加1,直到读取到停止位的高电平之后,停止计数,得出一个总的循环读取次数n,根据n值的大小推算出MCU晶振频率的误差;推算出MCU晶振频率的误差之后,通过修改硬件数值、修改模拟串口程序的串口数据的方法,达到预期的频率。本发明可广泛应用于MCU与上位机通讯。
Description
技术领域
本发明涉及数据通信领域,特别是涉及一种通过模拟串口接收程序校准MCU晶振频率的方法。
背景技术
微控制单元(MCU)在与上位机进行串口通讯时,如果MCU内部RC晶振频率有误差,会造成串口发送与接收的波特率产生误差,误差较大(超过3~4%)时会造成串口通讯失败。
发明内容
本发明为了解决现有MCU通讯存在误差导致串口通讯失败的技术问题,提供一种能够通过模拟串口接收程序校准MCU晶振频率的方法。
本发明提供一种通过模拟串口接收程序校准MCU晶振频率的方法,其步骤包括:
步骤1,在MCU程序里面设定串口通讯波特率;
步骤2,将上位机发送给MCU的串口数据的帧头字节设定为高位有连续为0,低位有连续为1的数据,使MCU模拟串口接收程序能接收到非0bit;
步骤3,在上位机发送串口帧头数据时,起始位由高电平跳变为低电平,MCU进入中断程序,确认是串口起始位之后,延时半个bit的时间,再依次循环读取bit0~bit7的数据,读取到bit7之后,程序运行到串口数据为0的时刻,MCU程序开始循环检查停止位的高电平,在每次检查之间加一个固定的延时时间t,每次检查后将检查的总次数n加1,直到读取到停止位的高电平之后,停止计数,得出一个总的循环读取次数n,根据n值的大小推算出MCU晶振频率的误差;
步骤4,推算出MCU晶振频率的误差之后,对于内部有寄存器调整晶振频率的MCU,修正晶振频率寄存器的值,使MCU晶振频率达到预期的频率,校准MCU晶振频率;对于内部没有寄存器调整晶振频率的MCU,通过修正模拟串口接收程序里面读取1bit的延时函数,校准模拟串口的通讯波特率。
优选地,所述步骤4中所述内部有寄存器调整晶振频率内部有寄存器调整晶振频率的MCU同时具有硬件串口时,修正晶振频率寄存器的值,得到准确的波特率,改用硬件串口与上位机进行通讯。
优选地,所述步骤4中所述内部有寄存器调整晶振频率内部有寄存器调整晶振频率的MCU同时不具有硬件串口时,用模拟串口接收程序来接收上位机的串口数据或用模拟串口发送程序给上位机发送串口数据。
优选地,所述步骤1中串口通讯波特率为在MCU程序里面设计与串口通讯1bit耗时接近的延时函数delay(m),其中m为可调的整数,在MCU晶振频率准确的情况下,delay(m)的运行时间加上MCU检查串口电平的时间正好等于串口通讯1bit的时间。
优选地,所述步骤4中所述修正模拟串口接收程序里面读取1bit的延时函数的具体方法为:推算出MCU晶振频率的误差之后,使用模拟串口接收和发送程序与上位机进行串口通讯,对所述延时函数delay(m)进行修正,在m值上加上偏差值,使MCU运行delay(m)和检查串口电平的实际时间与串口通讯1bit时间误差在3%以内。
本发明的有益效果是:
本发明通过MCU的管脚电平变化中断来模拟串口接收上位机的串口数据,在约定串口通讯波特率的情况下,可以通过特定的通讯帧头设计,在MCU模拟串口接收程序中增加校准MCU晶振频率的算法,MCU晶振频率经过校准之后,就可以校准MCU的串口波特率,保证与上位机串口通讯数据的准确性。
附图说明
图1是本发明校准MCU晶振频率模式示意图;
图2是本发明正常模拟串口接收模式示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步说明,以使本发明所属技术领域的技术人员能够容易实施本发明。
实施例:
本发明进行频率校准的方法如下:
步骤1,首先约定一个特定的串口通讯波特率,在MCU程序里面设计一个与串口通讯1bit(位)耗时接近的延时函数delay(m),其中m为一个可调的整数,在MCU晶振频率准确的情况下,delay(m)的运行时间加上MCU检查串口电平的时间正好等于串口通讯1bit的时间。
步骤2,将上位机发送给MCU的串口数据的帧头字节(第一个字节)设定为高位有连续为0,低位有连续为1的数据,比如0X03,0X06,0X07,0X0C,0X0E,0X0F,0X13,0X16,0X17,0X1C,0X1E,0X1F等数据,这样可以保证串口数据的停止位一定是从0到1的跳变,在停止位之前会有较长时间的低电平,MCU模拟串口接收程序能接收到一定的非0bit,可以作为频率校准程序的一个判断条件,避免MCU把错误的串口数据误认为是可以进行频率校准的数据。
步骤3,如图1所示,在MCU频率未校准时,将MCU串口接收管脚设置为允许电平变化中断,上位机发送串口数据帧头格式8位(bit),无奇偶校验位起始位到结束位之间为9位时间帧头数据以0X1C为例:起始位由高电平(1)跳变为低电平(0),MCU进入中断程序,先立即检查串口接收管脚电平应该为0,确认是串口起始位。之后延时半个bit左右的时间,再依次循环读取bit0~bit7的数据,这样不会读出准确的帧头数据,但是会读到帧头中间的非0bit。读取到bit7之后,程序运行到串口数据为0的时刻,距离串口数据的停止位还有1.5bit左右的时间,距离停止位的时间与MCU晶振频率的误差有关,如果MCU晶振频率偏快,读取到bit7之后距离停止位的时间就会长一点。这时MCU程序开始循环检查停止位的高电平,在每次检查之间加一个固定的延时时间t,每次检查后将检查的总次数n加1,直到读取到停止位的高电平之后,停止计数,得出一个总的循环读取次数n。如果MCU晶振频率偏快,n值就会比较大;如果MCU晶振频率偏慢,n值就会比较小。根据n值的大小可以推算出MCU晶振频率的误差。
步骤4,推算出MCU晶振频率的误差之后,对于内部有寄存器调整晶振频率的MCU,可以修正晶振频率寄存器的值,让MCU的晶振频率达到预期的频率。对于有硬件串口的MCU,就可以直接改用硬件串口,得到准确的波特率,与上位机进行通讯。对于没有硬件串口的MCU,还可以用模拟串口接收程序来接收上位机的串口数据,具体模拟串口接收的流程参考图2,上位机发送串口数据格式8位(bit),无奇偶校验位,MCU晶振频率经过校准后用电平变化中断模拟串口。另外可以用模拟串口发送程序给上位机发送串口数据。
步骤5,对于内部没有寄存器调整晶振频率的MCU,推算出MCU晶振频率的误差之后,可以使用模拟串口接收和发送程序与上位机进行串口通讯,需要对上述步骤1里提到的延时函数delay(m)进行修正,在m值上加上一定的偏差值,使MCU运行delay(m)和检查串口电平的实际时间接近串口通讯1bit的时间,误差在3%以内就可以保证MCU接收和发送串口数据的准确性。
以上所述仅对本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡是在本发明的权利要求限定范围内,所做的任何修改、等同替换、改进等,均应在本发明的保护范围之内。
Claims (5)
1.一种通过模拟串口接收程序校准MCU晶振频率的方法,其特征是,其步骤包括:
步骤1,在MCU程序里面设定串口通讯波特率;
步骤2,将上位机发送给MCU的串口数据的帧头字节设定为高位有连续为0,低位有连续为1的数据,使MCU模拟串口接收程序能接收到非0bit;
步骤3,在上位机发送串口帧头数据时,起始位由高电平跳变为低电平,MCU进入中断程序,确认是串口起始位之后,延时半个bit的时间,再依次循环读取bit0~bit7的数据,读取到bit7之后,程序运行到串口数据为0的时刻,MCU程序开始循环检查停止位的高电平,在每次检查之间加一个固定的延时时间t,每次检查后将检查的总次数n加1,直到读取到停止位的高电平之后,停止计数,得出一个总的循环读取次数n,根据n值的大小推算出MCU晶振频率的误差;
步骤4,推算出MCU晶振频率的误差之后,对于内部有寄存器调整晶振频率的MCU,修正晶振频率寄存器的值,使MCU晶振频率达到预期的频率,校准MCU晶振频率;对于内部没有寄存器调整晶振频率的MCU,通过修正模拟串口接收程序里面读取1bit的延时函数,校准模拟串口的通讯波特率。
2.根据权利要求1所述通过模拟串口接收程序校准MCU晶振频率的方法,其特征在于,所述步骤4中所述内部有寄存器调整晶振频率内部有寄存器调整晶振频率的MCU同时具有硬件串口时,修正晶振频率寄存器的值,得到准确的波特率,改用硬件串口与上位机进行通讯。
3.根据权利要求1所述通过模拟串口接收程序校准MCU晶振频率的方法,其特征在于,所述步骤4中所述内部有寄存器调整晶振频率内部有寄存器调整晶振频率的MCU同时不具有硬件串口时,用模拟串口接收程序来接收上位机的串口数据或用模拟串口发送程序给上位机发送串口数据。
4.根据权利要求1所述通过模拟串口接收程序校准MCU晶振频率的方法,其特征在于,所述步骤1中串口通讯波特率为在MCU程序里面设计与串口通讯1bit耗时接近的延时函数delay(m),其中m为可调的整数,在MCU晶振频率准确的情况下,delay(m)的运行时间加上MCU检查串口电平的时间正好等于串口通讯1bit的时间。
5.根据权利要求4所述通过模拟串口接收程序校准MCU晶振频率的方法,其特征在于,所述步骤4中所述修正模拟串口接收程序里面读取1bit的延时函数的具体方法为:推算出MCU晶振频率的误差之后,使用模拟串口接收和发送程序与上位机进行串口通讯,对所述延时函数delay(m)进行修正,在m值上加上偏差值,使MCU运行delay(m)和检查串口电平的实际时间与串口通讯1bit时间误差在3%以内。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211135639.1A CN115437991A (zh) | 2022-09-19 | 2022-09-19 | 一种通过模拟串口接收程序校准mcu晶振频率的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211135639.1A CN115437991A (zh) | 2022-09-19 | 2022-09-19 | 一种通过模拟串口接收程序校准mcu晶振频率的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115437991A true CN115437991A (zh) | 2022-12-06 |
Family
ID=84249974
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211135639.1A Pending CN115437991A (zh) | 2022-09-19 | 2022-09-19 | 一种通过模拟串口接收程序校准mcu晶振频率的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115437991A (zh) |
-
2022
- 2022-09-19 CN CN202211135639.1A patent/CN115437991A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109947073B (zh) | 具有提高的数据速率和自动协议检测的短脉冲宽度调制码/单边半字节传输的传感器 | |
CN109075742B (zh) | 波特率校准电路及串口芯片 | |
CN111314018B (zh) | 波特率自适应调节处理系统及方法、信息数据处理终端 | |
WO2019105143A1 (zh) | 一种基于蓝牙的数据通讯的方法、设备及存储介质 | |
CN111200581A (zh) | 基于lvds总线的数据收发模块 | |
CN107147553B (zh) | 从站波特率及帧格式的调整方法、调整装置及调整设备 | |
CN110460505B (zh) | 一种并行总线的时序校准方法、装置及接收端设备 | |
CN111800249A (zh) | 串行通信波特率误差容忍范围提升方法及系统 | |
US20180041330A1 (en) | Method and apparatus for automatic skew compensation | |
CN107040549A (zh) | 一种tcp粘包处理方法、服务器及系统 | |
US20170033955A1 (en) | Methods and apparatus to perform serial communications | |
EP2889772A1 (en) | Serial link fault detection system and method | |
WO2022222633A1 (zh) | 一种功率控制方法、终端设备、网络设备及存储介质 | |
CN111177060A (zh) | 串口数据发送方法、接收方法、相应装置及终端设备 | |
CN110148292A (zh) | 一种无线遥控编解码方法及编解码装置 | |
US11175397B2 (en) | Wireless fidelity Wi-Fi ranging method and system, and related device | |
CN115437991A (zh) | 一种通过模拟串口接收程序校准mcu晶振频率的方法 | |
WO2022156767A1 (zh) | 数据传输的方法、装置、设备、系统及计算机可读存储介质 | |
TWI722947B (zh) | 電子裝置與用於電子裝置的訊框傳送方法 | |
US11356306B2 (en) | Technologies for cooperative link equalization without disruption to link traffic | |
US10050769B2 (en) | Time synchronization method and apparatus | |
CN111339020A (zh) | 一种串口数据的收发方法 | |
CN113760808A (zh) | 一种电源初次级串口通讯方法、系统、存储介质 | |
US20100064056A1 (en) | Communication system and method | |
CN102457431B (zh) | 信元传输方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |