tnblog
首页
视频
资源
登录

串口的使用-发送数据给电脑(学习笔记)

5920人阅读 2023/8/18 16:10 总访问:3457146 评论:0 收藏:0 手机
分类: 嵌入式

串口的使用-发送数据给电脑(学习笔记)

串口是什么?


串行通讯接口,简称串口,也称COM口,串行接口的数据是通过一条线一位位地顺序传输。
并行接口,简称并口,是指8位数据同时通过8条并行线进行传送。
串口形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是并口快,由于8位通道之间的互相干扰。传输受速度就受到了限制。而且当传输出错时,要同时重新传8个位的数据。
串口没有干扰,传输出差后重新发一位就可以了。

什么是串口波特率?


波特率(bandrate),指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。
比如每秒钟可以传输9600个二进制(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600.

串口的通信波特率不能随意设定,而应该再一些值中去选择。
一般常见的波特率是9600或者115200(低端的单片机如51常用9600,高端的单片机和嵌入式SOC一般用115200)。


数据位:
1010 1010 -> 0xaa ->170
二进制 十六进制 十进制
也就是说我们可以通过控制引脚按上面的高低电平,每104us改变一次,就可以完成一个字节的传输。
但是芯片已经帮我们做好了这些操作,我们要做的只是配置好波特率,然后填写数据即可。

串口打印代码实现

  1. // 设置波特率为9600
  2. Serial.begin(9600);
  3. // 打印输出
  4. Serial.print("内容+符号");

代码实践一


由于代码在第一次打印的时候可能会出现乱码的情况,所以我们可以设置platformio.ini文件的波特率初始化为1152009600二者都可以。
代码如下:

  1. [env:esp32dev]
  2. platform = espressif32
  3. board = esp32dev
  4. framework = arduino
  5. monitor_speed = 115200


编写主要代码:

  1. void setup() {
  2. // put your setup code here, to run once:
  3. Serial.begin(115200);
  4. Serial.println("setup\n");
  5. }
  6. void loop() {
  7. // 当串口开始活动的时候
  8. while (Serial.available()){
  9. // 读取一个串口传来的一个字节
  10. uint8_t data = Serial.read();
  11. // 进行打印
  12. Serial.printf("get data = %d\n",data);
  13. }
  14. delay(10);
  15. }


接下来我们运行代码,并输入一个a,它将输出一个97和10,97就是a的十进制,10是空格。

电灯实验


结合上一篇博客,我们通过输入k进行开始让灯闪一闪的,输入s进行停止闪烁。
代码如下:

  1. //头文件
  2. #include <Arduino.h>
  3. #include <freertos/FreeRTOS.h>
  4. #include <freertos/task.h>
  5. //定义LED灯引脚为常量,因为程序跑起来就不需要更改IO值
  6. #define PIN_LED 18
  7. boolean nowvalue;
  8. // 声明任务句柄
  9. TaskHandle_t ledTaskHandle;
  10. void printnowvalue(){
  11. String strValue;
  12. if (nowvalue) {
  13. strValue = "true";
  14. } else {
  15. strValue = "false";
  16. }
  17. Serial.println(strValue);
  18. }
  19. // LED任务函数
  20. void ledTask(void *pvParameters) {
  21. while (1) {
  22. uint8_t data = Serial.read();
  23. // 转换成字符
  24. printnowvalue();
  25. char ch = char(data);
  26. if(ch == 'k'){
  27. Serial.printf("start /n");
  28. nowvalue = true;
  29. printnowvalue();
  30. }else if(ch == 's'){
  31. Serial.printf("stop /n");
  32. nowvalue = false;
  33. printnowvalue();
  34. }
  35. delay(1000);
  36. }
  37. }
  38. void setup() {
  39. Serial.begin(9600);
  40. //初始化引脚为输出
  41. pinMode(PIN_LED, OUTPUT);
  42. // 创建LED任务
  43. xTaskCreate(ledTask, "LED Get Command Task", 1000, NULL, 1, &ledTaskHandle);
  44. }
  45. void loop() {
  46. if(nowvalue){
  47. //设置为高电平(3.3V),1s后设置为低电平(0V),再1s后重复
  48. digitalWrite(PIN_LED, HIGH);
  49. delay(1000);
  50. digitalWrite(PIN_LED, LOW);
  51. }
  52. delay(1000);
  53. }


注意我这里用了个句柄用于接收输入的内容。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Windows平台分布式架构实践 - 负载均衡

原文地址: https://www.cnblogs.com/atree/p/windows_loadbalancer.html 概述  最近.NET的世界开始闹腾了,微软官方终...

分布式-微服务-集群的区别

1.分布式将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区...

可输入下拉文本框,据输入,动态加载数据 jquery-editable-select

用到一个jquery-editable-select的控件github地址:https://github.com/indrimuska/jquery-editable-select这个插件的原理是...

Python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

Python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

Python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

Redis基础安装操作-windows版

一、下载 redis官方没有提供windows版本,需要从微软的git下载releases版二、安装,启动1.解压出来 启动服务 可能会双击会...

Service-stack.redis配置连接池与读写分离(处理并发相关等)

配置连接池与读写分类 //写节点(主节点) List&lt;string&gt;writes=newList&lt;string&gt;(); writes.Add(&quot;123456a...

Service-stack.redis操作Redis 并发相关问题

1:不要循环去创建对象,循环去访问redis的时候要特别注意,应该传一个集合进去处理,而不是循环去处理2:要注意释放对象,使...

皓月有趣论题 - U盘或其他存储设备 存入数据后 质量是否发生改变

转自我的个人博客 http://blog.axibug.com之前、朋友提出“U盘或其他存储设备 存入数据后 质量是否发生改变”的问题。那么...

Python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

Python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

Python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

Vue.js常用指令,事件绑定等,Vue过滤器解析状态过滤器多个参数。vue表格状态解析。vue解析类型,element ui解析类型,状态,el-tag

按照html的编码显示:v-html&lt;div class=&quot;font_info&quot; v-html=&quot;item.Content&quot;&gt;{{item.Content}}&l...

Java学习 - Java语言简介

java语言简介1.了解java产生的背景2.了解java体系结构和组成3.了解Java API文档的使用4.搭建java语言的开发环境(重点)5....
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术