串口

【Stm32学习笔记】-- 串口通讯

拜拜、爱过 提交于 2019-12-03 00:10:53
串口设置一般步骤: 1、串口时钟使能,GPIO时钟使能 2、串口复位 3、GPIO端口模式设置 4、串口参数初始化 5、开启中断并且初始化NVIC(开启中断时) 6、使能串口 7、编写中断处理函数 串口时钟使能:在stm32f103中,串口时钟有外设时钟使能寄存器控制。 (p.s. APB1ENR,APB2ENR) 串口波特率设置:STM32的每个串口都有独立的比特率寄存器USART_BRR,通过设置该寄存器即可配置相应波特率。寄存器各位描述如下图。 该寄存器高十六位全部设置为0,低十六位分别表示除法因子的整数部分和小数部分。 STM32串口波特率计算公式如下: 分子是给串口的时钟(PCLK1 用于 USART2、3、4、5,PCLK2 用于 USART1) USARTDIV为无符号定点数。 我们只要得到 USARTDIV 的值,就可以得到串口波特率寄 存器 USART1->BRR 的值,反过来,我们得到 USART1->BRR 的值,也可以推导出 USARTDIV 的值。 假设我们的串口 1 要设置为 115200 的波特率,而 PCLK2 的时钟为 72Mhz。这样根据上面的公式有: USARTDIV=72000000/(115200 16)=39.0625 DIV_Fraction=16 0.625=1=0X01; DIV_Mantissa=39=0X27; 这样

雄迈视频板使用调试串口作为普通串口通信

匿名 (未验证) 提交于 2019-12-03 00:09:02
将调试串口改为普通串口 某此场合,因串口不足,需要用调串口进行数据通信。为了实现这个功能,办法为: 把别的串设为控制台模式,物理调试串口腾出来变为了普通的串口,代码如下: # include <sys/ioctl.h> # include <sys/stat.h> # include <sys/types.h> # include <fcntl.h> # include <termios.h> # include <errno.h> //将指定的串口改为控制台模式,则其它串口变为普通串口 int fd ; fd = open ( "/dev/tty1" , O_RDONLY ) ; if ( fd >= 0 ) { ioctl ( fd , TIOCCONS ) ; close ( fd ) ; } 临时关闭内核信息输出: echo 0 > /proc/sys/kernel/printk ; 重新打开内核信息输出: echo 7 > /proc/sys/kernel/printk 。 这样,要用串口设备的时候,就先临时关闭,然后开关切换,搞完之后再切回来,最后打开输出。 雄迈视频板使用调试串口作为普通串口通信 本文档记录的是,使用雄迈Hi3516CV200芯片,雄迈IPC。雄迈提供了localSDK,这个是用来写程序放到视频板里运行的。雄迈会提供打包工具

简单实现通过串口打印hello(深入学习配置stm32串口USART)

匿名 (未验证) 提交于 2019-12-03 00:09:02
通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一 个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个 UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同 步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输 出,我们平时用的串口通信基本都是 UART。 串行通信一般是以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数 据信息、停止信息,可能还有校验信息 TX:发送数据输出引脚。 RX:接收数据输入引脚。 SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引 脚。 nRTS:请求以发送(Request To Send),n 表示低电平有效。如果使能 RTS 流控制,当 USART 接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时, nRTS 将被设置为高电平。该引脚只适用于硬件流控制 nCTS:清除以发送(Clear To Send),n 表示低电平有效。如果使能 CTS 流控制,发送 器在发送下一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为

Hi3516EV200使用UART1笔记

匿名 (未验证) 提交于 2019-12-03 00:08:02
Hi3516EV200使用UART1笔记 业务中需要用到UART1,使用命令 ls /dev/ttyAMA* 能看到对应的串口。可是用 cat /dev/ttyAMA1 报错,如下: ~ # ls /dev/ttyAMA* -l crw ------- 1 root root 204 , 64 Jan 1 00 : 00 / dev / ttyAMA0 crw - r -- r -- 1 root root 204 , 65 Jan 1 00 : 00 / dev / ttyAMA1 ~ # cat /dev/ttyAMA1 cat : can 't open ' / dev / ttyAMA1 ': No such device or address ~ # 很像是没那个设备点节,可上面明明看到了。先查一下IO复用引脚的配。 原理图中用的是10,9两个引脚,如图: 再看配置寄存器,对应的文档为: xxxV200R001C01SPC010_ReleaseDoc\zh\0 0.hardware \chip\Hi3516EV200\Hi3516EV200_PINOUT_CN . xlsx 用devmem可以直接操作寄存器,指令为: devmem 0x112C0070 32 0x00001002 #ѡΪUART1_RXD devmem 0x112C0074 32 0x00001002

Unity3D串口处理

匿名 (未验证) 提交于 2019-12-02 23:51:01
 最近公司用U3D开发一个应用,需要用到串口,便研究了两天串口编程,C#用SerialPort类实现串口编程,便开始使用SerialPort类编写代码。后来发现一个问题,Unity不支持DataReceived的方法。遇到这个问题很是棘手啊,后来在网上搜了一下,发现这个问题确实存在,解决的方法是开启两个线程,一个用来接收数据,一个用来处理数据。将两个线程分别放在FixedUpdate里面调用,这样便可以快速的读取和处理数据了。但是程序运行时,开启Open()方法时,会报System.IO.IOException这个异常。检察了一下应该是该串口被占用。之所以被占用,是因为上次没Close,而每次完成或退出时我确实写了SerialPort的Close()方法。后来在网上查了一下相关的资料,发现如果Close的时候正好赶上读取串口数据,这样两个线程便发生了矛盾,Close方法无法完成。但是代码也不会报错或是抛异常(据说这是微软的一个bug,是不是就不清楚了)。所以说问题就出在了这里。那解决该问题的方法是当启用Close的方法时,必须停止接受串口数据的线程。这样该问题就解决了,代码大致如下: List<byte> liststr;//在ListByte中读取数据,用于做数据处理 List<byte> ListByte;//存放读取的串口数据 private Thread tPort;

无线传输模块HC-12

匿名 (未验证) 提交于 2019-12-02 23:49:02
无线传输模块HC-12使用      因为实验室的无人机需要使用一款无线传输模块进行遥控控制,我们讨论的中测试了HC-12,并对HC-12传输距离进行了简单测试。在此做下使用记录。 模块概述 模块工作原理 注: 如上面图所示,HC-12 模块用于代替半双工通信时的物理连线。左边的设备向模块发送串口数据,模块的 RXD 端 口收到串口数据后,自动将数据以无线电波的方式发送到空中。右边的模块能自动接收到,并从 TXD 还原最初左 边设备所发的串口数据。从右到左也是一样的。 模块间只能工作于半双工状态,不能同时收发数据 。 模块可以与单片机连接,可以与电脑连接,这样两个模块就之间也可以进行通讯(单片机与电脑远程通讯)。 模块与电脑、单片机的连接示意图: 模块可与供电系统为3.3V 或者5V 的MCU连接,串口交叉连接即可(模块的 RX接 MCU的 TX、模块的 TX 接MCU的 RX) 注:如需串接电阻保护MCU,请在串口端串接不大于200Ω的电阻即可,建议不加电阻。 无线串口透传 HC-12 模块有四种串口透传模式,用 FU1、FU2、FU3 和 FU4。 默认出厂设置:串口波特率为 9600bps、通信频道为 C001、串口透传模式为 FU3。 HC-12 模块出厂时串口透传模式默认为 FU3。此时,模块工作于全速状态下,空闲工作电流为 16mA 左右。 在此模式下

C#利用控件mscomm32.ocx读取串口datalogic扫描枪数据

匿名 (未验证) 提交于 2019-12-02 23:49:02
1).开发环境VS12,语言C# 2).扫描枪品牌:datalogic 4470 3).通讯协议:串口 1.首先,第一步创建一个新工程,windows窗体应用程序,命名为TestScanner,如下: 2.选择 “工具”-“选择工具箱”,如下: 3.选择"microsoft communication control version 6.0",通过此路径可知其位于64位SysWow64下的ocx控件mscomm32.ocx; 4.从右侧工具箱“组件”中找到串口控件,拖入窗体Form1中,命名为MD_MSComm,并在界面初始化中填入相关参数: MD_MSComm.CommPort = 11; MD_MSComm.InputMode = MSCommLib.InputModeConstants.comInputModeText; MD_MSComm.InBufferSize = 1024; MD_MSComm.OutBufferSize = 512; MD_MSComm.Settings = "9600,n,8,1"; MD_MSComm.SThreshold = 0; MD_MSComm.RThreshold = 1;//first byte trigger oncomm event MD_MSComm.InBufferCount = 0; MD_MSComm

串口常用的隔离芯片

匿名 (未验证) 提交于 2019-12-02 23:42:01
TI的ISO7221使用了 电容隔离 技术,工作电压在2.7-5.5V,信号最高速度可以150Mbps,隔离电压为2500V,5V、1Mbps时单信道的功耗小于2.1mA。 ADI的ADuM1201使用了 变压器隔离 技术,芯片工作电压范围是3-5V,信号最高速度是25Mbps,隔离电压同样是2500V。5V、2Mbps时单信道功耗是1.1mA。 Silicon的Si8421使用了 RF隔离 技术,工作电压范围是2.7-5.5V,2500V隔离,信号最高速度为150Mbps,5V、1Mbps时单信道的功耗小于2.1mA。 封装都有so8. ISO7221和 ADuM1201的2脚是out,3脚是in Si8421的相反,2脚是in,3脚是out。 觉得 Silicon是故意的,因为串口的txd接单片机的rxd,串口的rxd接单片机的txd,是交叉的,有人会不小心出错,电路板拿到手才发现这个错误,怎么办?换个芯片就ok了。 文章来源: https://blog.csdn.net/zhuangyuanlang1/article/details/91876966

I2C接口与SPI和UART接口的区别

匿名 (未验证) 提交于 2019-12-02 23:37:01
一、SPI I2C UART通信速率比较: SPI > I2C > UART 1、同步通信>异步通信; 2、同步通信时必须有一根时钟线连接传输的两端; 3、都是串行通信方式,并行通信用于内部存储间的通信,如flash; 4、适合传输的距离和通信速率成反比关系; 3-SPI:两条合一的数据线、1时钟线、1CS(设备片选线) SPI:2数据线、1时钟线、1CS(设备片选线)/串行 同步 通信全双工 I2C:1数据线、1时钟线/串行 同步 通信半双工 传输距离比UART短 UART:2数据线、 1地线/串行 异步 通信全双工 传输距离比I2C长些 (I2C接口是“器件间”接口,是在一块板子之内传输数据) (UART是 “设备间”接口,更多的是用于两台设备之间传输数据) 二、串行和并行、同步和异步的区别: 串行通信:利用一条数据线将数据一位一位的顺序传送,特点是通信线路简单,成本低,适合于长距离传送 并行通信:利用多条数据线将数据的各位同时传送,特点是传输速度快,适合于短距离传送 异步:在一个字符的传输时间范围内保持同步即可 同步:在数据传输过程中,需要一根时钟线同步,IIC总线,SPI总线 三、I2C接口与串行接口的区别: I2C 两线式串行总线 UART 通用串行异步收发器串口,UART是串行异步通信接口,它包括RS232、RS499、RS423、RS422和RS485等接口规范和