arduino-uno如何知道它只有一个串行端口?

时间:2019-04-02 18:00:05

标签: arduino serial-port arduino-uno bootloader pins

基本上,我试图了解微控制器的工作方式。至少从软件开发人员的角度来看。我对“ make-files”,编译和链接过程以及低级编程有一些基本的了解。但是我想学习的是编程更接近硬件。

所以我开始剖析Arduino的HardwareSerial代码(HardwareSerial.c和HardwareSerial.h)。我不知道是在哪里定义了UBRRH(或UBRR0H),这意味着我们拥有serial0(Arduino-Uno的唯一一个)。我的猜测是,电路板的制造商需要以某种方式提供此功能。我认为根据我使用的目标板,会编译不同的代码。因此,如果我为Arduino-Uno编译代码,则编译后的文件将以某种方式包含例如UBRRH。那么Arduino IDE如何知道我正在编译哪个板卡?

我的目标是最终能够编写自己的串行协议。甚至甚至可以设计自己的电路板。尽管我创建的唯一“电路板”是H桥,但是,请放高脚步。

2 个答案:

答案 0 :(得分:1)

  

Arduino IDE如何知道我正在编译哪个板卡?

您在菜单工具->板中选择了它。

每个板存储很多信息。

仅以 Arduino \ hardware \ arduino \ avr 为例。

  

我的猜测是,电路板的制造商需要提供此   不知何故。我认为根据我使用的目标板不同   代码被编译。因此,如果我为Arduino-Uno编译代码,   编译文件将以某种方式包含例如UBRRH。

或多或少是。在这里https://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html

https://www.nongnu.org/avr-libc/user-manual/index.html

答案 1 :(得分:0)

能够构建自己的兼容板实际上很普遍。 签出以下内容

基于这个问题(假设您引用了“ UBRRH”),我想您已经知道Arduino UNO中存在什么控制器。

文件/hardware/arduino/avr/cores/arduino/HardwareSerial.h使用了这些寄存器。

寄存器在由Atmel公司提供的编译器工具链的一部分包装的库中声明。

文件hardware/arduino/avr/boards.txt具有用于编译器的预处理器定义,根据您在Arduino IDE中的tools>board中选择的板进行选择。

现在,这些库基于它们从board.txt文件从Arduino IDE获得的build.mcu属性,找出正在编程的控制器类型。

根据选择的单片机,​​库定义或不定义代码来对MCU进行编程所需的寄存器(例如“ UBRRH”)

我希望这可以帮助您到达想要去的地方。