单片机IO模拟串口发送数据


由于项目上用的STM32单片机串口资源不够用,但是还是想看调试输出,所以就多引出了一个IO,使用IO模拟串口发送数据的时序来当做串口打印用了,本章实验工程以8bit数据位、1bit停止位,无奇偶校验、无流控,波特率9600bps为例,串口的发送数据时序流程如下图:

串口发送的时序是非常简单的,TX引脚空闲时为高电平,拉低一下是启动发送,随后发送8bit,最后拉高,模拟IO的实现需要的就是延时的精准度,以9600bps波特率为例,一秒能发送9600bit,那么发送1bit的时间间隔就是大概1/9600≈104us,贴一下代码:

void VirtualCOM_SendByte(uint8_t c)
{int i = 0;VCOM_GPIO_L();                     // 拉低IO引脚启动发送delay_us(104);for(i = 0; i < 8; i++)             // 开始发送8bit数据{if(c & 0X01){VCOM_GPIO_H();}else{VCOM_GPIO_L();}c >>= 1;delay_us(104);}VCOM_GPIO_H();                    // 拉高IO引脚停止发送delay_us(104);
}void VirtualCOM_SendData(const void* buf, uint32_t len)
{const uint8_t* p = (const uint8_t* )buf;__set_PRIMASK(1);                   // 屏蔽所有中断,因为我们是用的模拟IO发送,倘若被中断打断,那么发送的数据就错乱了while(len--){VirtualCOM_SendByte(*p++);}__set_PRIMASK(0);                  // 取消屏蔽所有中断
}

ends…

单片机IO模拟串口发送数据相关推荐

  1. STM32F0 HAL库软件模拟串口发送数据

    试验STM32F0官方提供的例程的时候,希望看到程序中某些变量的值,但是程序中往往没有串口发送部分,自己加又非常麻烦. 而点亮LED的程序基本上每个例程都有.所以用点亮LED引脚模拟串口发送数据就很方 ...

  2. 51单片机模拟串口发送接收数据(不使用SBUF)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 51单片机.模拟串口.串口发送.串口接收.逻辑分析仪 前言 一.配置定时器 二.串口发送 三.串口接收 四.主函数 五.波形图 5.1 ...

  3. 51单片机 串口发送数据(只是发送)

    51单片机 串口发送数据(只是发送)用于调试. #include <reg51.h>#define uchar unsigned char #define uint unsigned in ...

  4. 51单片机:电脑向串口发送数据并控制LED灯

    电脑向串口发送数据后,控制LED灯,并返回发送的数据 程序如下 #include"regx52.h" #include"intrins.h" unsigned ...

  5. 51单片机IO模拟UART

    一. IO模拟UART发送 串口通信属于 串行 异步 半双工的通信模式 1. 最近在调试一个IO模拟UART的程序,把调试过程中遇到的问题总结一下.对于UART的发送部分(主机模式)还是比较容易实现的 ...

  6. MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据

    MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据 [目录] - 1.无线通信模块设置 - 1.1 设置参数 - 1.2 调试步骤 - 2.按键与通信格式 - 2.1 P ...

  7. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  8. 关于proteus中串口发送数据与实际不符的问题(如发00h,收80h)

    工程实训要用到串口,51单片机,串口工作方式一,只发不接受. 在proteus中用VIRTUAL TERMINAL(虚拟终端)监视串口发送数据. 现象:不论是用虚拟终端还是串口助手,接受的数据比实际发 ...

  9. python编程调用设备串口发送数据

    为了通过python编程控制串口发送数据给单片机,编写此程序 使用serial模块完成串口的读取和数据的收发 重点掌握以下几个api的使用方法: 读取串口设备列表:list(serial.tools. ...

最新文章

  1. Java基础部分笔记----------网络编程
  2. Bleve:来自Couchbase、基于Go语言的全文索引与检索库
  3. C语言-文件操作总结
  4. struts2的注入参数,获取值
  5. python初学者用什么开发环境_python初学者用什么开发环境
  6. Crossing River(信息学奥赛一本通-T1232)
  7. asp.net学习之SqlDataSource 2 select的四种参数赋予形式的解释
  8. postgresql获取表最后更新时间(通过触发器将时间写入另外一张表)
  9. 关于Mysql group_concat的应用(把相同ID的VAL用字符'/'连接起来)
  10. 进击的序列帧 一(两篇)------- 让你的序列帧立体起来!
  11. Tomcat组件梳理—Digester的使用
  12. 微信红包体系设计分析
  13. dws中间表模型设计: 页面受访明细宽表
  14. openwrt运行n2n服务器,Windows下使用N2N搭建局域网,全球局域网(重写)
  15. 三、C语言的数据类型—浮点型数据
  16. python用for循环求和1到100_python使用for循环计算0-100的整数的和方法
  17. python爬虫获取携程旅游景点评分和评论
  18. windows 9X, 2000, xp所有版本注册表设置大全
  19. 计算机制作灯笼,做灯笼日记
  20. 小程序判断是否有上一页

热门文章

  1. Unity 编辑器(UnityEditor)
  2. 【体验贴】EOS_v2.0版官方教程
  3. 【Python制作词云】分析QQ群聊信息,记录词频并制作词云
  4. mysql 钩子_php中的钩子理解及应用实例分析
  5. C#笔记之移位运算符
  6. jqGrid 各种参数 详解
  7. 只有提高人格才能驱动人心
  8. ASCⅡ谢尔宾斯基地毯
  9. 斯坦福大学自然语言处理研究的《信息检索》课程
  10. zookeeper从入门到入土