查看“第十九课--串口调试/zh”的源代码
←
第十九课--串口调试/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 目的 == USART(Universal Synchronous/Asynchronous Receiver/Transmitter)中文为“通用同步/异步串行接收/发送器”,也就是常说的串口(Serial),是最常用的通信协议之一,本课讲解Microduino CoreSTM32串口的使用。 == 设备 == * [[Microduino-CoreSTM32/zh|Microduino CoreSTM32 ]] Microduino-CoreSTM32是Microduino系列的核心模块之一,采用 STM32F103CBT6芯片的ARM开发板。Microduino-CoreSTM32是一个开放源码硬件与Maple Mini兼容,可利用 Microduino 扩展模块和其他电子元件、模块、传感器,做出很多丰富有趣的互动作品。 * USB数据连接线 一根 == 原理 == === 串行通信 === 串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送,串行通信的工作方式有异步和同步两种,本课讲解异步串行通信。 USART 是一个全双工通用同步/异步串行收发器,高度灵活的串行通信接口。下面以同步串行通信方式加以介绍: 异步串行通信以帧作为传送单位,每一帧由起始位、数据位、校验位和停止位组成。 在异步通信中有两个比较重要的指标,字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。 结果如下图所示。 [[File:异步串行通信|600px|thumbnail|center|1]] * 起始位: 先发出一个逻辑” 0”的信号,表示传输字符的开始。 * 数据位: 紧接着起始位之后。 数据位的个数可以是 4、 5、 6、 7、 8 等,构成一个字符。通常采用 ASCII 码。从最低位开始传送,靠时钟定位。 * 奇偶校验位: 数据位加上这一位后,使得“ 1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。 * 停止位: 它是一个字符数据的结束标志。可以是 1 位、 1.5 位、 2 位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 *空闲位: 处于逻辑“ 1”状态,表示当前线路上没有资料传送。 *波特率: 是衡量资料传送速率的指标。表示每秒钟传送的符号数( symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为 120 字符/秒,传输使用256阶符号,每个符号代表 8bit,则波特率就是 120baud,比特率是 120*8=960bit/s。这两者的概念很容易搞错。 === Microduino-CoreSTM32 USART === Microduino-CoreSTM32 硬件串口1~3使用Serial1、Serial2、Serial3三个对象来控制。Maple所使用的STM32有一个专用的USB控制器,这个控制器被配置成一个虚拟串口设备,使用户在计算机上能通过标准的串口协议与Maple通信。对USB虚拟串口的调用是通过SerialUSB对象实现的。大多数情况下,你可以用SerialUSB直接替代Serial1、Serial2、Serial3。每次通过USB虚拟串口发送数据至少消耗约50 ms的时间,并且虚拟串口并不会检测USB接口是否真的已连接。USART设备间的通信主要依靠TX和RX两个信号,设备A的TX接到设备B的RX,设备B的RX接到设备A的TX,如下图所示。 [[File:Stm32 USART|600px|thumbnail|center|2]] '''注意,USART≠RS232,请勿将USART接口直接与RS232相连,RS232传输的信号使用±12 V的电压,会损坏Maple。''' PC上的COM口由于历史原因都是RS232接口。现在大部分计算机都取消了RS232接口,如果需要,可以利用专用的USB串口适配器,通常这类适配器会提供TTL电平输出,该TTL电平输出可以直接连接到Microduino-CoreSTM32的USART接口。 Microduino USBTTL:[[Microduino-USBTTL/zh|Microduino USBTTL]] == 程序 == <source lang="cpp"> int inByte; char a='W'; char b[]="elcome to Microduino"; char c[]="2.5-5=-2.5"; void setup() { // Serial1.begin(9600); } void loop() { SerialUSB.print(1); SerialUSB.print("----"); SerialUSB.write(a); SerialUSB.write(b,5); SerialUSB.println(" to Microduino"); SerialUSB.print("2----"); SerialUSB.print(5); SerialUSB.print(-2.5); SerialUSB.print('='); SerialUSB.println(2.5); SerialUSB.println(255,DEC); SerialUSB.println(255,BIN); SerialUSB.println(255,HEX); SerialUSB.println(""); while (SerialUSB.available()>0) { inByte = SerialUSB.read(); SerialUSB.print("Byte Received :"); SerialUSB.println(inByte, BYTE); SerialUSB.println(""); } delay(5000); } </source> == 调试 == == 结果 == == 视频 ==
返回至
第十九课--串口调试/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息