Arduino Nano 33 IoT没有SoftwareSerial.h
可用的,因为它不是必需的。该板提供更多:可分配给不同引脚的硬件序列。
此功能由微控制器 Atmel SAMD21G 提供,称为 I/O 多路复用(详细信息请参见数据表 Atmel SAM D21E / SAM D21G / SAM D21J第 21 页)。微控制器提供 6 个 SERCOM,您可以将其分配给(几乎)任何引脚。
一些 SERCOM 已被 Arduino Nano 33 IoT 使用:
- 用于 SPI NINA 的 SERCOM2
- SERCOM3 用于 MOSI/MISO
- SERCOM4 用于 I2C 总线
- SERCOM5 用于串行调试 (USB)
我们还有 SERCOM0 和 SERCOM1。
variant.cpp
和variant.h
文件中描述了引脚分配的详细信息。由于 Arduino 是开源的,您可以在SAMD 板的 GitHub 存储库中轻松找到它们。
对于 Arduino Nano 33 IoT,引脚分配如下所述:
通过阅读variant.cpp
,我们了解了引脚分配,尤其是 SAMD 引脚(PAxx 或 PBxx)和 Arduino 引脚之间的链接。
SAMD 引脚对于与数据表 Atmel SAM D21E / SAM D21G / SAM D21J的端口功能多路复用进行链接非常重要。
SERCOM 可以是经典的或替代的。在数据表中,经典位于 C 列,替代位于 D 列。SERCOM 由其索引和焊盘定义。例如:SERCOM0/PAD[3]
也叫0.3
.
备注: RX 的焊盘定义为 0 到 3,但 TX 仅定义为 0 和 2。在选择要使用的引脚时,这是一个重要的考虑因素。
作为参考,请参阅我用来选择要分配的 SERCOM 的表。
理论说够了,去找解决方案...
在 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...
}