labview的RS232驱动程序

简介: labview的RS232驱动程序

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?


项目中解决的问题


STM32大容量芯片最多可以提供多达5路UART,其中前3路(UART1~UART3)还支持同步传输,并且可以配置成LIN通信模式,因此,STM32官方手册称其为USART1~USART3;剩余两路为UART4和UART5。为了叙述方便,这里统一称为COM1~COM5串行接口。

RS232底层协议是比较复杂的,在学习FPGA的过程中,经常会用到Verilog编写的串口程序,状态机切换还是比较多的。其实NI也提供了LabVIEW下的FPGA串口IP核,就是利用LabVIEW的状态机架构来实现整个RS232通信协议的,感兴趣的用户可以从NI官网下载相关程序学习一下。好在STM32内部已经帮我们实现了最底层的串口收发过程,用户只需要从收发缓冲区中读取或者写入字节数据就可以了,非常简单。

另外,对于刚刚接触LabVIEW的新用户来说,经常会把VISA函数当成串口函数,实际上NI-VISA驱动包本质上是将整个仪器行业的通信协议(RS232、GPIB、USB、Ethernet等)封装在一起,供不同行业的工程师使用,这样可以简化仪器通信。其实,这里的VISA函数是一种运行在上位机、高度封装的多态VI。

本节介绍的是我们专门针对STM32芯片设计和优化过的串口函数,一共有5路COM口,并且每路之间都相互独立,默认情况下,都开辟了1KB大小的接收缓冲区。因此,对于那些需要多路串口并行工作的应用来说,使用我们提供的串口VI将会非常方便。


做题思路


通常情况下,串口只需要6个基本操作函数就可以满足绝大多数的应用,STM32也不例外,如图

c090e76d39074b5c9a70121d2fca85d0.png

(1)串口初始化

为了保证串口初始化后的波特率是正确的,需要先利用Sys子面板中的STM32_Clock_Init.vi函数对STM32系统时钟进行倍频操作,然后再执行串口初始化。

串口初始化函数的输入端参数比较多,除了基本的VISA资源名(COM1~COM5)、波特率(4800~115200)、数据位(8~9位)、校验(无、奇偶校验)、停止位(1.0、1.5、2.0位)之外,还有两个比较重要的参数:读取终止符和是否启用终止符。

其中,VISA资源名里面提供了5路COM口,每路COM口对应STM32实际的物理引脚,可以打开该VI的前面板进行查看;波特率最大可以设置为115200bps,即115.2Kbps;数据位一般选择默认的8位就可以了;COM4与COM5不支持半位停止位,故只能选择1.0或2.0位,而COM1~COM3支持全部;终止符默认为换行符“\n”即0x0A,常用的终止符还有回车符0x0D;一旦启用终止符,那么串口在读取数据时,遇到事先设置的终止符,就会立刻停止,将终止符之前的数据全部读取出来;如果没有遇到终止符,则会按照预设的字节数进行读取。以上这些配置过程均由UART子面板中的VISA Configure Serial Port.vi函数来完成,如图

fa9e83812e244153a427915be4c940a1.png

(2)串口接收缓冲区字节数

一般情况下,在读取串口缓冲区中的数据之前,需要指定读取字节的数量。为了能够将缓冲区中所有数据一次性读取出来,我们可以先利用UART子面板中的VISA Serial Port Byte.vi函数来获取当前接收缓冲区中的字节数量,然后再赋给串口读函数即可,如图(3)串口写入

b888ca2ff98347c6af6fbdb22f45c430.png

为了简化STM32中的串口数据发送流程,用户直接将字符串或者字节数组放到STM32串口发送缓冲区就可以了,底层的UART控制器会自动执行发送操作。串口写入发送可以利用UART子面板中的VISA Serial Write.vi函数来实现,如图

8af1175ac638474db6cf32127778a194.png

(4)串口读取

如果在串口初始化的时候没有开启终止符,并且要求读取的字节数小于接收缓冲区现有的字节数,那么返回的字符串长度就会等于指定读取的字节数长度,反之UART控制器会将缓冲区中所有的数据全部返回;当然,如果开启了终止符,那么只会读取终止符之前这些数据,与读取字节数无关。当然,更多情况下,可以先获取缓冲区中的字节数,然后赋给读函数即可。串口读数据可以使用UART子面板中的VISA Serial Read.vi函数实现,如图

76d92693d84f4d97b39520766d986f9c.png

(5)清除串口缓冲区

如果接收缓冲区有历史残留的数据,用户在读取之前可以利用UART子面板中的VISA Clear Port.vi函数先清空一下,如图

2bfa525691ff4ccc87def8fdfe6b8308.png

(6)串口关闭

当STM32进入待机或者休眠模式时,为了减少系统的功耗,需要将串口临时关闭,禁止串口时钟。该功能可以利用UART子面板中的VISA Clear Serial Port.vi函数来完成,如图


0f5313561d2b4e43b9d17d0e949b7911.png

目录
相关文章
|
12月前
|
芯片
串口、COM口、RS232、RS485、USB区别
串口、COM口、RS232、RS485、USB区别
418 0
|
芯片
STM32使用HAL库实现RS485通讯(全双工串口)
STM32使用HAL库实现RS485通讯(全双工串口)
753 0
|
存储 程序员 编译器
windows下的串口编程,串口操作类封装
windows下的串口编程,串口操作类封装
|
存储 芯片 UED
【STM32】单片机模式配置&FlyMcu串口下载固件&STLINK Utility
【STM32】单片机模式配置&FlyMcu串口下载固件&STLINK Utility
392 0
|
传感器 芯片
labview的CAN驱动程序
labview的CAN驱动程序
116 0
|
物联网 开发者
根据LED修改峰鸣器驱动程序|学习笔记
快速学习根据LED修改峰鸣器驱动程序
93 0
根据LED修改峰鸣器驱动程序|学习笔记
|
Linux
Linux串口驱动程序(3)-打开设备
Linux串口驱动程序(3)-打开设备先来分析一下串口打开的过程: 1、用户调用open函数打开串口设备文件;2、在内核中通过tty子系统,把open操作层层传递到串口驱动程序中;3、在串口驱动程序中的xx_open最终实现这个操作。
1092 0