问题标签 [samd21]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
186 浏览

arduino - 将 SPI 的 SERCOM 引脚设置为 SAMD21 上的主设备的对立面不起作用

我正在尝试使我的 SAMD21 芯片成为 SPI 从设备。

我有以下引脚:

  • PB10 作为 MOSI
  • PB11 作为 SCK
  • PA10 作为 SS
  • PA12 作为味噌

这些管脚大部分属于SERCOM4

但是,当我按如下方式设置引脚时,引脚无法正常工作:

我使用 https://github.com/lenvm/SercomSPISlave的库

我使用 arduino IDE 和 SAMD: M0 或其他东西 M0 Pro (navtive) 板布局对芯片进行编程。

根据文档的引脚:

  • | 1 | 1 <- 德克萨斯 | PA10 | | EIC/EXTINT[10] ADC/AIN[18] PTC/X[2] *SERCOM0/PAD[2] TCC0/WO[2] TCC1/WO[0]
  • | 22 | 1 | PA12 | 味噌 | EIC/EXTINT[12] SERCOM2/PAD[0] *SERCOM4/PAD[0] TCC2/WO[0] TCC0/WO[6]
  • | 23 | 4 | PB10 | 莫西 | EIC/EXTINT[10] *SERCOM4/PAD[2] TC5/WO[0] TCC0/WO[4]
  • | 24 | 3 | PB11 | SCK | EIC/EXTINT[11] *SERCOM4/PAD[3] TC5/WO[1] TCC0/WO[5]
0 投票
1 回答
585 浏览

c++ - Arduino MKR Wifi 1010 与 Arduino Mega 的串行通信

我正在mkr wifi 1010和mega之间编写一个串行通信程序,其中mkr向mega发送一个H或L char,mega通过读取char并将其板载LED设置为高或低来响应,具体取决于字符。当我在 mkr 上使用 delay(#) 时,代码工作得很好,mega 的 LED 会闪烁。

但是,当我创建无延迟代码时,mega 的 LED 不会闪烁。它要么保持低位,要么保持高位,大部分时间都保持在低位。我通过读取串行端口检查了 mkr 代码,它确实在两个版本的代码中以正确的间隔交替发送 72(H) 和 76(L)。

接线图:

在 mkr 的 rx 引脚之前,我已将 mega 的 tx 引脚电平移动到 3.3v。

mkr 延迟代码:

mkr 无延迟代码:

巨型代码:

据我所知,这两个不同的 mkr 程序做同样的事情并以完全相同的方式发送串行数据,只是一个是阻塞的,一个是非阻塞的。为什么无延迟代码不闪烁?

0 投票
0 回答
240 浏览

arduino - Arduino Zero 上 I2C 引脚的正确配置(通常为保留引脚)

我在带有 Atmel Studio 的 SAMD21 上使用 Arduino Zero 内核。我有一个 I2C 设备连接到引脚 PB02(Arduino 零引脚 19)和 PB03(Arduino 零引脚 25)。附带说明一下,这个完全相同的设备在常规线路(sercom3、20、21)上运行没有问题。

我做的第一件事是通过使用 PIN_LED_RXL 注释掉部分来禁用 RX 灯引脚。

然后我尝试了典型的:

然后我尝试从 I2C 组件中读取 4:

结果始终为 0。我没有收到响应,它告诉我从设备发送 NACK - INTFLAG.MB(总线中断启用主设备)位已设置,并且数据寄存器中没有数据。

奇怪的是,当我将引脚的 pinPeripherals 设置为 时PIO_SERCOM_ALT,PB02(引脚 19)的 PI​​NCFG 寄存器没有正确设置 - 输入启用(INEN)仍然设置并且驱动强度(DRVSTR)没有被驱动为高电平,尽管 MUX使能(PMUXEN)被设置。

我知道这pinPeripheral()不会设置 DRVSTR 或 INEN,但它让我认为这个引脚或其他引脚发生了其他事情,这可能会影响其在芯片启用期间在其他地方充当 I2C 的能力。 

PMUX 寄存器设置正确并指示 MUX 设置 3,根据数据表,这对于 SERCOM5 PAD[0] 和 PAD[1] 是正确的 - 它是 MUX 功能 D(第 34 页)。

Sercom 寄存器的初始化看起来很好。为了更好地衡量,我确实更改了 variant.h 以包含 I2C 的 Sercom5 中断:

仍然面临同样的问题 - 设备在调用时没有得到返回数据requestFrom()

如果有人对我尝试使用这些引脚的方式以及如何让 I2C 在 PB02 和 PB03 上为 Sercom5 工作有任何见解,我将非常感谢任何帮助。

谢谢!

0 投票
0 回答
62 浏览

arduino - 阅读注册 LSM6DSO32 Arduino

我想从 LSM6DSO32 捕捉器中读取一些寄存器。但我有一个问题,我得到的价值观很奇怪。我使用 Atmel SAMD21 Cortex M0 和 i2C 与捕获者通信。首先,我将我的捕获器设置为 8g 和 500°,以便像这样的陀螺仪

对我来说,这是有效的,因为如果我在获得 0x48 值后读取 0x10,并且如果我尝试读取我注册的人,我会得到好的值 0x6C。

之后我尝试读取寄存器值,我的 readSensor 函数

因此,如果我调用这个函数 2000 次以获取偏移量,我会得到非常奇怪的值

X Y并且Z由值 0,1 和 2 定义。所以如果我打印gyro_offset[X]我得到值 23,这对我来说是正常的,但是因为gyro_offset[Y]gyro_offset[Z]在 65514 附近得到了一个很大的值,对我来说这些不是很好,不是吗?

0 投票
1 回答
324 浏览

c++ - Arduino 在通过 String 和 sprintf 将浮点数打印到字符串时非常随机地冻结

StringTLDR:当通过 arduinos类将浮点数打印到字符串时,我得到了一致的冻结。以前我用 sprintf 和 %f 得到了同样的冻结。我已经使用 PString 类解决了这个问题,但我想了解这个问题。

完整故事:我有一个相当大的用于 arduino SAMD 架构(MKRZero)的 C++ 代码库,最近在我很久没有接触的一行代码上开始冻结。sprintf这是对with的调用%f,它在以前的预期中奇怪地工作。在对 SO 和谷歌进行一些研究之后,我意识到 Arduino 不支持通过 sprintf 进行浮点格式化,并且在排除 dtostr (由于不在 AVR 上)之后,我尝试了 ArduinosString类。这暂时解决了问题,但在使用一些不同的外部外围设备(可以连接和断开的 I2C 从机)测试系统后,冻结又出现了。所以完全相同的代码,但是由于不同的外围设备,它的部分被执行了一些差异。

代码库非常大(几 1000 行),我无法用一个简单的例子来重现。所以不幸的是,没有太多上下文,这些是失败的行:

该错误非常不稳​​定,因为我可以通过修改代码中其他位置不相关的内容或从我的 arduino 断开传感器(I2C 从站)来使其无法触发。但是当它出现时,它是一致的,因为它每次运行都会发生。我什至有一个可以运行的代码版本 - 但是删除其中三行会导致它再次冻结:

我很确定这不是内存问题,据我所知,这不是指针或非终止字符串爆炸的情况。

由于这篇文章https://forum.arduino.cc/t/use-pstring-to-avoid-crashes-due- ,我最终使用了PStrings(https://github.com/boseji/PString-Arduino-lib ) to-string-sprintf-or-dtostrf-float-issues/230946但我很沮丧和好奇,为什么它在String应该支持创建浮动时以这种看似随机的方式冻结。

0 投票
0 回答
47 浏览

c++ - Atmel Studio 7 的平台 IO

我正在尝试将工作平台 IO 项目导入 Atmel Studio 7。

我想知道在构建 PIO 时是否可以转储包含所有库的 cpp/.h 文件,我可以导入到 ASF 中?

我知道这会很乱,但我只需要测试一些东西。

0 投票
0 回答
24 浏览

c - Paho Mqtt 库 SysTick_Handler()

我在嵌入式 C(SAMD21+WINC3400) 项目中使用 Paho 库。不是很清楚,但应该

每隔 x ms 从计时器函数调用一次?

0 投票
0 回答
180 浏览

c++ - SAMD21 深度睡眠后不醒来

我正在使用 atsamd21e18a 构建个人板。我实际上正在使用睡眠模式。我做了一个函数来让 samd21 像这样进入睡眠模式。我使用 RTCZero 库。

所以在我的设置功能中我有这样的东西

因此,在我的设置中,我初始化了 rtc,并在我的用户按钮中附加了一个中断。此按钮用于打开或关闭我的电路板。

我的功能goTosleep()

在我的函数wakeUpButtonUser中,我有一个简单的if/else陈述。如果用户按下按钮超过 3 秒 samd21 进入睡眠goToSleep()功能,否则如果少于 3 秒,我想唤醒电路板并点亮我的 LED,但它不起作用。

这里我的wakeUpButtonUser函数 user_button 是从 C++ 为我的按钮创建的对象。

此功能有效,因为如果我评论该行goToSleep(),我可以根据我按下按钮的时间读取我的串行打开或关闭,并且 LED 也可以工作,因为我可以在睡觉前点亮 LED。但是当我的董事会睡觉时,她永远不会醒来我不明白为什么,我错过了什么?

0 投票
1 回答
114 浏览

arduino - Atmel SAMD21 微控制器不再制作 USB 端口

从昨天开始,我的带有 Atmel SAMD21 微控制器(与 Arduino MKR Zero 相同)的定制板没有制作 USB 端口。在此之前,董事会工作正常。

请提出解决此问题的方法。出现此类问题的可能原因是什么?

由于复位相当于给板子上电和断电,但仍未解决问题,再次烧录引导加载程序有帮助吗?

更多的信息:

  1. 板子好像不错 它以通常的方式打开和关闭电源。
  2. 当我尝试上传代码时,USB 端口连接出现了这个问题。
  3. 板上的 USB 引脚连接已经过检查,并使用不同的 USB 线进行了测试。

感谢你的帮助。

0 投票
1 回答
55 浏览

makefile - 草图的 arduino IDE 构建步骤是什么?

我正在尝试构建自己的基于终端的环境,以构建程序并将其上传到我拥有 SAMD21 的自定义板上(就像在 arduino MKRZERO 中一样)

为此,我正在查看 arduino IDE 的详细输出,并尝试将相同的命令/构建步骤移动到一个简单的 makefile。我在尝试理解 arduino IDE 在编程阶段和导出二进制阶段执行的一些步骤时遇到了一些困难。

编程

我有这个非常简单的测试代码:

这是新编译的 IDE 上的详细输出(在 IDE 上称为验证):

https://pastebin.com/LnrC8BSi(抱歉不能发太多字符)

我的问题是:

  • 为什么将第一个 g++ 命令的输出发送到 /dev/null ?
  • 从原始代码生成的名为 ctags_target_for_gcc_minus_e.cpp 的文件是什么?

导出二进制文件

IDE 有一个“导出已编译的二进制文件”的选项,该选项的输出是:

https://pastebin.com/zGQjgt2h

生成文件sketch.ino。我正在寻找的with_bootloader.bin 。但是,我似乎找不到包含引导加载程序的命令创建此版本。

load我正在使用 Atmel SAM-ICE 编程器,因此我可以方便地使用已包含引导加载程序的二进制文件,这样我在使用 openocd命令时不会擦除板上的引导加载程序。但我似乎无法加载这个 with_bootloader.bin 文件,因为它不包含符号,我得到这个输出:

非常感谢您对 Arduino IDE 构建过程的任何见解,我真的很想了解每个步骤的作用,以及哪些对我来说可能不是必需的