0

我正在上大学计算机工程课程的高级设计课程。我对嵌入式系统不是很好。我需要创建一个可以向微控制器发送指令的程序,它应该有一个 GUI。其他人正在对微控制器进行编程,所以我主要只是响应他们将输出给我的内容。我真的不知道从哪里开始,我在最后一个学期有点不知所措/不知所措。有人介意指出我正确的方向吗?

附加信息:我们正在为该设备使用 TI-msp430f2274,它实际上只是输出 3 个陀螺仪的读数。我正在考虑使用 GTK 创建 GUI,但我想看看是否有更好的东西。

编辑:我的项目是使用陀螺仪比较两个滚轮的滚轮对齐工具。该程序将向一个滚轮发送一条指令,将工具“归零”,并接收一个数据流,该数据流表示下一个滚轮的偏移差异。

我们正在使用带有 UART 接口的 TTL-232R 电缆,该程序应该可以在 Windows 上运行。我不知道你是怎么跟它说话的。大学把我压垮了。

4

3 回答 3

0

如果您使用的是 Windows 机器,那么 Visual Studio 和 Windows 窗体应用程序就可以解决问题。我以前用它通过 USB 和其他涉及从 USB 人机接口设备读取的项目与温度传感器和其他控制设备连接。因此,在不了解项目细节的情况下,我认为作为 IDE Visual Studio 是最好和最直观的,并且使用 Windows API,您可以通过代码实现很多目标。

视觉工作室 2012

HTH。

ps 我使用 VS 在 VB 中编写大部分代码,但它也将支持其他语言......

编辑:一些从 com 端口读取的示例代码:

Sub ReceiveSerialData()
    ' Receive strings from a com port 
    Dim comport as string = "COM 6" 'or whatever com you want...
    Dim baud as integer = 9600 'or whatever baud you want...

    Try
        com = My.Computer.Ports.OpenSerialPort(comport)
        com.ReadTimeout = 10000
        com.BaudRate = baud

        While (com.IsOpen)
            Dim Incoming As String = com.ReadLine()
            If Incoming Is Nothing Then
                Exit While
            Else
                'do something here with your com data
                'i.e. display it in a rich text box, or whatever...
            End If
        End While

    Catch ex As Exception
        ' display your errors here if you wish....
    End Try
End Sub

我认为其他答案,尤其是关于使用 tcl 从嵌入式系统的角度来看可能更有意义。我根本没有任何经验,因此我的 VB'ness。:-)

于 2013-09-19T10:27:51.653 回答
0

既然您提到您之前使用过 tcl,我将在 tcl 中给出我的答案,因为恕我直言,这是最简单的方法,因此是正确工作的正确工具。

tcl 的核心优势(也是它深受粉丝喜爱的原因之一)是它非常非常跨平台。虽然在其他语言中跨平台只是意味着“可以在多个平台上运行”但仍然需要您根据平台使用不同的 API,但 tcl 消除了平台差异,提供了跨平台的统一 API。

Tcl 将串行端口视为文件,因此您只需open与它对话即可。当然,不同的平台提供了不同的端口命名方式。因此,在 Windows 上,要与串行端口通信,您只需执行以下操作:

set rs232 [open COM1 w+]

在 unixen(Linux、MacOSX 等)上,你会这样做:

set rs232 [open /dev/ttyS0 w+]

要设置波特率和奇偶校验位,您现在可以执行

fconfigure $rs232 -mode "9600,n,8,1"

确保还将串行端口配置为二进制模式,否则 tcl 将根据您的操作系统为您重新解释“\n”:

fconfigure $rs232 -mode "9600,n,8,1" -translation binary -blocking 0

“阻塞”位是将其设置为非阻塞模式,以便我们可以编写面向事件的代码,这对 UI 应用程序至关重要,因为我们不希望 IO 阻塞我们的 UI。

所以现在对于一个从串口读取数据的简单程序:

package require Tk ;# in case we're running in tclsh

if {[catch {set rs232 [open COM1 w+] err}]} {
    tk_dialog .error Error "Could not open COM1: $err" error 0 OK
}
fconfigure $rs232 -mode "9600,n,8,1" -translation binary -blocking 0

# Draw a simple UI do dump data to:
pack [label .l -text "Gyroscope outputs:"]
pack [label .g1 -textvariable gyro1]
pack [label .g2 -textvariable gyro2]
pack [label .g3 -textvariable gyro3]

# Now the fun part, read from the serial continuously with fileevent:
set buffer ""
fileevent $rs232 readable {
    append buffer [read $rs232]

    # Here, you need to parse the data returned.
    # Due to the byte-wise nature of serial ports the data read may not be
    # complete so we need to check if it's complete. "Completeness" depends
    # on you. For example the data packet may end with a newline. Or it may
    # simply be a timeout between data packets.

    if {[message_is_complete $buffer]} {
        set gyros [parse_message $buffer]
        set buffer ""

        # Update the UI:
        foreach x $gyros y {gyro1 gyro2 gyro2} {
            set $y $x
        }
    }
}

减去只有 16 行代码的注释和空行。您当然可以更进一步,实现更精美的 UI 而不仅仅是文本标签。

如果您需要向微控制器发送数据,只需puts向它发送。只要记住覆盖 tcl 的自动换行终止:

puts -nonewline $rs232 $somedata

binary如果您需要格式化二进制文件,请使用 tcl 的命令。

于 2013-10-23T01:56:37.010 回答
0

我个人仍然更喜欢 tcl,因为您可以在 5 分钟内启动并运行原型以读取硬件的输出。但是您也提到了对 node.js 解决方案的兴趣。所以这里是 node.js 的另一个起点

首先你需要安装 node.js。根据您的操作系统,这可能会或可能不会微不足道。您需要在系统上安装 Python 2.x(不是 3.0)才能编译用 C 编写的 node.js 模块(甚至是 node.js 本身)。即使您正在安装 node 的二进制分发,您仍然必须编译串行端口库,因为它不包含在核心中。

接下来,您将需要安装该serialport模块。说明因您的操作系统而异。请参阅模块的 npm 页面:https ://npmjs.org/package/serialport

启动并运行后,您可以使用 serialport 模块简单地与您的串行端口进行通信:

var SerialPort = require("serialport").SerialPort
var rs232 = new SerialPort("COM1", {
    baudrate: 57600
}, false);

同样,与 tcl 案例一样,串行端口的名称取决于您的操作系统。以上是 Windows 的示例。对于 unixen,你会这样做:

var rs232 = new SerialPort("/dev/ttyS0", {
    baudrate: 57600
}, false);

对于 UI,node 没有像 tcl 这样的核心工具包。npm 上有许多可用的库,允许您使用 QT 或 GTK 或其他一些小部件集。但是在 node 上做 UI 最常见的方法是简单地将它作为一个 web 服务器运行并使用你的 web 浏览器连接到它。这样做的缺点是有点额外的复杂性,并且需要弄乱 HTML。好处是 HTML 和 CSS!这意味着您可以利用 CSS3 效果和 jQuery 等工具轻松创建一个非常流畅的 UI。

不幸的是,编写一个交互式 webapp(即使是一个简单的)是相当复杂的,所以我不会提供一个“简单”的示例实现。我只建议您阅读更流行的框架,如express.js和模板库,如dusthandlebars。您可能还想查看socket.io以简化服务器和 Web 浏览器之间实时通信的实现。

于 2013-10-23T03:14:42.747 回答