【问题标题】:Microcontroller interfacing [closed]微控制器接口[关闭]
【发布时间】:2012-09-19 07:56:42
【问题描述】:

我是嵌入式编程领域的新手,我正在寻找有关使用 I2C、USB、UART、CAN 等与微控制器接口的信息。有人知道关于这个主题的任何好的链接、书籍、教程吗?由于我是这个主题的真正新手,我更喜欢它尽可能基本。

【问题讨论】:

  • 您可能希望首先缩小选择范围:性能较低的 8 位和 16 位 uC 32 位 uC,例如 ARM Cortex-M3,具有 16-位指令集并使旧的 16 位 uC 看起来过时了。另请注意,高端 uC 具有 MMU 并且可以运行 Linux;这样的 uC 可能具有您提到的大多数接口,例如爱特梅尔 AT91SAM9XE128。顺便说一句,将 SPI 添加到您的接口列表中。

标签: embedded microprocessors


【解决方案1】:

由于您已经是桌面开发人员,因此您可能可以在中间的某个地方跳槽。下载您计划使用的控制器的用户手册。从制造商等网站获取更简单的外围设备之一的示例代码 - UART 很好。

获取一个开发板和一个 Eclipse/Crossworks/任何支持您的开发板的开发系统,并让某些东西工作 - 闪光灯 LED、UART 回显等。不要尝试首先使用多任务程序和中断驱动程序 - 只需使用尽可能少的代码行轮询 UART。为什么 - 因为仅仅获得一个开发设置来编译、链接、下载和运行一行代码本身就是一项相当大的练习,而复杂的代码不会带来任何复杂性。在您可以有效地编写/调试控制器的任何代码之前,您首先要调试您的开发设置和硬件。仅仅让板载 LED 闪烁即可工作的“闪烁”代码是向前迈出的一大步:)

大多数控制器都有专门的组/博客,要么在 uC 制造商网站上,要么从它链接 - 加入他们。

如果您想有效地进行此操作,请获得一块板并尝试让它做一些事情 - 没有更好的方法。一旦你可以让 LED 闪烁或 UART 发出一串字符,你就可以参加比赛了:)

开发简单的 'blinky' 或 UART-polling 函数不会浪费 - 当您有更复杂的代码时,您可以继续使用它们。使 LED 闪烁(延迟循环被 OS 睡眠取代)是一个很好的指标,表明代码正在运行,我一直将其保留在交付的系统中。 UART 轮询也很有用 - 它将在没有任何中断的情况下运行,因此您可以从数据/预取/任何中止向量中调用它,以发出许多“CRITICAL ERROR - SYSTEM HALTED”消息,您将在正在进行的开发过程中收到这些消息:)

【讨论】:

    【解决方案2】:

    维基百科确实是学习这些机制的基础知识的好地方。

    一旦掌握了这些功能,我建议您查看具有其中一些功能的微控制器的实际数据表和用户指南。例如,this 16 位 PIC 具有专用的 UART、I2C 和 SPI 总线。查看文档的相关部分,借助您对基本原理的新知识,您将开始了解如何设计使用它们的系统。

    下一步是为这种设备购买一个开发板,然后使用示例代码(其中有很多),自己编写一些数据链路。顺便说一句,UART 无疑是最容易测试的,因为所有 PC 都可以使用 RS-232 协议从终端进行传输,因此在这种情况下,您可以编写一个环回来相对轻松地传输和接收字符。但是,对于 I2C 和 SPI,我认为您需要购买专用的 host dongle 以允许您使用协议进行传输,尽管我认为 Windows 8 可能会引入本机支持(但不要引用我的话)。

    我还没有使用 CAN 实现数据链路,所​​以我不能具体评论,虽然我只是做了一个快速的谷歌搜索并且有一个支持它的 PIC 系列,所以我相信你可以遵循类似的方法。至于 USB,我认为它有点像魔法,所以我会让其他人来回答这个问题 - 虽然我知道你可以为 PIC 获得 USB 软件堆栈,所以同样,可能会遵循类似的方法.

    最后,我只提到了 PIC 作为示例微控制器。如果您一般不熟悉微控制器,您很快就会意识到 Microchip、TI 和 Atmel 等公司的所有主要微控制器系列通常都遵循相同的设计,所以我会浏览并选择为您提供文档的系列最舒服(或者最不不舒服,正如 Martin James 所建议的那样!)。

    【讨论】:

    • '选择你最满意的文件的家庭' - 你的意思是'最不满意',确定吗? 回复。 CAN - 我建议一开始不要这样做,特别是如果文档中的任何地方出现“全局接受过滤器”这个短语:(
    【解决方案3】:

    在大多数情况下,您想要使用的微控制器的数据表或参考手册就是您所需要的。每个供应商都会以不同的方式实现这些接口,因此这是您获得低级编程信息的唯一权威来源。

    I2C和UART比较简单,没有标准的高层协议栈;这将由您或您可能连接的设备定义。您的微控制器供应商几乎肯定会提供示例代码和/或应用说明。

    CAN 更复杂,通常 CAN 网络使用更高级别的应用协议,其中有多个用于不同应用领域的协议,例如 CANopen、NMEA2000、DeviceNet、IEC J1939 等。大多数情况下,第三方库是实现应用程序协议栈的最具成本效益的方法,但如果网络仅包含您正在实现的设备,则可能不需要这种复杂性。同样,您的微控制器供应商可能会提供示例。

    USB Implementers Forum 对 USB 进行了非常严格的定义,并且协议栈非常重要。大多数具有片上 USB 接口的微控制器供应商都会提供至少设备级 USB 的示例代码和应用说明。 USB 主机堆栈更复杂,而且使用第三方库(相对昂贵)是最快的上市方式。否则,您必须支付 USB IF 的费用可能会使编写您自己的主机堆栈的成本不低。即使是 USB 设备接口,您也需要 USB IF 提供 2000 美元的 USB 供应商 ID。一些微控制器和库供应商将允许您以很少或免费的成本将他们的供应商 ID 用于定义的产品 ID 子集,但就数量而言,您可能必须是重要客户。对于内部实验,你可能没有官方 VID 就可以逃脱,但这样的产品不能商业发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多