您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > STM32与LabVIEW串行通信的设计
第32卷第05期2011年05月煤矿机械CoalMineMachineryVol.32No.05May.2011STM32与LabVIEW串行通信的设计张立勋,李雪伟,唐小景(平顶山煤矿机械有限责任公司,河南平顶山467000)摘要:介绍了芯片STM32F103基于通用同步/异步收发器和LabVIEW基于虚拟仪器软件架构的串口配置过程,对设计中的关键程序进行了重点分析,并通过硬件平台验证了方法的可行性。最终实现了基于RS232协议的ARM芯片STM32与LabVIEW的串行通讯。关键词:同步异步收发器;虚拟仪器软件架构;串行通信中图分类号:TP31文献标志码:B文章编号:1003-0794(2011)05-0215-03DesignofSerialCommunicationBetweenSTM32andLabVIEWZHANGLi-xun,LIXue-wei,TANGXiao-jing(PingdingshanCoalMineMachineryCorporationLimited,Pingdingshan467000,China)Abstract:IntroductionofserialconfigurationofSTM32F103VET6basedonUSARTandLabVIEWbasedonVISA.Thekeypointofdesignprocedurewasanalyzed,andthefeasibilityofmethodwasverifiedbyhardwareplatform.FinallyachievedserialcommunicationbetweenSTM32andLabVIEWbasedonRS232protocol.Keywords:USART;VISA;serialcommunication0引言STM32系列芯片是ST(意法半导体)公司近年来推出的一款基于Cortex-M3核心的ARM芯片,以其高性能、易上手和低价位的特点迅速得到推广。而LabVIEW是NI(美国国家仪器)公司的一款编程软件,又称虚拟仪器,以其图形语言编程而著!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!流不能立刻消失,而损坏电路。+24V在大功率设备较强的电磁干扰环境下正常工作。开始+5VRB1VCCR54.7kR62.2kQ21U12TLPR72003D14R910kD2R81120236OUT_1k11kR11+24V54C7IU初始化定时器是否溢出否是A/D采集图3控制输出电路2系统软件设计在系统的软件设计中,首先完成系统的初始化工作:A/D转换、I/O口等,其中利用PIC的片内资源否烟雾浓度是否超限是继电器闭合复位TMRO和预分频器来启动ADC转换,使用AN0通道实现对烟雾传感器输出的模拟量进行转换,转换参考文献:图4应用程序流程图结果采用了左对齐方式。当转换结束后,进入中断,在中断服务程序中,读取转换好的数据。然后与预先设置的标准限定值进行比较,当烟雾浓度超过限定值时,则给单片机的RB1口赋值为低电平,即继电器闭合,停止带式输送机运转。其流程如图4所示。3结语本文完成了一种基于PIC单片机的输送带巷道烟雾浓度监测装置的设计。通过以PIC16F873A单片机作为处理器完成对带式输送机工作环境的烟雾浓度监测,防止火灾事故发生。并且由于PIC单片机具有较强的抗干扰能力,保证了该装置可以215[1]陈悦,刁若菲.烟雾检测火灾报警系统的设计[J].微计算机信息,2007(8):93-94.[2]罗翼,张宏伟.PIC单片机应用系统开发典型实例[M].北京:中国电力出版社,2005.[3]汪巍.基于单片机的矿用胶带输送机安全电控系统设计[J].矿业研究与开发,2005(1):66-67.[4]王卫军.离子型烟雾传感器的研制[J].矿业安全与环保,2004(6):15-17.[5]周俊峰.怎样选用继电器[M].北京:国防工业出版社,1985.作者简介:梁兵(1987-),江苏盐城人,现为中国矿业大学硕士研究生,研究方向为通信与信息系统,ARM嵌入式系统,电子信箱:liangbing861212@sina.com.责任编辑:于淑清收稿日期:2011-01-09Vol.32No.05STM32与LabVIEW串行通信的设计——张立勋,等第32卷第05期名。本文重点介绍了STM32F103与LabVIEW串行通信的配置方法,并搭建了硬件平台进行实验验证。利用ST公司提供的固件库配置了下位机的串口和NI公司提供的VISA函数配置了上位机的串口。该方法简单可靠,具有很好的通用性。1芯片STM32F103的串口配置实验中使用的芯片STM32F103VET6,内置3个通用同步/异步收发器(USART1、USART2和US-ART3),完全支持RS232协议,且有更高的传输速率。接口电平匹配芯片选择高速且兼容3.3V单片机的MAX3232(其外围电路与MAX232同)。下面将对库函数的使用方法、I/O端口和串行口的配置分别进行说明。ST公司给出了整个芯片外设的固件库,只需简单配置即可使用。首先把固件库中Libraries\CMSIS\Core\CM3里面的6个文件加入到工程中去,里面有启动文件、寄存器和变量定义文件,是使用库编程必不可少的文件;然后在工程中加入实验中用的stm32f10x_rcc.c/stm32f10x_gpio.c和stm32f10x_usart.c3个文件分别用来配置时钟、端口和串口。完成后的文件列表如图1中虚线框内所示。usart1start_codestartup_stm32f10x_hd.slibrarycore_cm3.csystem_stm32f10c.cstm32f10x_gpio.cstm32f10x_rcc.cstm32f10x_usart.cuser_codemain.cintroduceintroduce.txt图1加入工程的库函数重点讲述STM32串口配置的方法。首先STM32要初始化时钟和外设,然后才能在主函数编程实现具体功能。实验中的关键函数:#include“stm32f10x.h”//寄存器和变量定义voidGPIO_Configuration(void)//配置GPIO{GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_US-ART1|RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//A9口推挽输出GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPI-O_Mode_IN_FLOATING;//A10口浮空输入GPIO_Init(GPIOA,&GPIO_InitStructure);216}voidUSART1_Config(void)//配置USART1{USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowContol=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_InitStructure);USART_Cmd(USART1,ENABLE);//使能串口}intmain(void)//主函数{intRX_status=0;SystemInit();//系统初始化GPIO_Configuration();//配置GPIOUSART1_Config();//配置USART1while(1){RX_status=USART_GetFlagStatus(USART1,US-ART_FLAG_RXNE);//接收完成标志位状态if(RX_status==SET)//数据接收完成,执行{USART_SendData(USART1,USART_ReceiveData(USART1));//按照原数据发送出去while(USART_GetFlagStatus(USART1,US-ART_FLAG_TC)==RESET);//发送完,复位}}}以上程序虽简单,但很完整。配置好库函数后,在用户文件中加入该程序可直接编译运行。实现的功能是:收到一个字符后立即把该字符再发送出去。子程序中给的函数和变量名已经能很好的代表其含义,如USART_BaudRate表示波特率;Stop-Bits_1表示一个停止位。下面仅重点分析主函数中USART1收发数据过程。如图2所示,(1)TC是状态寄存器(USART_SR)的第6位,是发送完成标志位,TC=1表示发送完成,需软件复位;(2)RXNE是状态寄存器的第7位,是读数据寄存器非空标志位,RXNE=1表示接收到数据。读数据寄存器清零该位,因此无需软件复位。第32卷第05期STM32与LabVIEW串行通信的设计——张立勋,等Vol.32No.05初始化系统初始化GPIO初始化USART1否RXEN=1?是读出接收的数据并发送出去首先把串口参数(波特率、数据位等)设置和STM32F103中的完全一致,并选择相应的串口(本例是COM8)。然后点击LabVIEW的运行按钮,在“写入字符串”窗口中写入任意字符(需小于10个字节),立即在“读取字符串”窗口中接收到相同的字符。可见,在波特率设置为115200bps,8-N-1模式下,收发完全正常。后来又测试了几组更低波特率(如9600bps),依然正常通信。由此可以说明,否继续等待TC=1?是TC=0STM32F103与LabVIEW的串行交互通信成功。实验所用接口芯片MAX3232,其最大通信速率为235000bps;通信线用的是USB转串口线(主控图2USART1收发流程图2LabVIEW的串口配置要使用串口通信,首先需要安装NI的设备驱动软件,否则无法使用VISA模块。程序中需要用的函数有VISA配置串口、VISA写入、VISA读取和VISA关闭。这些模块在程序面板的函数\仪器I/O\串口下能够找到。配置后的程序框图如图3所示。串口选择I/O真真波特率U32CH340)最大速率2Mbps;STM32F103的USART1口的最大速率为4.5Mbps。根据这些特点,把波特率调高到256000bps,系统仍能稳定运行。若再调高,误码率就大大增加,无法完成正常通信。可见256kbps就是该平台下的最大通信速率,由各个硬件的最大通信速率可知,瓶颈是MAX3232。4结语利用ST官方的固件库配置了STM32F103的USART1;利用NI官方的设备驱动VISA模块配置数据位VISAVISALVISA了LabVIEW的串口,是一种较为简便的串口配置方SCRIAabcabcU16奇偶校验U16停止位U16流控制U16WR写读TFTF停止TFVISAC图3程序框图法。该方法对ST32系列的所有ARM芯片与Lab-VIEW的串行通讯都适合,具有很好的通用性。参考文献:[1]陈锡辉,张银鸿.
本文标题:STM32与LabVIEW串行通信的设计
链接地址:https://www.777doc.com/doc-1358434 .html