用于嵌入式系统的模拟串口方法

文档序号:6440000阅读:153来源:国知局
专利名称:用于嵌入式系统的模拟串口方法
技术领域
本发明涉及一种用于嵌入式系统以使用软件的方式模拟串口的方法,利用MCU的通用IO引脚及可中断IO引脚的中断结合定时器中断以软件的方式模拟串口完成数据的接收及发送。
背景技术
在工业领域串口使用及其普遍,很多成熟产品经常会出现由于客户需求的变化, 需要增加某些功能,而这些功能需要用到额外的串口,但是现有的成熟产品又没有额外的空闲串口,对于这种需求如果采取更换MCU或者增加额外的串口扩展芯片来解决既不经济又增加额外的研发设计成本。

发明内容
本发明通过利用MCU的IO引脚及定时器中断模拟串口进行数据的接收和发送,在不更换MCU及增加额外的串口扩展芯片的情况下,增加串口减少产品的研发投入及硬件成本。为了实现上述目的,本发明的技术方案是通过MCU的可中断IO引脚、通用IO引脚和定时器模拟串口。在模拟串口接收数据时,MCU的接收引脚中断触发启动采样定时器,所述采样定时器的定时间隔根据模拟串口设定的波特率计算得到,定时器启动后在每个采样间隔对模拟串口的接收IO的状态进行采样,得到当前时刻串口接收的数据流的一个数据位的状态,当采样到一个字节的数据位之后停止采样,根据本周期内的采样到的数据位拼合成一个字节的数据。模拟串口发送数据时,根据模拟串口波特率设定定时器周期,启动定时器,每个周期中根据要发送的数据的数据位设定模拟串口发送数据脚的状态,当一个字节的数据发送完成后停止定时器。作为具体化,所述模拟串口接收数据的步骤为①设置MCU模拟串口的接收引脚的IO为低电平触发中断,其中所述接收引脚为可中断IO引脚;②当模拟串口接收引脚触发中断后根据模拟串口设置的波特率计算出定时器的周期,禁止模拟串口接收引脚的触发中断,启动定时器;其中,步骤②中所述的定时器周期=1/(模拟串口波特率* 2)③定时器首次触发中断后读取模拟串口的接收引脚的状态,如果模拟串口接收引脚的状态为高电平则表示模拟串口接收数据出错,禁止定时器,回到步骤①;如果模拟串口接收引脚的状态为低电平则表示模拟串口接收数据起始位正确,重新设定定时器周期,重新启动定时器,跳转到步骤④继续;其中,步骤③中所述的定时器周期=1/模拟串口波特率④定时器触发中断后读取模拟串口的接收引脚的状态,如果模拟串口接收引脚的状态为高电平则表示模拟串口接收到一位值为1的数据;
如果模拟串口接收引脚的状态为低电平则表示模拟串口接收到一位值为0的数据;保持定时器周期不变,重新启动定时器;⑤重复上述步骤④,重复N次后,无校验位通信跳转到步骤⑥,有校验位通信则跳转到步骤⑦;其中,N =模拟串口设定的数据位+模拟串口设定的停止位+模拟串口设定的校验位⑥把接收到的数据按位拼合成字节存入接收缓冲区,通知上层应用程序已接收到一个字节数据;⑦统计接收到的数据位的高位的个数和设定的奇偶校验对比,如果统计出的高位的个数和设定的奇偶校验一致,则把接收到的数据按位拼合成字节存入接收缓冲区,通知上层应用程序已接收到一个字节数据;如果统计出的高位的个数和设定的奇偶校验不一致,丢弃本次接收到的数据位;⑧停止定时器同时禁止定时器中断,重复步骤①至⑦完成持续数据接收过程。作为具体化,所述模拟串口发送数据的步骤为(1)无数据发送时保持发送引脚为高电平,其中发送引脚为通用IO引脚;(2)当用户需要发送数据时,设定定时器周期,置发送引脚为低电平,启动定时器;其中,步骤O)中所述的定时器周期=1/模拟串口波特率(3)定时器中断后,根据待发送数据的最低位设定发送引脚的电平把正在发送的数据右移一位;其中,最低位为1则设置发送引脚保持高电平,最低位为0则设置发送引脚保持低电平(4)重复步骤( 直至当前字节发送完成,无校验发送数据跳转到步骤( ,有奇偶校验则跳转到步骤(6);(5)置发送引脚为高电平,完成当前字节的发送,跳转到步骤(1)继续下个字节的发送;(6)根据设定的奇偶校验及步骤( 中发送的1的个数设置下面一个定时周期内的发送引脚的电平;(7)置发送IO为高电平,完成当前字节的发送并保持本次设定的定时器周期为2 个以上的周期,跳转到步骤(1)继续下个字节的发送。本发明提供的方法可以在不更换设计方案同时不增加额外的硬件成本的条件下增加整个产品的串口数量,以满足用户的需求,此方法可以直接减少更改硬件方案带来的研发成本的投入,同时也可以减少增加额外的硬件进而控制硬件成本的增加。


图1为本发明的起始IO中断触发时刻及接收数据过程中的定时器中断时刻示意图;图2为本发明的发送时刻的定时器中断的触发时刻的示意图。
具体实施例方式下面结合附图和具体实施方式
对本发明进行进一步说明。在接收数据的过程中,利用可中断IO引脚的低电平中断判断接收数据的开始。开始接收数据后根据通信波特率计算定时器的定时周期,设定定时器中断。在定时器中断里判断接收到的数据位。根据数据位、校验位、停止位的个数在定时器中断内接收足够的数据位。根据接收到的数据位拼合成一个字节的数据。如图1所示,为本发明起始IO中断触发时刻及接收数据过程中的定时器中断时刻。如图2所示,为经过本发明发送时刻的定时器中断的触发时刻的示意图。在发送数据的过程中,根据发送要发送数据的通信波特率计算定时器的中断周期。每次定时器中断时根据当前要发送的数据位设定MCU的IO引脚的状态。数据位发送完成后根据设定的奇偶校验及发送的数据位中的1的个数决定下一次定时器中断时需要设置的IO引脚的状态。发送完一个字节后保持发送IO引脚为高电平持续不少于2个定时器周期的时间。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.用于嵌入式系统的模拟串口方法,所述方法通过MCU的可中断IO引脚、通用IO引脚和定时器模拟串口,其特征在于,模拟串口接收数据时,MCU的接收引脚中断触发启动采样定时器,所述采样定时器的定时间隔根据模拟串口设定的波特率计算得到,定时器启动后在每个采样间隔对模拟串口的接收IO的状态进行采样,得到当前时刻串口接收的数据流的一个数据位的状态,当采样到一个字节的数据位之后停止采样,根据本周期内的采样到的数据位拼合成一个字节的数据;模拟串口发送数据时,根据模拟串口波特率设定定时器周期,启动定时器,每个周期中根据要发送的数据的数据位设定模拟串口发送数据脚的状态,当一个字节的数据发送完成后停止定时器。
2.根据权利要求1所述的用于嵌入式系统的模拟串口方法,其特征在于,所述模拟串口接收数据的步骤为①设置MCU模拟串口的接收引脚的IO为低电平触发中断,其中所述接收引脚为可中断 IO引脚;②当模拟串口接收引脚触发中断后根据模拟串口设置的波特率计算出定时器的周期, 禁止模拟串口接收引脚的触发中断,启动定时器;其中,步骤②中所述的定时器周期=1/(模拟串口波特率拉)③定时器首次触发中断后读取模拟串口的接收引脚的状态,如果模拟串口接收引脚的状态为高电平则表示模拟串口接收数据出错,禁止定时器,回到步骤①;如果模拟串口接收引脚的状态为低电平则表示模拟串口接收数据起始位正确,重新设定定时器周期,重新启动定时器,跳转到步骤④继续;其中,步骤③中所述的定时器周期=1/模拟串口波特率④定时器触发中断后读取模拟串口的接收引脚的状态,如果模拟串口接收引脚的状态为高电平则表示模拟串口接收到一位值为1的数据;如果模拟串口接收引脚的状态为低电平则表示模拟串口接收到一位值为0的数据;保持定时器周期不变,重新启动定时器;⑤重复上述步骤④,重复N次后,无校验位通信跳转到步骤⑥,有校验位通信则跳转到步骤⑦;其中,N =模拟串口设定的数据位+模拟串口设定的停止位+模拟串口设定的校验位⑥把接收到的数据按位拼合成字节存入接收缓冲区,通知上层应用程序已接收到一个字节数据;⑦统计接收到的数据位的高位的个数和设定的奇偶校验对比,如果统计出的高位的个数和设定的奇偶校验一致,则把接收到的数据按位拼合成字节存入接收缓冲区,通知上层应用程序已接收到一个字节数据;如果统计出的高位的个数和设定的奇偶校验不一致,丢弃本次接收到的数据位;⑧停止定时器同时禁止定时器中断,重复步骤①至⑦完成持续数据接收过程。
3.根据权利要求1所述的用于嵌入式系统的模拟串口方法,其特征在于,所述模拟串口发送数据的步骤为(1)无数据发送时保持发送引脚为高电平,其中发送引脚为通用IO引脚;(2)当用户需要发送数据时,设定定时器周期,置发送引脚为低电平,启动定时器; 其中,步骤O)中所述的定时器周期=1/模拟串口波特率(3)定时器中断后,根据待发送数据的最低位设定发送引脚的电平把正在发送的数据右移一位;其中,最低位为1则设置发送引脚保持高电平,最低位为0则设置发送引脚保持低电平(4)重复步骤C3)直至当前字节发送完成,无校验发送数据跳转到步骤(5),有奇偶校验则跳转到步骤(6);(5)置发送引脚为高电平,完成当前字节的发送,跳转到步骤(1)继续下个字节的发送;(6)根据设定的奇偶校验及步骤( 中发送的1的个数设置下面一个定时周期内的发送引脚的电平;(7)置发送IO为高电平,完成当前字节的发送并保持本次设定的定时器周期为2个以上的周期,跳转到步骤(1)继续下个字节的发送。
全文摘要
本发明公开了一种用于嵌入式系统的模拟串口方法。本发明公开了一种用于嵌入式系统的使用软件的方式模拟串口的方法。本方法通过MCU的通用IO引脚、可中断IO引脚和定时器模拟串口,在接收数据时利用定时器控制采样间隔,检测接收串口二进制比特数据流,根据设定的数据位、停止位、校验位合成串口接收的数据,利用IO中断避免定时器不稳定造成的误差积累造成数据接收错误;在串口发送时利用定时器控制发送每一位数据的时间来模拟串口发送数据。本发明旨在现有系统中采取软件的方式模拟串口,从而减少硬件扩展串口芯片的成本,进而提高产品的利润空间,带来更高的经济效益。
文档编号G06F13/38GK102521183SQ20111039636
公开日2012年6月27日 申请日期2011年12月2日 优先权日2011年12月2日
发明者杨进 申请人:深圳市科陆电子科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1