串口

STM32学习笔记一一USART

走远了吗. 提交于 2019-11-30 18:15:54
前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。 1.串口的基本概念 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。 2.串口通信连接 接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。 TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时, TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。 3.串口设置的一般步骤 对于复用功能的 IO,我们首先要使能 GPIO 时钟,然后使能复用功能时钟,同时要把 GPIO 模式设置为复用功能对应的模式,串口参数的初始化设置,包括波特率,停止位等等参数。在设置完成后就是使能串口。同时

ArduinoUno和Leonardo的区别

两盒软妹~` 提交于 2019-11-30 15:18:32
学习过 Arduino 的同学对ArduinoUno和Lenardo的不同点会有所了解,但说起具体的区别估计还是很多人答不上来,今天我们就详细解释下Arduino Uno和Leonardo的不同。 我们从四个方面来详细解释两者区别: 第一:中断的区别 Uno只提供两路中断。Leonardo提供5路。 当年Leonardo靠着多出3个中断的特点在Uno搬砖的时候横着走了好几次。但最终还是被包工头解决了这个不和谐的地方,包工头拍打着Leonardo的肩膀,意味深长的说:你的中断,是D0到D3,D0和D1是UART接口,D2和D3是IIC接口UART几乎是每次都要用到,所以D0和D1有点不中用。Uno的两路中断只和GPIO复用,因此完全不存在矛盾。 第二:USB支持的不同 Uno有独立的USB转串口芯片,所以在重启单片机时基本可以击败全国百分之九十九点九的Leonardo。而Leonard只用了一款支持USB的单片机每次reset,电脑上的串口也要被重新载入一次,插入电脑后,会先产生一个串口号,然后完全加载完之后,会变成另外一个串口号加载速度也非常慢,8s延时。试想,哪个追求速度的男人会喜欢。。。 第三:IIC接口区别 Uno的IIC接口和AD4、AD5复用,6路AD被占用4个基本问题不大。Leonardo的IIC和另外两路中断复用。 4.库的使用 Uno的SPI直接有库可以用

串口调试的几次理解

孤街浪徒 提交于 2019-11-30 13:37:49
RS-232C接口定义(DB9) 引脚 定义 符号 1 载波检测 DCD(Data Carrier Detect) 2 接收数据 RXD(Received Data) 3 发送数据 TXD(Transmit Data) 4 数据终端准备好 DTR(Data Terminal Ready) 5 信号地 SG(Signal Ground) 6 数据准备好 DSR(Data Set Ready) 7 请求发送 RTS(Request To Send) 8 清除发送 CTS(Clear To Send) 9 振铃提示 RI(Ring Indicator) 在用labcvi开发的串口读写程序与多功能串行口调试助手进行虚拟com口com1和com2进行通讯时,发现每次都是labCVI占用了com1口,然后另一软件只能用com2口了(原因可能是labcvi一直是在调试状态,没有真正退出所致)。 来源: https://www.cnblogs.com/boboanhaoweiyuan/p/11595162.html

SYN4631型PCIe转串口授时卡pcie总线转串口授时

风流意气都作罢 提交于 2019-11-30 12:30:46
SYN4631型PCIe转串口授时卡 产品概述 SYN4631型PCIe转串口授时卡是西安同步电子科技有限公司研发生产的一款通过PCIe总线转换为串口为计算机、工控机等操作系统提供高精度授时的时钟卡。该授时 卡采用流水线自动化贴片生产,使用 FPGA+ARM框架设计,接收GPS/北斗/PTP/交直流IRIG-B码/CDMA/1PPS/10MHz等外部参考信号,输出各种时间频率信号,提高系统的时间精度和准确度,满足不同用户需求。 该时钟同步卡内置高精度守时时钟源,当外部参考无效时仍然可以提供高精度授时服务。并配套提供 Windows校时软件,完全实现高精度应用程序授时,具有兼容性强,接口丰富、精度高、稳定性好、功能强、无积累误差、不受地域气候等环境条件限制、性价比高、操作简单、免维护等特点。 产品功能 a) 支持 PCIE总线转串口 授时,时间精度优于 10ms; b) 内置高精度授时型 GPS/BD双模接收机; c) 外参考失锁后依靠内置高精度时钟守时; d) 支持即插即用( Plug and Play); e) 输出秒脉冲 (PPS)时标同步脉冲信号; f) Windows/Linux 32 位 /64 位 驱动; g) 提供 windows上位机校时软件,对计算机进行自动校时; h) 输出 NEMA0183中GPRMC语句,带经纬度定位信息。 产品特点 a) 高精密,全自动

斑马105SLPlus串口打印二维码

空扰寡人 提交于 2019-11-30 11:57:57
1.根据说明书调试硬件,校准介质还有色带(很重要),我自己搞了好几天才搞明白。 2.设置好参数,比如打印介质连续、非连续,热敏还是热转质 3.打印机上电后悔自动校准,校准成功后就可以直接通过串口打印,设置好通讯参数 4.主要代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ZebraQRCode { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { serialPort1.Open(); } private void button1_Click(object sender, EventArgs e) { // 打印机的指令用“^”作为开头,任何打印指令都是从^XA开始,到^XZ结束 if (string.IsNullOrEmpty

RT-Thread中的串口DMA分析

丶灬走出姿态 提交于 2019-11-30 11:49:35
这里分析一下RT-Thread中串口DMA方式的实现,以供做新处理器串口支持时的参考。 背景 在如今的芯片性能和外设强大功能的情况下,串口不实现DMA/中断方式操作,我认为在实际项目中基本是不可接受的,但遗憾的是,rt-thread现有支持的实现中,基本上没有支持串口的DMA,文档也没有关于串口DMA支持相关的说明,这里以STM32实现为背景,梳理一下串口DMA的实现流程,以供新处理器实现时以作参考。 DMA接收准备 启用DMA接收,需要在打开设备的时候做一些处理,入口函数为rt_device_open()。主体实现是: rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) { ...... result = device_init(dev); ...... result = device_open(dev, oflag); ...... } device_init()就是rt_serial_init()函数,其主要是调用configure()函数, static rt_err_t rt_serial_init(struct rt_device *dev) { ...... if (serial->ops->configure) result = serial->ops->configure(serial,

c#串口操作

橙三吉。 提交于 2019-11-30 09:19:52
1 SerialPort _Serial = new SerialPort { PortName = "COM1", BaudRate = 9600, DataBits = 8, Parity = Parity.None, StopBits = StopBits.One, WriteTimeout = SerialPort.InfiniteTimeout, ReadTimeout = SerialPort.InfiniteTimeout, Handshake = Handshake.None, ReadBufferSize = 1024 }; 来源: https://www.cnblogs.com/wangyinlon/p/11576222.html

stm32串口接收程序 分帧处理

拈花ヽ惹草 提交于 2019-11-30 06:22:54
stm32串口接收程序 分帧处理 采用状态机的分帧方式   接收程序是所有单片机入门教程的必经之路,但是很多教程和例程只讲了如何去接收一个8位的字符数据,但实际操作时我们常常需要接收的是各式各样的数据帧,这一章主要介绍如何去进行分帧操作。 采用状态机的分帧方式   采用状态机的方式可以完成目前绝大多数的串口数据的分帧操作。   目前比较常用的数据帧格式由帧头,数据帧种类,数据帧长度,数据帧内容,帧尾,校验码等部分组成,像一些毫米波雷达、激光雷达等模块的数据帧都采用这种方式我们以一款简单的miniMPU模块为例进行分帧处理。    miniMPU的返回的数据帧有两种一种是接收的原始数据、如三轴加速度、大气压等,另一种是经过处理后的计算数据如俯仰角等。数据帧示例如下A55A12A1……78B4。    其中A55A为数据帧的帧头;12为数据帧的长度即0X12=18;A1代表接收的是第一种数据。……代表采集到的数据,按说明书解析即可,78为数据的校验码,计算方式为将……部分采集到的所有数值相加最后的8位字符即为校验码,B4为帧尾。    分帧操作的代码如下 void USART1_IRQHandler(void) //串口1中断服务程序 { static u8 states = 0;//状态机状态码 static u8 i=0;//二维数组的第一个参数 static u8 j=0;/

串口状态机,这东西很好用啊

假装没事ソ 提交于 2019-11-30 06:15:53
以前并没有发现串口状态机的好处,以至于忘记了到底怎么用到底是干什么的,最近用到了这种指定格式的数据包解析,才发现这东西非常的好用,可以增加数据传输的鲁棒性,可以对串口的数据包进行过滤只解出符合协议的数据包。这个呢其实就是一种思想,不仅仅局限于串口之间的数据传输,我认为可以用在很多指定数据协议的数据包传输解析当中。大致代码思想写在下面,希望对大家有帮助。 /* 主要的变量声明在这边 /* 串口状态机宏 */ # define DATA_HEAD 3 # define DATA_LEN 4 # define DATA_COM 5 # define DATA_NUM 6 # define DATA_CRC 7 # define DATA_TAIL 8 # define DATA_ADD 9 # define COMMAND_SIZE 20 int g_count = 0 ; //状态机缓冲区下标 int g_uart_state = DATA_HEAD; //串口状态机状态标志 unsigned char data; //串口数据 //状态机缓冲区 unsigned char command_buf[COMMAND_SIZE] = { 0 }; unsigned char *bufptr = &data; while ( 1 ) { /* 从串口中一次只读取一个字符 */ retv =

2019年9月12日星期四(STM32)

♀尐吖头ヾ 提交于 2019-11-29 19:26:26
一 . 定时器 1.PWM PWM脉冲宽度调制(Pulse Width Modulation)是通过微处理器的数字输出(高低电平)来对模拟电路进行控制的一种非常有效的技术,在测量,通信和功率控制等领域被广泛使用 占空比 - 在规定时间内,有效电平所占的比例 2.stm32 通用定时器有 PWM 功能 通用定时器可以和GPIO口配合,通过GPIO输出PWM波形,定时器的周期就是PWM波的周期,PWM波的电平改变时间通过定时器的比较计数器来决定 PWM波的波形由周期(定时器周期),极性(配置),占空比(比较计数器)共同决定 PWM波是通过GPIO输出,属于GPIO的复用输出功能,需要配置GPIO的复用映射(选择对应的复用功能) 3.GPIO 的功能复用 参考手册中所有的GPIO都与16个复用功能,通过寄存器配置对应的复用功能,但是实际上芯片每个IO口的复用功能没有这么多,要根据原理图(具体芯片手册)来查询每隔IO口有哪些复用功能,根据查询结果去配置寄存器 4.PWM 定时器编程方法 (LED1 呼吸灯为例 ) ( 1 )开启定时器 14 和 GPIOF 的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE); .... ( 2 )初始化 PF9 为复用输出功能 GPIO_Init(); //GPIO_InitStruct