串口通信

串口通信基本原理

家住魔仙堡 提交于 2020-01-25 13:18:34
1.处理器与外部设备通信的两种方式: 并行通信 -传输原理:数据各个位同时传输。 -优点:速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输。 -优点:占用引脚资源少 -缺点:速度相对较慢 2.串行通信 按照数据传送方向,分为: 单工: 数据传输只支持数据在一个方向上传输 半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信; 全双工: 允许数据同时在两个方向上传输,因此,全双工通信是两个 单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。 3.串行通信的通信方式 同步通信:带时钟同步信号传输。 -SPI,IIC通信接口 异步通信:不带时钟同步信号。 -UART(通用异步收发器),单总线 4.常见串行通信接口 STM32的串口通信接口: UART:通用异步收发器 USART:通用同步异步收发器 STM32F407支持6个UART 5.UART 5.1 UART异步通信方式引脚连接方法: -RXD:数据输入引脚。数据接受。 -TXD:数据发送引脚。数据发送。 F407开发板用USB-232实现接口转换。 5.2 UART异步通信方式引脚(STM32F407ZGT6) 5.3 UART异步通信方式特点: 全双工异步通信。 小数波特率发生器系统,提供精确的波特率。

python的串口通信(pyserial)

我们两清 提交于 2020-01-14 07:56:11
python的串口通信(pyserial) 1 使用用硬件 树莓派,CH340串口转USB两个,PC 2 环境安装 树莓派我使用的是自带系统,环境都已经配好了,PC这边我安装了的ubunt子系统,有python环境,那么就需要安装pyserial库和CH340的驱动 sudo apt-get update sudo apt install python-pip pip install --upgrade pip pip install pyserial 可以使用命令查看本机的串口 python -m serial.tools.list_ports python3 -m serial.tools.list_ports PC的话将会列举一堆,需要取设备管理器中找到对应的COM口号,例如我串口是COM8,则是用的/dev/ttyS5 树莓派的话将会显示两个,/dev/ttyAMA0是GPIO处的串口,/dev/ttyUSB0则是我插入的串口转USB模块 pi@raspberrypi:~ $ python -m serial.tools.list_ports /dev/ttyAMA0 /dev/ttyUSB0 3 收发测试 PC lissettecarlr@lissettecarlr ~ % python Python 2.7.12 (default, Nov 12 2018, 14:36

stm32基于hal库的蓝牙串口通信

余生长醉 提交于 2020-01-13 05:15:43
关于stm32的学习记录 stm32基于hal库的蓝牙串口通信 先简单记录一下用到的工具: stm32f103c8t6,st-link,usb-ttl,蓝牙模块hc-05、hc-06 本次设计模型使用手机蓝牙APP向蓝牙发送指令,stm32最小系统通过串口接收到的指令选择要执行的步骤以控制小车运动。鉴于本次仅仅使用蓝牙接收指令,并不需要用单片机来调试蓝牙模块,所以没有写相关代码,如有需要后续补充。 1、通过cubemx配置stm32 设置外部晶振 设置四线调试模式 设置时钟 其余设置(中断,定时器配置pwm)按需要配置 2、添加相关自定义代码,以实现串口通信,pwm调速功能 1.开启pwm HAL_TIM_PWM_Start ( & htim3 , TIM_CHANNEL_1 ) ; HAL_TIM_PWM_Start ( & htim3 , TIM_CHANNEL_2 ) ; 2,设置串口重定向,后面可以用于测试代码,测试单片机接收数据的格式 int fputc ( int ch , FILE * f ) { HAL_UART_Transmit ( & huart1 , ( uint8_t * ) & ch , 1 , 0xffff ) ; return ch ; } int fgetc ( FILE * f ) { uint8_t ch = 0 ; HAL_UART

串口通信——UART

丶灬走出姿态 提交于 2020-01-10 04:52:16
一、总体概况 串口:有UART(通用异步收发器,单/半双/全双工),SPI(串行外设接口,半/全双工),I²C(集成电路总线,半双工)3种通信接口,他们都是串口, 并口:有SDIO(4位并行)用来插SD卡;FSMC(16位并行),控制液晶或显存(SRAM) 比特率·:bit/s 波特率:码元/s 一般的:0V-----0 3.3V-----1,很多时候都是按这个来算码元,所以一个码元就是一个比特。 但是 也有时候是好几个比特表示一个码元:0V----00 2V—01 4V—10 6V—11,此时就是俩个比特一个码元 当然,rbt6中,比特率=波特率 二、USART(通用同步异步收发器) 从框图上看,USART总共需要8根引线,而开发板上只有俩条引脚RX和TX RX:数据接受 TX:数据发送 SCLK:时钟,在保持同步时使用 nRTS:请求发送(前面n的意思是低电平有效) nCTS:允许发送 其他俩个引脚基本不用 (开发板上是UART,不是USART,因此不能实现同步通信,所以,SCLK、nRTS、nCTS都是不使用的) 根据原理图,我们发现,USB转串口(调试串口)CN2接口连接了芯片FT2232D,芯片FT2232D的引脚有RXD2和TXD2,连接到了PA3和PA2上,在开发板上标注着,这俩个GPIO是UART2。 相应的,UART1的RXD1和TXD1连接到了PA10和PA9

C++编写串口通信协议

不问归期 提交于 2020-01-02 23:56:57
无论是R485还是R232,都不影响我们编程。 1、编写串口通信的接口 class CSerialPort { public: CSerialPort(bool bIsRs232 ); ~CSerialPort(void); public: bool InitPort(UINT portNo=1,UINT baud=CBR_9600,UINT databits=8,UINT stopbits=1); bool InitPort(UINT portNo,const LPDCB& plDCB);//初始化串口 bool WriteData(unsigned char* pData,unsigned int length);//读数据 bool ReadData( unsigned char *pData,int nBytes ); //写数据 DWORD GetByteInCom();//获取串口缓冲区的字节数 void ClosePort();//关闭串口 bool ClearAllBuffer();//清除缓冲区数据 private: bool OpenPort(UINT portNo); private: volatile HANDLE m_hComm; bool m_bIsRS232; }; 2、基本类图 通信基类接口: #pragma once #include

C# 编程实现串口通信

流过昼夜 提交于 2020-01-02 00:48:39
http://blog.sina.com.cn/s/blog_6c67dab30101p3vn.html ------------------------------------------------------------------------------- public partial class Form1 : Form { int k = 0; int[] crc_data1 = { 0, 0 }; int[] crc_data2 = { 0, 0, 0, 0, 0 }; int[] crc_data3 = { 0, 0, 0, 0, 0 }; int x = 0; short qtemp; byte[] new_byte1 = { 0, 0, 0, 0, 0, 0, 0 }; SolidBrush bush1 = new SolidBrush(Color.Red); SolidBrush bush2 = new SolidBrush(Color.Green); public Form1() { InitializeComponent(); } //串口初始化 private void Form1_Load(object sender, EventArgs e) { serialPort1.PortName = "COM3"; serialPort1.BaudRate

计算机体系结构之通信部分

£可爱£侵袭症+ 提交于 2019-12-29 11:30:25
信息<------>数据(介质) <------>信号(电信号,光信号,电磁波信号,磁信号) 1.电子设备通信模型: 2.基带信号与载波信号: 基带信号: 承载有信息的信号. 载波信号: 用于承载基带信号的信号. 3.调制发送/接收解调的具体过程: 调制发送: 1.调制: 将基带电信号装入载波电信号. 2.发送: 将载波电信号转换为电波信号(无线),通过信道发送出去. 接收解调: 1.接收: 接收并将电波信号(无线)转换为载波信号. 2.解调: 从载波信号中提取出基带信号. 4.无线通信中为什么需要载波信号: 便于制作小尺寸天线: 基带的频率很低,如果直接将基带信号转为电磁波信号,电磁波的波长会很长.而电磁波的波长与天线的长度成正比,就可能需要很长的天线. 便于对信道进行频分复用. 能够提高信号的抗噪能力. 5.并行通信和串行通信: 并行通信: 数据以成组的方式,在多个并行通道上同时进行传输. 并行通信只存在于有线通信.芯片内部通信,时并行通信的主要应用场合. 串行通信: 数据以串行方式在单条信道上传输. 有线串行通信: usb,以太网,I2C,SPI,串口. 无线串行通信: wifi,Zigbee,蓝牙. 7.串行通信中的同步通信和异步通信: 同步通信: 通信双方事先约定好通信时间, 并且为通信做好准备. I2C,SPI. 应答机制: 阻塞等待,非阻塞等待. 异步通信:

串口通信

落爺英雄遲暮 提交于 2019-12-20 03:24:47
1、并行通信 2、串口通信   (1)同步通信(synchronous data communication,SYNC)   指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),保证了通信双方在发送和接收数据时具有完全一致的定时关系。   信息帧,每帧的开始用同步字符来指示。   一次通信只能连续传送一帧信息。   同步字符+数据字符+CRC校验码   传输线路始终保持连续的字符位流,如果没有数据传输,要用专用的“空闲”字符或同步字符填充。   举例:欧姆龙PLC-HostLink协议。     (2)异步通信(asynchronous data communication,ASYNC)   字符之间没有固定的时间要求,而每个字符中的各位以固定的时间传送。   收、发双方取得同步的方法是采用在字符格式中设置起始位和停止位。   停止位和空闲位都是高电平(逻辑值为1)。   异步通信一个信息帧只包含一个字符,但是包括了起始位、数据位、奇偶校验位和停止位。   举例:modbus协议常见,HPZ80三项电力仪表的Modbus-RTU通信。   每一次完整接收数据,最后是包含有OK字符的,接收数据的开头是发送指令的字符,例如发送“AT+CREC=1,1,0”指令,返回的数据中是包含“AT+CREC=1,1,0”这个字符的,然后数据尾部返回OK表示是成功的 ***

串口通信

纵饮孤独 提交于 2019-12-17 17:07:06
Open MV与STM32的串口通信 Open MV 内置了扫码识别的算法比如有条形码识别,二维码识别,矩形码识别等,基本上满足我们对扫码方面的应用。但是需要特别注意的是必须是Open MV 3及以上系列才可以运行 我们的这个例子是在10秒内识别二维码 首先呢我们先导入我们需要的模块 然后我们配置串口通信并且反初始化 我们设置变量和通信协议 然后进行定时器回调 我们通过串口发送函数 我们再进行二维码的识别并与单片机进行通信 来源: CSDN 作者: Ni有你的格调 链接: https://blog.csdn.net/qq_45595542/article/details/103579390

IoTClient开发5 - ModBusRtu协议

狂风中的少年 提交于 2019-12-17 09:10:22
前言 前面我们介绍了 ModBusTcp协议 。今天我们接着来介绍ModBusRtu协议。和ModBusTcp不同的是ModBusRtu基于串口通信,ModBusTcp是基于Tcp以太网通信。 所以我们在讲解ModBusRtu协议之前会先介绍下串口通信。 串口通信 串口出现在1980年前后,当初主要目的是用来做电脑外设设备的连接,如鼠标、键盘等。现在最新的电脑慢慢的取消了原始的串口接口,不过依然广泛用于工控和测量等设备。 串口通信参数 串口通信指的是串口按位(bit)发送和接收字节,串口通信参数主要有波特率、数据位、停止位、校验位。 波特率 波特率表达的是串口通信的速率,一秒钟内传送的信号单元(码元)个数。信号单元一般包含10位(7个数据位、1个校验位、1到2个停止位)。注意:波特率和距离成反比 数据位 通信中实际的数据,有效值为6、7和8。 停止位 用来表示单个包的最后一位,有效值为1、1.5和2。停止位可用来表示传输的结束和校正时钟同步。注意:停止位的位数越多,时钟同步的容忍程度越大,但是数据传输率会越慢。 校验位 奇偶校验作为通信中的检错方式,如果发现错误则重新发送。 示例数据 偶校验位 奇校验位 0000000 00000000 00000001 1010001 10100011 10100010 1101001 11010010 11010011 1111111