搜档网
当前位置:搜档网 › STM32之USB固件升级 IAP USB程序升级 上位机软件操作

STM32之USB固件升级 IAP USB程序升级 上位机软件操作

STM32之USB固件库IAP升级

(以下全部为实际操作所得)

最近做了STM32通过USB程序升级功能,也就是所谓的DFU,所使用的程序为ST公司提供的例子程序(位置为:安装目录/ARM/Examples/ST/STM32F10xUSBLib/Demos/Device_Firmware_Upgrade),此文件夹包含多两个工程,project文件夹存放的是用来升级的程序-IAP,binary文件夹存放的是用户程序—APP。

一、USB升级程序

打开Project里面的工程(用什么软件打开就不用我讲了吧),如果你电脑上有Source Insight就更好了,方便查阅。从MAIN里面我们可以知晓,程序先判断某个按键是否按下(这个可以根据你的实际电路设计来修改),如果按下则进入升级功能程序,否则就跳转到APP程序,也就是用户程序。不多说了,直接上程序。

i f (DFU_Button_Read() == 0x00)//如果未按下1

{ /* Test if user code is programmed starting from address 0x8003000 */

if (((*(vu32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) 2

{ /* Jump to user application */

JumpAddress = *(vu32*) (ApplicationAddress + 4); 3

Jump_To_Application = (pFunction) JumpAddress; 4

/* Initialize user application's Stack Pointer */

__MSR_MSP(*(vu32*) ApplicationAddress); 5

Jump_To_Application(); 6

}

} /* Otherwise enters DFU mode to allow user to program his application */

1、判断按键是否按下,如果未按下,则准备进入用户程序区,是准备哦,因为后面还有判断语句。

否则就进入USB升级程序。下面的USB升级程序就是配置一些USB方面的东东,因为和系统已经配好了,就无需管了。

2、用来判断用户的代码存放地址是否郑旭(这个地址用户可以修改,是系统的一个宏定义

ApplicationAddress,稍后将做解释),如果用户程序代码未按规定存放,或者用户代码区没有程序的话,程序会跳到USB升级程序那里去,等待下载升级程序。

3、ApplicationAddress为用户程序的首地址,同时也是堆栈的地址。紧接着它的是复位中断地址,

所以这条语句是获取复位中断的地址。

4、获取堆栈的地址

5、将堆栈的地址写入堆栈指针(什么用途就不用说了)

6、跳转到用户函数去执行。

程序中我们要修改几个宏定义,具体名称和意义如下所示(用搜索功能获取这些名称位置):

ApplicationAddress 用户程序地址,系统默认为0x08000000,我们修改为0x08003000。

DFU_ENTER GPIOA

DFU_ENTER_PIN GPIO_Pin_8

RCC_APB2Periph_GPIO_DFU RCC_APB2Periph_GPIOA 这三个为判断按键的管脚配置

USB_DISCONNECT GPIOB

USB_DISCONNECT_PIN GPIO_Pin_14

RCC_APB2Periph_GPIO_DISCONNECT RCC_APB2Periph_GPIOB 这个三给为主机识别

USB设备的控制端口

以上为程序上要进行的修改,当然你可以根据你的需要修改一些应用上的功能。

USB升级工程配置如下,(例子程序的工程已经配好,你可以查看,这里只用来做解释)

红色框内为程序的首地址,绿色框为所使用的地址空间大小,蓝色框表示使用Microf的缩减库,因为程序空间有限,否则会出错。

红色圈内勾上,具体什么用处,不晓得,哈哈。

以上就是对升级程序的修改。

二、用户程序

用户程序只要修改一个地方,就是中断向量表,呵呵,因为我们用户程序的地址变了,二中断向量表是紧随用户程序初始地址的,所以也需要修改,当然如果你程序未用到中断,就可以不用改(强烈建议你还是该,否则会出现你预料不到的问题)。

打开你的用户程序,使用搜索插到系统中所有的涉及到NVIC_SetVectorTable()函数的语句,将里NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0)改为NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x08003000),当然具体值要以你实际使用的为准。

注意:如果你的电路中设计了用按键去控制电源开关,如果你在升级程序中配置过,在用户程序中请勿重新配置,否则会出错,因为我工程中用到了长按键开关机功能,出现过这种错误。

好了,用户程序就只要做这些修改。下面将介绍用户程序工程所需要的修改

红色圈内为用户程序的开始地址,系统默认为0X8000000,我项目中修改为了0X8003000,这个要和USB升级程序中的ApplicationAddress宏定义对应;蓝色框为你给用户程序的空间大小,这个要比你实际程序大小大,最好是设定为你用的芯片的FLASH空间大小减去USB升级程序所使用的FLASH空

间大小,这里我设置为0X7D000,你可以以这个为参考同时结合你红色圈内的地址值来修改。记住蓝色

圈必须勾上,否则USB升级程序那里会判断不通过。

链接和下载的选项按上图进行设置。

工程的其他设置请按你平时设置进行。

三、上位机

上位使用的是ST公司的一款软件(ST公司其实很难下到,自动上次更新过一次网站之后,各位就自己去百度咯),软件名称为DfuSe_Demo_V3.0_Setup.exe,点击运行安装程序,一路NEXT就行了,安装成功后可以从开始程序看到我们所安装的软件,

我们要用到两个,DFU File Manager是用来生成下载所需要的DFU格式文件的,DfuSe Demostration是用来下载程序的。

(1)、STM32 USB驱动安装

将你的STM32开发板通过USB与上位机连接,STM32先不上电运行(这里假设你已经将USB 升级程序下载到了STM32电路板上,记住不是用户程序,是USB升级程序),按住前面说的那个判断是否下载程序的按键,然后给STM32电路板上电,之后放开按键,STM32进入到USB升级程序中去了,如果这些操作成功的话,你的电脑会弹出一个发现硬件的对话框,同时要求你安装驱动,你选择从列表安装,然后选择这个路径安装驱动C:\Program Files\STMicroelectronics\Software\DfuSe\Driver,点击安装进行驱动安装,安装过程中可能会弹出一个对话框叫你给一个STTub30.sys,你选择录下路径C:\Program Files\STMicroelectronics\Software\DfuSe\Driver\x86里面的STTub30.sys,好了,驱动安装完成,你可以去看下“设备管理器”,你会发现有如下红色框中设备

(2)、DFU File Manager的使用

点击运行DFU File Manager出现如下界面,

我们勾选上面的,然后点击确定,为什么选那个自己看英文,嘿嘿。之后出现图一界面。

图一

红色按钮是用来选择你所需要转换的用户程序HEX或BIN文件的,选择的时候,要讲图二红圈类的文件类型选择为HEX.

图二

选择后点击图一中的蓝色框按钮图三界面,把文件名称框里面的型号改成你自己定义的名称,点击保存就可以生产下载用的DFU类型文件了,如果你想换另一个HEX进行转换,你需要先点击图一中的绿色对话框,然后再选择文件。哈哈,简单吧!

(3)、DfuSe Demostration的使用

点击DfuSe Demostration弹出如下对话框。(如果你的STM32的电路板已经通过USB与电脑连接了,且已经进入了USB下载程序,则此处会出现特定字符),红色对话框为空表示你的STM32电路板没有和电脑建立连接,通俗讲就是和电脑主机握手不成功,具体请看USB协议,嘿嘿。

握手操作如下进行:将你的STM32电路板断电,按住判断是进入下载程序还是用户程序的按键,给STM32电路板上电,放开按键,与电脑进行USB连接,上图的界面变为如下界面,红色框中表示主机和STM32建立了连接,如果还未出现,请查看你的驱动是否安装、操作顺序是否正确、电路板是否连接正确(最好检查好你的USB接口是否正确,我就开始在电路板上把DP,DM数据线搞反了,结果设备管理器总是显示UNKNOW DEVICE).

点击上图的蓝色按钮(choose…),选择(2)中用DFU File Manager软件生成的DFU类型文件,如下图所示

当你的选择完了文件后,界面如下,红色框表示选择了正确的文件,同时绿色框中两个按键被激活,点击蓝色按键,点击蓝色框中的按键,开始进行升级(会弹出询问对话框,你选“是”)

升级过程如下图所示

当升级完成后出现如下界面,红色框中表示程序升级成功,升级完程序后,点击蓝色框中的按钮,程序自动退出升级程序,并且进入用户程序运行,这样整个STM32 通过USB进行IAP 升级就完成了,

嘿嘿,简单吧,感谢ST公司,提供了例子库,让升级变得如此简单。

上位机和下位机通信

目录 摘要 1 引言 (1) 2 结构设计与方案选择 (2) 2.1设计任务 (2) 2.1.1单片机的选择 (2) 2.1.2电平转换 (2) 2.1.1单片机的选择 (2) 2.1.3单片机与pc机通信原理 (2) 2.2软件方案选择 (2) 2.2.1 上位机编程方案选择 (3) 2.2.2 单片机编程方案选择 (3) 2.3 总体方案选择 (2) 3 硬件设计 (8) 3.1单片机主要特性 (5) 3.2 MAX232电平芯片介绍10 (10) 3.3 硬件电路设计图 (11) 3.3.1 PC机与单片机通信接口电路设计框图 (11) 3.3.2整体设计原理图 (11) 4软件设计 (12) 4.1上位机程序设计 (12) 4.2下位机程序设计 (13) 5 软硬件调试部分 (21) 5.1 PROTEUS软件仿真 (21) 5.1.1 Protues简介 (21) 5.1.2 Protues仿真电路图 (22) 5.2 VC软件仿真 (21) 结束语 (27) 致谢 (28) 参考文献 (29)

摘要 本文主要描述了利用PC机与AT89C51单片机之间的通信程序设计实现温度显示。并详述了在VC6.0环境下,上位机利用MSCOMM通信控件与单片机之间串口通信实现温度显示。由单片机采集一个温度信号,将采集到的温度信号传送给PC机显示,PC机用VC6.0编写程序,单片机程序用C语言编写,最后用PROTUES软件进行仿真实现温度显示。 关键词:单片机MSCOMM控件VC6.0 AT89C51 温度显示

1引言 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。 现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。加之单片机的计算能力有限,难以进行复杂的数据处理。因此在功能比较复杂的控制系统中,通常以PC机为上位机,单片机为下位机,由单片机完成数据的采集及对装置的控制,而由上位机完成各种复杂的数据处理及对单片机的控制。

基于C#的串口通信上位机和下位机源程序

基于单片机串口通信的上位机和下位机实践 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 首先亮出C#的源程序吧。 主要界面: 只是作为简单的运用,可以扩展的。 源代码: using System; using System.Collections.Generic; using https://www.sodocs.net/doc/a01676323.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Timers; namespace 单片机功能控制 { public partial class Form1 : Form

{ public Form1() { InitializeComponent(); } SerialPort sp = new SerialPort(); private void button1_Click(object sender, EventArgs e) { String str1 = comboBox1.Text;//串口号 String str2 = comboBox2.Text;//波特率 String str3 = comboBox3.Text;//校验位 String str4 = comboBox5.Text;//停止位 String str5 = comboBox4.Text;//数据位 Int32 int2 = Convert.ToInt32(str2);//将字符串转为整型 Int32 int5 = Convert.ToInt32(str5);//将字符串转为整型 groupBox3.Enabled = true;//LED控制界面变可选 try { if (button1.Text == "打开串口") { if (str1 == null) { MessageBox.Show("请先选择串口!", "Error"); return; } sp.Close(); sp = new SerialPort(); sp.PortName = comboBox1.Text;//串口编号 sp.BaudRate = int2;//波特率 switch (str4)//停止位 { case "1": sp.StopBits = StopBits.One; break; case "1.5": sp.StopBits = StopBits.OnePointFive; break; case "2": sp.StopBits = StopBits.Two; break;

VC++编写简单串口上位机程序

VC++编写简单串口上位机程序?? 2010年4月13日10:23:40 ?串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享 一下,体验一下单片机和PC通信的乐趣。 编译环境:VC++6.0?操作系统:VMWare虚拟出来的Windows XP?? 程序实现功能: 1、 PC初始化COM1口,使用n81方式,波特率57600与单片机通信。PC的COM口编号可 以通过如下方式修改: ?当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。COM1口可用的话,会提示串口初始化完毕。否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。? 2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC 转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在窗口里显示。(见文章末尾图)???3、为防止串口被一只占用,点击关闭串口可以关闭CO M1,供其它程序使用,点击后按钮变为打开串口,点击可重新打开COM1。 程序的编写:

1、打开VC++6.0建立基于对话框的MFC应用程序Test,? ?

??

??2、在项目中插入MSComm控件:工程->增加到工程->Componentsand Controls->双击Registered ActiveX Controls->选择MicrosoftCommunications Control, version 6.0->Insert,按默认值添加,你会发现多了个电话图标,这是 增加后串口通信控件。?

基于C#的串口通信上位机和下位机源代码

基于单片机串口通信的上位机和下位机实践串口 Universal Serial Bus或者USB RS232 GPIB兼容的设备也带有RS-232 获取远程采集设备的数据。 bit byte 发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488 202 1200米。 首先亮出C#的源程序吧。

using System; using System.Collections.Generic; using https://www.sodocs.net/doc/a01676323.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Timers; namespace 单片机功能控制 { public partial class Form1 : Form { public Form1() {

InitializeComponent(); } SerialPort sp = new SerialPort(); private void button1_Click(object sender, EventArgs e) { String str1 = comboBox1.Text;//串口号 String str2 = comboBox2.Text;//波特率 String str3 = comboBox3.Text;//校验位 String str4 = comboBox5.Text;//停止位 String str5 = comboBox4.Text;//数据位 Int32 int2 = Convert.ToInt32(str2);//将字符串转为整型Int32 int5 = Convert.ToInt32(str5);//将字符串转为整型groupBox3.Enabled = true;//LED控制界面变可选 try { if (button1.Text == "打开串口") { if (str1 == null)

说把手教你编写LabView上位机程序

手把手教你从零开始用labview编写智能车上位机程序(1) labview, 智能, 手把手, 程序, 编写 软件安装和基础知识准备 其几天把我的上位机软件发布在里这里,发现大家对这个还是很感兴趣的,因为上位机软件对于做摄像头的来说是必备的工具(也许有人说他不需要,那我很佩服他的判断能力和程序调试能力,他肯定是天才级别的人物,希望我能拜他为师,呵呵!)。不过这种东西还是自己编写的用起来顺手。想显示什么就显示什么。选择labview编写是因为labview容易上手,我从完全不会到编写到完成那个上位机软件也就用了一个星期而已。如果学VC,MFC的话,你估计对用上1个月也许还做不出什么。但是labview功能也很强大,可是我们用到的并不多,网上教程多,可是我们能用上的也并不多,学起来麻烦。我下面就专门针对这个labview的智能车上位 机软件的编写来讲解吧! 首先发布一个关于labview的广告,大家了解一下labview主要是干什么的。 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的 程序是框图的形式。 与C和BASIC一样,LabVIEW也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。LabVIEW也有传统的程序调试工具,如设置断点、以动画方式显示数据及 其子程序(子VI)的结果、单步执行等等,便于程序的调试。 虚拟仪器(virtual instrumention)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。下面的框图反映了常见的虚拟仪器方案。 虚拟仪器的主要特点有: 尽可能采用了通用的硬件,各种仪器的差异主要是软件。 可充分发挥计算机的能力,有强大的数据处理功能,可以创造出功能更强的仪器。 用户可以根据自己的需要定义和制造各种仪器。 虚拟仪器实际上是一个按照仪器需求组织的数据采集系统。虚拟仪器的研究中涉及的基础理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。 虚拟仪器的起源可以追溯到20世纪70年代,那时计算机测控系统在国防、航天等领域已经有了相当的发展。PC机出现以后,仪

上位机下位机串口通信

大连海事大学 课程设计报告 课程名称:计算机微机原理课程设计 成员: 成员1:2220133293 范凯锋 成员2:2220132642 唐绍波 成员3:2220130079 曹晓露 设计时间:2016年3月7日至3月18日

考核记录及成绩评定

目录 1.设计任务与要求 (1) 1.1课程设计题目 (1) 1.2课程设计的背景 (1) 1.3课程设计的目的 (1) 1.4课程设计的意义 (1) 1.5设计任务 (1) 2.设计方案 (2) 2.1参数采集和传输设计 (2) 2.2参数显示设计 (2) 2.3模拟信号采样设计 (2)

2.4硬件研制过程 (2) 3.详细设计 (3) 3.1硬件系统框图与说明 (3) 3.2硬件设计 (4) 3.3软件主要模块流程图与说明 (7) 4.设计结果及分析 (8) 5.成员分工及工作情况 (9) 5.1成员分 工 (9) 5.2工作情 况 (9) 5.3实验总结 (9) 6.参考文献 (9) 7. 附录 (10)

一、设计任务与要求 1.1课程设计题目 双机数据采集系统设计 1.2 课程设计的背景 二十一世纪是信息化高速发展的世纪,产业的信息化离不开微型计算机的支持。微型计算机的进步是推动全球信息化的动力。因此在二十一世纪掌握微型计算机接口技术是十分有必要的。本次课题是双机参数采集系统设计,这次课题旨在通过自己对所需功能芯片的设计与实现来巩固以前所学的微机原理课程知识,同时也提高动手实践的能力,还有为将来进行更大规模更复杂的开发积累经验。 随着软件规模的增长,以及随之而来的对软件开发进度和效率的要求,高级语言逐渐取代了汇编语言。但即便如此,高级语言也不可能完全替代汇编语言的作用。 1.3课程设计的目的 《微机原理与汇编语言》是一门实践性和实用性都很强的课程,本次课程设计是在课程学习结束后,为使学生进一步巩固课堂和书本上所学知识,加强综合能力,充分理解和运用所学到的知识,通过简单的应用系统的设计,提高系统设计水平,启发创新思想。通过本课程设计希望达到以下目地: ?培养资料搜集和汇总的能力; ?培养总体设计和方案论证的意识; ?提高硬件,软件设计与开发的综合能力; ?提高软件和硬件联合调试的能力; ?熟练掌握相关测量仪器的使用方法;

vc++上位机程序

VC++编写简单串口上位机程序 2010年4月13日10:23:40 串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C 语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享一下,体验一下单片机和PC通信的乐趣。 编译环境:VC++6.0 操作系统:VMWare虚拟出来的Windows XP 程序实现功能: 1、PC初始化COM1口,使用n81方式,波特率57600与单片机通信。PC的COM口编号可以通过如下方式修改: 当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。COM1口可用的话,会提示串口初始化完毕。否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。 2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在窗口里显示。(见文章末尾图) 3、为防止串口被一只占用,点击关闭串口可以关闭COM1,供其它程序使用,

点击后按钮变为打开串口,点击可重新打开COM1。 程序的编写: 1、打开VC++6.0建立基于对话框的MFC应用程序Test,

2、在项目中插入MSComm控件:工程->增加到工程->Components and Controls->双击Registered ActiveX Controls->选择Microsoft Communications Control, version 6.0->Insert,按默认值添加,你会发现多了个电话图标,这是增加后串口通信控件。

上位机与下位机之间通信编程

摘要 本文主要描述了利用PC机与A T89C51单片机之间的通信程序设计实现温度显示。并详述了在VC6.0环境下,上位机利用MSCOMM通信控件与单片机之间串口通信实现温度显示。由单片机采集一个温度信号,将采集到的温度信号传送给PC机显示,PC机用VC6.0编写程序,单片机程序用C语言编写,最后用PROTUES软件进行仿真实现温度显示。 关键词:单片机MSCOMM控件VC6.0 AT89C51 温度显示

目录 摘要 1 引言 (1) 2 结构设计与方案选择 (2) 2.1设计任务 (2) 2.1.1单片机的选择 (2) 2.1.2电平转换 (2) 2.1.1单片机的选择 (2) 2.1.3单片机与pc机通信原理 (2) 2.2软件方案选择 (2) 2.2.1 上位机编程方案选择 (3) 2.2.2 单片机编程方案选择 (3) 2.3 总体方案选择 (2) 3 硬件设计 (8) 3.1单片机主要特性 (5) 3.2 MAX232电平芯片介绍10 (10) 3.3 硬件电路设计图 (11) 3.3.1 PC机与单片机通信接口电路设计框图 (11) 3.3.2整体设计原理图 (11) 4软件设计 (12) 4.1上位机程序设计 (12) 4.2下位机程序设计 (13) 5 软硬件调试部分 (21) 5.1 PROTEUS软件仿真 (21) 5.1.1 Protues简介 (21) 5.1.2 Protues仿真电路图 (22) 5.2 VC软件仿真 (21) 结束语 (27) 致谢 (28) 参考文献 (29)

1引言 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。 现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。加之单片机的计算能力有限,难以进行复杂的数据处理。因此在功能比较复杂的控制系统中,通常以PC机为上位机,单片机为下位机,由单片机完成数据的采集及对装置的控制,而由上位机完成各种复杂的数据处理及对单片机的控制。

上位机和下位机控制功能对比

【修改】上位机和下位机控制功能对比 本文上位机控制和下位机控制组态软件进行了简单的对比,通过一些典型示例说明了分别适合上位机和下位机控制的场合。 当前组态软件在工业控制中得到了日益广泛的应用。组态软件依据自身的过程数据库,下连各种硬件设备,并通过动态人机界面可以将采集处理的数据展现给用户,或者传递给其他应用程序。其结构如图所示: 图1 组态软件结构图 组态软件的出现,由于其预先提供了各种常用组件和相关设备驱动,一方面将监控系统设计的难度大为降低,开发相关系统的时间也大为缩短,另一方面,由于可以自由连接多种设备,提供了一个平台,用户可以依据需要设计出成本最优的工程。 对于硬件设备,特别是可编程的PLC等硬件,自身具有一定的控制功能,而可以连接PLC等硬件的组态软件也可以通过脚本等执行一定的控制功能,那么控制是交给上位机的组态软件,还是下位机的PLC呢?这里先对两者做一个简单的比较: 下位机控制 下位机可以执行一些相关的控制动作,优点在于其速度快,可靠性高,稳定。其缺点在于受到其自身的限制,对于一些特殊的复杂控制,以及和其他特殊设备相关或者

涉及到关系数据库等控制功能作无法执行。 上位机控制 上位机的组态软件同样可以执行一定的控制动作,其优点在于脚本编写更容易,而且可以方便可执行涉及到多个设备以及关系数据库或者其他数据的控制动作,能充分发挥自身系统的优势。缺点在于有时会遇到上位机和下位机通讯的时间瓶颈,而且通常组态软件运行工控机在其他操作系统上,其稳定性和PLC等有差距。 在实际工程中,应该根据需要来进行相关的控制分布。下面通过一些典型示例进行说明: 适合下位机控制场合 对于一些实时性要求较高,或者上位机和下位机通讯较慢或容易受到干扰的情况下,建议把关键的控制放在下位机执行。比如对于一些典型的水利项目,比如水质监测,其运行监测系统的子站和运行组态软件的中心站可能相距较远,其通讯可能采用数传电台,拨号,GSM,GPRS等方式。在这种情况下,由于其通讯距离远,可能会有些延迟,所以控制功能更多的放在了下位机,而上位机主要负责数据的采集,存储和显示,也可包含一些对下位机的设置功能。 适合上位机控制的场合 对于一些和关系数据库或者多种设备相关的控制功能,单纯的依靠下位机进行控制,可能非常麻烦或者难以实现,这种情况下建议由上位机进行控制。比如车站的灯光控制,需要获取火车的行车信号以及其他数据来进行判断是否亮灯,而行车信号一般存在数据库或者需要从引导系统中获取,这种情况下,如果其控制几乎全部由上位机实现。 在更多的时候,是根据控制功能自身的特点来进行相关设置。下位机和上位机可以根据需要各执行相关部分控制功能,实时性要求较高的控制可以放到下位机,复杂的,关联其他数据的控制可以放在上位机,两者在一起构成一个完备的控制系统。合理的进行分配,不仅可以减少劳动量,而且可以提高工程的健壮性。

上位机程序

经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。 程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #include< reg51.h> #include< stdio.h> #include< string.h> #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收 PCON=0x00; ES=1; TMOD=0x21; //定时器工作于方式2,自动装载方式 TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1;

EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break; case 0x04 :printf("D"); TI=0;break; default :printf("fg"); TI=0;break; } } } //向串口发送一个字符 void timer0() interrupt 1 using 3{ // char i; flag++; TH0=0x00; TL0=0x00; if(flag==10) {// cp=!cp; // for(i=0;i<6;i++)

51单片机与上位机串口通信程序设计

51单片机与上位机串口通信程序设计 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #include< reg51.h> #include< stdio.h> #include< string.h> #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收 PCON=0x00; ES=1;

TMOD=0x21; //定时器工作于方式2,自动装载方式TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break; case 0x04 :printf("D"); TI=0;break; default :printf("fg"); TI=0;break; } }

上位机与下位机通讯

上位机与下位机通讯 ——上位机与下位机通讯 目录 目录...................................................................... ...................... 错误~未定义书签。 1. 引言...................................................................... .................. 错误~未定义书签。 1.1 实习目 的 .................................................................... 错误~未定义书签。 1.2 实习要 求 ..................................................................... (2) 1.3 实验内容...................................................................... ............................... 2 2. 企业参观...................................................................... ............................................ 2 3. C51单片机开发设 计 ......................................................... 错误~未定义书签。

取模软件(上位机)与光立方通信程序

/*版权所有,翻版必究!! 题目:上位机与单片机通信 功能:锁存器、三极管控制口,上位机送数据给单片机,显示任意图案作者:肖锦鹏 日期:2013年9月11 */ #include #define uchar unsigned char #define uint unsigned int uchar x,y,face,a,b; uchar i=0; uchar shuzu[8][8]; // //uchar shuzu[8][8]={ //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, //0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, //0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, // // }; //显示固定图案,数组可任意改动 // void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=10;y>0;y--); } void init() { TMOD=0x22; TH1=0XFf; //波特率设置,波特率为57600 TL1=0XFf; TH0=0x00; TL0=0x00; TR1=1; TR0=1; SCON=0X50;

上位机操作规程

1、主要技术参数 1.1型号:研华IPC-610 1.2MTBF≮60000小时 2、开机前准备 2.1 检查上位机机箱后部的CAN总线接口卡的连线是否正确。 2.2 检查语音报警系统的与上位机连线是否正确。 2.3 检查打印机是否连接正确。 2.4 检查UPS是否工作正常。 2.5 检查总线上各台YFC-99型槽控机的物理槽号是否设置正确,不得有重复现象。 3、开机过程 3.1 打开液晶显示器。 3.2 打开工控机。 3.3 检查操作系统中各设备驱动程序是否安装正确。 3.4 如需语音报警,则打开语音报警系统。 3.5 如需打印报表,则打开打印机。 4. 运行中的具体要求 4.1启动 如下图4.1.1,双击桌面上接口机程序,即可启动上位机软件。 图4.1.1

4.2 日常监控 4.2.1 主临控界面 系统运行后,自动进入主监控界面,主监控界面可进行各槽槽电压,系列电流,各槽重要信息的监控,正常情况下,系统监控人员应主要监控此画面。 由上图可看出本窗口从上到下分为五个部分: (1)最上面是标题区; (2)接下来菜单条和工具条区; (3)再下来是主体信息显示区,主体信息显示区提供每台槽的槽号、实时电压(由于采用CANBUS总线来构造下位机系统,信息显示速度能达到2 秒)及各种状态和故障信息; (4)再下来是重要提示信息区; (5)最下面是常用信息显示区。 注: 把鼠标悬停在某槽槽号之上,就会在“重要提示信息状态栏”上边显示该槽控机的完整信息; 鼠标左键点击某槽槽号,则进入该槽15分钟动态曲线画面。 鼠标停在某槽槽号上,单击鼠标右键,则进入槽控机模拟面板显示。 4.2.2 主显示窗口

上位机及下位机程序编写规范及建议

PLC程序编写规范及建议 为了提高程序的可读性,稳定性,高效性,易调用,方便各部门PLC程序的编写,调试及维护工作,有必要也务必要制定一项通用的程序编写规范,鉴于此,本人提出以下几个方面的规范建议,以供大家共同商讨。 控制功能方面: 阀门的控制,由于电动阀门的控制中,一个控制周期较长,为了不让在调试或者阀门的误操作上面,让阀门开关过程影响相关设备的控制,造成设备安全影响,故需要将阀门的控制做一个逻辑上的中间停止中断操作,即可让阀门处于一个中间状态,然后再进行开关控制选择。 各设备控制 每个参与控制的设备,必须事先预留自控、触摸屏、故障屏蔽接口,以便功能扩展。设备在控制方式转变后必须考虑设备安全的前提下,值得注意的是,建议转换开关由远程切换到手动时,上位机给出输出的指令一律清零,以免造成再次将设备由手动转换到远程,设备继续执行上一次的转换前动作,造成手动动作造成的远程指令! 自动控制必须事先了解整个工艺流程的情况下,预先考虑到每个设备间的各种组合搭配,一一做出相应的条件判断,然后做出相应符合条件的指令。在程序编译前,应详尽的做出中文注释,注释包含组合搭配条件,运行条件,在每一符合条件的程序段必

须注释条件及指令。当自动控制从最小满足条件的集合跳出为无法满足条件后,

必须考虑相关设备的安全,能关闭的关闭,必须记录并将输出报警,并将报警反馈到上位机。 自动触发条件参数应以变量设定可调,有多个变量参数可能产生冲突时,在程序中加以判断,并做出相应的调整或恢复默认值,并以提示的方式告知用户,避免程序冲突而让用户产生不必要的损失。 手动、远程、自动三级控制应该严格区分,各级控制权限不得越级。 在硬件配置上,为了更好的检查模块是否正常的情况先,建议每个数字量输入输出模块必须预留一个点,以此来检查模块是否正常状态。 模拟量输出方面: 建议每个仪表的量程上限必须以变量的方式预留接口,以便仪表进行维修、更换或者重新设置时造成额外不必要的问题。以此也更为方便用户的需求。 PLC的IP地址设置规范要求,为了维护方便,建议将IP地址设置为192.168.1.2xx段。 项目归档名称格式要求,要求以项目名或项目名简写字母加日期,例如:changyang_120329.程序的归档备份原则上,建议备份在上位机硬盘的最后一个分区,在其分区的根目录下建立一个项目名称的文件夹里。在同一文件夹下,应存储下位机地址表信息文档,以便在调试或维护过程中进行检查、修改等。

上位机监控软件的开发讲课稿

深圳PLC编程、深圳上位机编、承接自动化项目,深圳变频节能改造项目、自动化设备改造与维修、PLC程序修改解密、上位机软件定制、免费提供自动化解决方案咨询。 1、工业过程控制系统: 提供西门子、S7-200,S7-300,S7-400,三菱FX1N,FX2N,施耐德、欧姆龙、松下、台达、LG、AB等主流PLC编程,研华、泓格模块、安装于防爆区域P+F、turck、MTL远程I/O产品选型、组态编程,各种通讯转换模块、HMI、现场温度、压力仪表选型。为您的项目提供解决方案咨询,技术方案、投标协议图纸等制作、现场设备程序编写、组态、调试、用户培训验收等技术服务。 2、上位机软件: 软件根据您的项目需求可以提供LabVIEW、VC、VB等软件平台,同时为了方便您对数据的查询和处理,提供SQLSERVER、MySql、嵌入式数据库SQLite等数据库系统,软件具备实时曲线、棒图、历史曲线、打印报表、企业内部局域网连接客户端实现联网查询功能,界面友好丰富。可更具具体需求开发相应功能。软件支持串口RS485\RS422\RS232、以太网接口、下位机包括PLC、采集模块、各种智能仪表等。 组态软件编程:Wincc、iFix、组态王等 应用范围各工控项目监控软件、仪表模块初始化调试软件、数据采集和仪器控制软件 3、变频节能改造项目: 变频节能改造:水泵、风机、空压机、注塑机、中央空调、恒压供水等 VB/VC等上位机软件开发 硫化机PLC上位机监控软件的开发 作者:佚名来源:本站整理发布时间:2009-6-17 13:16:00[收藏] [评论] 随着硫化机自动控制水平的不断提高,硫化机的温度压力数据采集记录方法经历了圆盘记录仪、打点式记录仪、智能化无纸记录仪乃至目前较先进的上位机监控系统。上位机监控系统界面友好、控制安全可靠、精度高、数据存储量大,已越来越受用户青睐。笔者采用电阻式触摸平板电脑作为上位机,把现场数据通过传感器采集经PLC处理后送入上位机,组成一个监控系统。 1 监控系统构成 整个监控系统由A/D模块、D/A模块、CPU、传感器、电气转换器、平板电脑组成,如图1所示。 上位机对数据进行分析、存盘、综合处理、打印、报警、图形显示、人机对话,并可通过数据传送对PLC进行控制。 2 监控软件的设计 2.1 窗体设计

智能车调试--串口上位机程序的编制[转]

我们飞思卡尔智能车的比赛已经接近尾声了,23号就要去上海决赛了呵。论文基本完成,Duuboo已经排版结束,排出来还真挺长的。 整个过程都挺累的,持续的时间还这么长,最累的恐怕只有惠哥了,这些比赛完再说吧。这里介绍下在Donald写的一个串口调试程序,主要是方便我们查看运行起来的小车的内部参数。 程序的作用是接收来自Freescale MC9SDG128单片机发送来的数据,并显示出来。分为两部分。一部分是普通的数据,ASCII数据,另一部分是实时的图像,也是以ASCII方式传输。程序可通过“模式”按钮设置工作在这两种模式。当进入CCD模式时,通过“连接”按钮触发DG128单片机发送图像信息,这时“连接”按钮变为“断开”,可通过其触发DG128单片机停止发送,降低单片机内部资源消耗。 程序中串口部分的编程参考的是《Visual C++串口通信技术与工程实践》,李现勇编著。书中对串口的编程讲得很不错,除了C的,还有VB的。详细请参考该书。这里介绍本程序的一部分程序代码。 一、添加串口控件 本程序是在VC6下MFC实现,所以添加一个串口控件,方法是选择Project菜单下Add To Project子菜单中的 Components and Controls选项,在弹出的对话框中进入Registered ActiveX Controls目录,选择Microsoft Communication s Control, version 6.0,,Insert到Project中就行了。然后可在窗体中添加串口控件,接着Ctrl+W到ClassWizard中为该控件添加一个对应的变量就行。 二、串口工作方式的改变 串口的工作方式有很多种,比如串口的选择、波特率、校验位、数据位和停止位等。这些的设置可以通过组合框实现,实现方法基本一样,Donald就以波特率说明下。 之前已经为波特率组合框对象IDC_COMBO_BAUD添加对应变量m_cboBaud。在程序主窗体初始化时写有如下代码。 // combo Baud init m_cboBaud.AddString(_T("1200")); m_cboBaud.AddString(_T("2400")); m_cboBaud.AddString(_T("4800")); m_cboBaud.AddString(_T("9600")); m_cboBaud.AddString(_T("115200")); m_cboBaud.SetCurSel(3); m_strBaud = _T("9600");

单片机上位机界面编程软件一览

目前用在单片机嵌入式上位机编程的开发工具有很多,让很多刚入门的工程师们无所适从。那么用来编写单片机嵌入式上位机的工具有那几款呢?下面小编为大家细数一下使用最普遍的几款。 (1)LabVIEW:是NI推出的,和C和BASIC开发环境类似,但是LabVIEW与其他计算机语言有很大区别,其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。特点是:采用了通用的硬件,可以通过改变软件在计算机上实现多种仪器的功能。被公认为测试之王。 2)VB:是由Microsoft公司开发的结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。 (3)VS:它是微软提供的一个工具集,由各种各样的工具组成。VS可以支持C/C++、VB、JAVA、C#编程。然了一次只能支持一种编程方式。在VS安装完成,第一次运行的时候会让你选择常用语言,如果你选择C/C++,那么他就成了能够进行C/C++编程的平台也许就是你所说的VC了。如果不想用C/C++的话,只需要修改一下他的初始化设置,选择别的编程语言,就成为了另一种的语言的编程环境了。所以总的来说它是一个集成平台。

真正地组件编程。基本上,Qt同X Window上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西。

从零编写上位机

好了既然安装好了,也知道labview是用来干什么,下面就给几个基础教程吧!这都是入门级的。 LabVIEW从入门到频率测量系统的开发.pdf 《LabVIEW 8.20程序设计从入门到精通》课件.rar 再介绍一个labview学习的论坛吧,我上面介绍的两个资料在这里都可以找到。 https://www.sodocs.net/doc/a01676323.html,/bbs/index.php 既然是上位机,当然离不开串口通信,不了解串口是不行的,下面再发一个资料 串口通信.pdf 前面的你大概只用花一天时间就可以解决。在具备计算机软件环境和基础知识后就可以动手编写程序了。 先把我做的串口接收例子发布出来,大家看看吧,很简单的。还有就是单片机里的串口驱动和printp函数,这个在论坛里有下载,自己找吧,我不想发重复的东西。 串口接收示例.rar 串口收发示例.rar 到现在为止,假设你已经成功安装了软件,包括驱动和破解,而且看完了labview的基础知识和串口的基础知识。手头上也有我给你们的串口例子,相当简单。还有就是DG128上的printp。于是就可以在上位机上显示单片机发来的数据了。下一篇再详细讲述吧! 串口程序初步详解 在第一篇中,我已经给大家介绍了labview的用途,主要是用于虚拟仪器,数据采集和控制。labview的安装,破解以及其驱动的安装,其中大家可能会遇到点麻烦,如果电脑技术可以的话,很轻松的就能解决,不过在网上也能搜到解决办法。还有就是介绍两个资料,这是基础,如果不知道的话,下面很难进行。

建议你们把那个PPT里面的小练习做一下,可以很快的熟悉labview。同时labview目录下的帮助文档也写得非常好,在\National Instruments\LabVIEW 8.5\manuals里面,尤其是 LV_Getting_Started.pdf这个,按照它的步骤做个示波器,然后你就对G编程有个大概的了解的。 有了串口的基本知识,和G编程基本了解,下面就详细讲解一下我在上一篇文章中发给大家的串口示例。 这是串口程序的前面板,最左边是5个输入控件,用于配置串口属性,上面还有一个开关串口的开关。中间是一个字符显示控件,如果你大概看了一下前面的labview资料,这个应该很容易就能拖出来。

相关主题