我有在Arduino上编程的基础,我怎样才能深入的学习有关嵌入式编程的知识?
电子/通信
0 215
1
该提问暂无详细描述
收藏
2021-01-21 02:29 更新 蝈蝈 •  220
共 1 个回答
高赞 时间
0

首先让我们问一个问题。什么是Arduino?

Arduino是一个软件框架,隐藏了所有底层编程。Arduino IDE与预编程的Arduino Boot loader一起使用,因此除Arduino IDE外,你不需要任何工具即可对其进行编程。

除了与Arduino框架兼容之外,Arduino硬件没有什么特别的。要超越Arduino,你需要删除与Arduino相关的所有内容,这意味着Arduino IDE,Arduino库并从硬件上擦除Arduino引导加载程序。

要在没有Arduino ecco系统的情况下进行编程,你需要一个至少支持ICSP(或简称ISP)的编程盒,但是如果你的硬件允许JTAG,那是更好的选择。现在,我不是Arduino迷,所以我不知道那里有每个Arduino硬件套件,但是我认为它们都支持ICSP,而且大多数都具有连接器。

与ICSP和JTAG的区别在于ICSP只能执行基本操作,例如对Flash的读/写程序和读/写熔丝位。另一方面,JTAG可以完成ICSP可以做的所有事情,而且可以设置硬件断点,因此你可以停止微控制器内部的程序,单步执行代码并检查存储器和寄存器。

仅支持Atmel微控制器的ICSP的吊舱很容易找到,而且价格并不昂贵,但是我更愿意投资也采用JTAG的连接器。如果要使用ARM,我认为你需要JTAG选项(如果可以,我总是使用JTAG)。我可以推荐带有完整电缆套件的ATMEL自己的Pod Atmel-ICE。它支持简单的AVR控制器和ARM控制器,其中包括很多协议,例如ICSP和JTAG。

你可以直接从Microchip或你附近的经销商处获得产品。

现在来最好的部分。你需要更换Arduino IDE,ATMEL足以免费为你提供完全专业的IDE。你可以从Microchip的产品页面下载Atmel Studio:Atmel Studio 7 | Microchip Technology

安装后,将你的Pod连接到Arduino硬件,并使用编程工具擦除整个控制器。现在,你已删除了与Arduino相关的所有内容。

下一步是填补Arduino对你隐藏的空白。

下载你的Arduino平台的硬件原理图,你需要它来查看每个引脚的连接方式(在微控制器本身上)以及连接的位置。你不需要了解有关电子的所有知识,但是,如果你至少可以在基本水平上阅读原理图并且对数字电路有所了解,那么这是很好的。

下载微控制器的编程指南并开始阅读。根据你以前对微控制器的理解,你可能可以跳到仅需参考的章节,或者可以阅读整本手册并查看一些YouTube剪辑以全面了解。

如果你使用的是AVR控制器,则时钟部分非常简单,我通常从禁用时钟分频器开始获得8MHz而不是1MHz。

下一部分将是阅读GPIO(通用IO)一章。这是“原始”输入/输出,是微控制器上的实际引脚。尝试编写程序以读取输入并控制LED。

然后,我将继续介绍TIMER,这是THEE最重要的模块之一。在计时器的帮助下将LED程序更改为闪烁。然后也许继续使用PWM模式使LED变暗。

此后,如果能够进行通信很好,因此UART或USART将是使串行通信正常工作的下一个模块。你可能需要一个TTL转USB转换器才能连接。确保检查是否需要3.3v或5v TTL。下载RS232规范,以了解UART / USART如何在异步模式下工作(什么是溢出,帧错误,星形位,停止位,奇偶校验等)。

这些是基本模块,从那里你可以进入I2C,SPI,DAC等。

下载I2C和SPI协议/信号规范,以便你了解它们如何工作。

下一个更高级的步骤是连接中断服务例程(ISR),以使事情由硬件自动处理。如果你有ARM,则可能会有更多的模块,例如DMA,总线主控器和更多的计时器模式。

当你对微控制器感到满意时,你可能需要连接一些外部组件,例如I2C温度传感器,直流电动机驱动器,步进电动机驱动器等。为此,你需要下载并研究相应芯片的数据表,将其连接并编写自己的代码,使其发出所需的信号。

从头开始进行嵌入式编程是非常有益的,并且你可以比使用库执行更小,更紧凑的代码。一段时间后,你可能会为每个代码块拥有自己的紧凑代码库。

祝好运。

本回答来自**Max Kielland**, 软件和硬件研发总监

收藏
2021-01-21 02:33 更新 我爱喝牛奶G •  1942