适用于Arduino Nano 33 IoT的软件串行

时间:2019-07-24 04:37:24

标签: c arduino

我正计划从旧的5V Arduino Nano迁移到新的Arduino Nano 33 IoT。我已经使用软件串行(SoftwareSerial.h)为旧的5V Arduino Nano编写了功能代码,以与Sim800L模块通信。但是,当我将开发板更改为新的Arduino Nano 33 IoT时,找不到软件串行库。

我尝试在“素描”下的“包含库”菜单中找到它,但是该库根本不存在。鉴于该产品太新了,所以我没有找到任何有用的研究来帮助我解决这个问题。 EEPROM库有相同的问题。

#include <SoftwareSerial.h>
#include <EEPROM.h>

有人知道如何为新的Nano 33 IoT板包括SoftwareSerial.h和EEPROM.h库,也许知道用于新板的新库吗?

以下是我在编译时收到的错误消息:

Sim800L_V7.1:3:12: error: SoftwareSerial.h: No such file or directory

   #include <SoftwareSerial.h>

            ^~~~~~~~~~~~~~~~~~

compilation terminated.

exit status 1
SoftwareSerial.h: No such file or directory

任何帮助将不胜感激 谢谢

2 个答案:

答案 0 :(得分:1)

没有SoftwareSerial.h可用于Arduino Nano 33 IoT,因为它不是必需的。该板提供了更多功能:可以分配给不同引脚的硬件串行。

此功能由微控制器Atmel SAMD21G提供,它称为I / O多路复用(详细信息见the data sheet Atmel SAM D21E / SAM D21G / SAM D21J第21页)。该微控制器提供6个SERCOM,您可以将其分配给(几乎)任何引脚。

一些SERCOM已被Arduino Nano 33 IoT使用:

  • 用于SPI NINA的SERCOM2
  • SERCOM3 for MOSI / MISO
  • 用于I2C总线的SERCOM4
  • 用于串行调试(USB)的SERCOM5

我们还有SERCOM0和SERCOM1。

variant.cppvariant.h文件中描述了引脚分配的详细信息。由于Arduino是开源的,因此您可以在the GitHub repository for SAMD boards上轻松找到它们。

对于Arduino Nano 33 IoT,引脚分配在以下内容中进行了描述:

通过阅读variant.cpp,我们了解了引脚分配,尤其是SAMD引脚(PAxx或PBxx)与Arduino引脚之间的链接。

SAMD引脚对于与the data sheet Atmel SAM D21E / SAM D21G / SAM D21J的端口功能复用建立链接很重要。

SERCOM可以是经典备用。在数据表中,经典在C列中,而 alternate 在D列中。SERCOM由其索引和填充区定义。例如:SERCOM0/PAD[3]也称为0.3

备注: RX的焊盘定义为0到3,而TX仅定义为0和2。这是选择要使用的引脚时的重要考虑因素。

For reference, see the table I used to select the SERCOM to assign.

理论上足够了,寻求解决方案...

在Arduino Nano 33 IoT的引脚5(RX)和6(TX)上添加硬件序列

#include <Arduino.h>
#include "wiring_private.h"

Uart mySerial (&sercom0, 5, 6, SERCOM_RX_PAD_1, UART_TX_PAD_0);

// Attach the interrupt handler to the SERCOM
void SERCOM0_Handler()
{
    mySerial.IrqHandler();
}

void setup() {
  // Reassign pins 5 and 6 to SERCOM alt
  pinPeripheral(5, PIO_SERCOM_ALT);
  pinPeripheral(6, PIO_SERCOM_ALT);

  // Start my new hardware serial
  mySerial.begin(9600);
}

void loop() {
  // Do something with mySerial...
}

另一个示例,在Arduino Nano 33 IoT的插针13(RX)和8(TX)上添加硬件序列:

#include <Arduino.h>
#include "wiring_private.h"

Uart mySerial (&sercom1, 13, 8, SERCOM_RX_PAD_1, UART_TX_PAD_2);

// Attach the interrupt handler to the SERCOM
void SERCOM1_Handler()
{
    mySerial.IrqHandler();
}

void setup() {
  // Reassign pins 13 and 8 to SERCOM (not alt this time)
  pinPeripheral(13, PIO_SERCOM);
  pinPeripheral(8, PIO_SERCOM);

  // Start my new hardware serial
  mySerial.begin(9600);
}

void loop() {
  // Do something with mySerial...
}

答案 1 :(得分:0)

我在Arduino Github官方项目上问了同样的问题,而Martino Facchin给了我解决方案:

UART mySerial(digitalPinToPinName(4), digitalPinToPinName(3), NC, NC);

请注意,“ Uart mySerial”应使用大写的“ UART mySerial”编写,否则编译器将找不到lib

有关解决方案和核心修改的更多信息:https://github.com/arduino/ArduinoCore-nRF528x-mbedos/issues/38