我计划从旧的 5V Arduino Nano 迁移到新的 Arduino Nano 33 IoT。我已经使用软件串行 (SoftwareSerial.h) 为旧的 5V Arduino Nano 编写了一个功能代码,以与 Sim800L 模块通信。但是,当我将电路板更改为新的 Arduino Nano 33 IoT 时,找不到软件串行库。
我试着在“Sketch”下的“include library”菜单中找到它,但库根本不存在。鉴于该产品是如此新,我还没有找到任何有用的研究来帮助我解决这个问题。我对 EEPROM 库也有同样的问题。
#include <SoftwareSerial.h>
#include <EEPROM.h>
有谁知道如何将 SoftwareSerial.h 和 EEPR0M.h 库包含在新的 Nano 33 IoT 板上,也许知道用于新板的新库?
是编译时得到的错误消息:
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
任何帮助将不胜感激
Arduino Nano 33 IoT 没有SoftwareSerial.h
可用,因为它不是必需的。该板提供了更多:可以分配给不同引脚的硬件系列。
此功能由微控制器 Atmel SAMD21G 提供,称为 I / O 多路复用(详情见the data sheet Atmel SAM D21E / SAM D21G / SAM D21J第 21 页)。微控制器提供 6 个 SERCOM,您可以将其分配给(几乎)任何引脚。
Arduino Nano 33 IoT 已经使用了一些 SERCOM:
用于 SPI NINA 的 SERCOM2
SERCOM3 for MOSI / MISO
用于 I2C 总线的 SERCOM4
用于串行调试 (USB) 的 SERCOM5
我们仍然有 SERCOM0 和 SERCOM1。
引脚分配的详细信息在variant.cpp
和variant.h
文件中进行了描述。由于 Arduino 是开源的,您可以在the GitHub repository for SAMD boards上轻松找到它们。
对于 Arduino Nano 33 IoT,引脚分配描述如下:
variants/nano_33_iot/variant.cpp variants/nano_33_iot/variant.h通过阅读variant.cpp
,我们了解了引脚分配,尤其是 SAMD 引脚(PAxx 或 PBxx)和 Arduino 引脚之间的链接。
SAMD 引脚对于连接the data sheet Atmel SAM D21E / SAM D21G / SAM D21J的 PORT 功能多路复用非常重要。
SERCOM 可以是classic或alternate。在数据表中,classic在 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...
}
我在官方的 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
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(65条)