单片机IO模拟串口协议

这篇具有很好参考价值的文章主要介绍了单片机IO模拟串口协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

        嵌入式硬件平台调试中常用的debug方法是看串口打印定位问题,但有时候会遇到单片机没有串口外设或者串口引脚被占用的情况,这时候也可以在代码里操作空闲的IO输出不同个数的脉冲来达到调试的效果,但是要用逻辑分析仪抓线逐个看波形比较费劲。既然都IO抖线了,干脆抖个串口协议出来算了,通过控制IO口电平变化模拟串口协议。

二、串口协议

1、协议介绍

UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。其中每一位(Bit)的意义如下:

起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。

数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。

奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。

停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送。

2、传输过程

发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧数据发送结束。

接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。

由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART对RX线上的数据采样时通常取中间的采样值或者是从中间取多个点的值然后取出现次数最多的电平值,以保证采样不会滑码或误码。
单片机IO模拟串口协议,STM32,单片机,嵌入式硬件,串口,IO模拟串口

之前也写过一篇FPGA实现串口协议的文章《FPGA专题——串口通信》

三、代码实现

       基于STM32实现代码如下

#define sw_tx_io_high GPIO_SetBits(GPIOB, GPIO_Pin_1)
#define sw_tx_io_low GPIO_ResetBits(GPIOB, GPIO_Pin_1)

void delay(u32 i)	  
{
	while(i--)
	{
		__NOP();
	}
}

void sw_uart_init(void)
{
	sw_tx_io_high;
}

void sw_uart_putchar(u8 ch)
{
	u8 dat[10];  // 1 start bit + 8 data bit + 1 stop bit
	u8 i;

	// start bit
	dat[0] = 0;  

	// data bit
	for (i = 0; i < 8; i++)
	{
		if (ch & 0x01)
		{
			dat[i + 1] = 1;
		}
		else
		{
			dat[i + 1] = 0;
		}

		ch >>= 1;
	}

	// stop bit
	dat[9] = 1;

	for (i = 0; i < 10; i++)
	{
		if (dat[i])
		{
			sw_tx_io_high;
		}
		else
		{
			sw_tx_io_low;
		}

		delay(64);  // 8.68 us, 115200 baudrate
	}
}

void sw_uart_putStr(u8* str)
{
	while (*str != 0)
	{
		sw_uart_putchar(*str);
		str++;
	}
}

sw_uart_putchar 控制单次输出一个字符,测试中定波特率为115200,那么停止位(即最小脉冲宽度)为1 / 115200 = 8.68us,使用逻辑分析仪或者示波器,调整delay函数传入的参数,我这边测试是给64的时候可以调整到8.68us左右,当然大概调到这个时间就行了不需要很准,串口协议本身可以容忍一定的误差。

delay函数使用MCU空等待来实现延时效果。

最后使用 sw_uart_putStr("Hello CSDN \r\n"); 可以在串口助手上显示“Hello CSDN”。文章来源地址https://www.toymoban.com/news/detail-686223.html

到了这里,关于单片机IO模拟串口协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机项目分享 基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(76)
  • 单片机STM32看门狗详解(嵌入式学习)

    单片机STM32的看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态并在出现故障或死锁时采取措施以恢复正常操作。看门狗的主要功能是定期检查系统是否正常运行,并在系统出现问题时触发复位操作。 STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立

    2024年02月13日
    浏览(45)
  • 两块stm32单片机串口通信讲解

    本篇文章记录了如何使用stm32f103zet6核心板(下位机)通过串口向stm32f103zet6学习板(上位机)发送数据,stm32f103zet6学习板完成接收,并将接收到的数据显示在LCD显示屏上。 正点原子精英STM32F103ZET6学习板一块(带2.8寸显示屏) STM32F103ZET6核心板一块 电源适配器、数据线以及杜

    2024年02月16日
    浏览(29)
  • 单片机项目分享 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月21日
    浏览(68)
  • 单片机项目分享 stm32机器视觉的口罩佩戴检测系统 - 单片机 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月22日
    浏览(47)
  • 【单片机毕设选题】Stm32单片机的音乐播放器设计 - 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(37)
  • 【单片机毕设选题】 stm32智能运动计步系统 - 物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(42)
  • stm32毕设分享 stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(48)
  • stm32毕设分享 Stm32酒驾检查系统 - 单片机 嵌入式 物联网

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月23日
    浏览(52)
  • 嵌入式STM32 单片机 GPIO 的工作原理详解

    STM32的 GPIO 介绍 GPIO 是通用输入/输出端口的简称,是 STM32 可控制的引脚。GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 以 STM32F103ZET6 芯片为例子,该芯片共有 144 脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为

    2024年02月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包