问题标签 [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 投票
1 回答
909 浏览

visual-studio - SAMD21G (Cortex -M0+) 编程/调试连接

我从RobotDYN购买了 SAMD21G18A(ARM Cortex M0+)并试图简单地设置来对其进行编程,但我找不到太多关于如何连接/设置以进行编程和调试的文档。

在网站上它说“它最重要的功能之一是 Atmel 的嵌入式调试器 (EDBG),它提供了一个完整的调试接口,无需额外的硬件......”所以我假设连接将类似于其他一些像 Arduino、PI 或 Beaglebone 这样的 MCU 开发板意味着不需要 JTAG 编程器之类的东西,但我不知道是否是这种情况,或者我只是对如何设置感到困惑。

谁能指出我如何上传程序并设置我的 IDE 的正确方向?我可以找到关于寄存器、newlib 库和类似内容的各种信息,但在实际连接或其他需要的组件上找不到太多信息。

如果有人使用该组合,我更喜欢 Visual Studio +VisualGDB,但我会接受任何帮助,这样我就可以开始了。我也试过 Atmel Studio 和 Arduino IDE 也没有成功。顺便提一下,我不是在寻找分步指南,只是在寻找关于我应该如何进行的方向和解释。

当我安装 Arduino IDE 时,我能够让开发板在 COM11 下显示为 Arduino-M0,所以我可能只是缺少一些驱动程序?

编辑: 我一直在互联网上寻找可能的连接方式,似乎我需要某种程序员/调试器。我还发现这些板有几种类型,其中一种是XPlained 系列。我查看了原理图,除了 ATSAMD21 之外,它们还有一个 ATMega。我有各种 AVR、BeagleBone Black 以及 FTDI CDM USB 电缆。有谁知道是否可以使用其中任何一个来设置编程/调试?

0 投票
1 回答
499 浏览

c++ - Cortex-M0+ ASF 基础知识

我刚刚从 AVR 过渡到 ARM,我遇到了一些问题,只是让一个简单的闪烁程序工作。我一直在互联网上搜索,在我看来,Atmel ASF 库应该是最简单的入门方法,但我似乎无法获得工作程序。

我正在使用 Atmel Studio 编写代码,并尝试了几个模板但没有成功。我正在使用最多支持最少的 RobotDYN Cortex-M0,所以我在这里有点盲目。

这是我到目前为止所拥有的:

  • 使用 ATSAMD21G18A 的用户板模板创建了一个新的 C ASF 板项目(确认芯片)
  • 使用我添加的 ASF 向导:
    • IOPORT - 通用 I/O 服务
    • 延迟例程服务

主.c:

}

一切似乎都编译得很好,我可以启动调试器(使用 Atmel-ICE),程序进入第一个ioport_set_pin_level,板上似乎没有发生任何事情,当它尝试执行时,delay_ms它进入延迟但永远不会返回。当我暂停程序执行时,它似乎一直在等待延迟完成,delay_cycles但是当我查看const uint32_t n延迟函数中的参数时,它只会给出一条消息“已优化”。

我错过了什么?我可能需要导入一些编译器开关或其他 ASF 库吗?

这是我目前拥有的 C 编译器选项:

0 投票
1 回答
73 浏览

c++ - Ardunio Uart 类和库

我正在尝试将草图转换为图书馆,但未能成功。

使用 Arduino 零。

草图形式:

Uart 类型的变量定义如下:

&serial1有一个在和之间切换的功能&serial2

这行得通。

现在我正在尝试在库中实现相同的功能:

在主代码中定义如下:

这是头文件:

这是 .cpp 文件:

这符合要求,但由于 USB 端口丢失,启动时某些东西必须崩溃。必须按下复位按钮才能启动引导加载程序。

我似乎无法找到问题所在。

0 投票
1 回答
215 浏览

c++ - 'ClassName' 和 'ClassInstance' 未在此范围内声明

我正在尝试在Atmel Studio中使用 C++ 对Atmel SAM D21微控制器进行编程。我正在尝试使用其中一个片上定时器来创建周期性的硬件中断。

我创建了Timer4类来设置计时器main.cpp。我试图创建一个在主函数中Timer4调用的实例,但它说MyTimer4

我已经看到许多类似的讨论指向不正确/圆形#includes。但是,我自己似乎没有看到同样的问题。有任何想法吗?


主文件


定时器SAMD21.h


定时器SAMD21.cpp

0 投票
1 回答
325 浏览

atmel - 为 SAMD21 DAC 使用外部 Vref

我使用 SAMD21 Xplained 板。我运行 Atmel Studio 提供的 DAC 示例:DAC_QUICKSTART1

在示例()附带的头文件中dac_feature.h,我有以下枚举:

原来,参考电压是内部 1V 电压。我想使用外部参考,这样 DAC 输出可以从 0V 变化到 5V 左右。

我的问题是:我如何实际设置这些设置?

在同一个文件 -dac_feature.h中,有以下结构:

这里创建了dac_reference调用引用的实例。我认为这是完成的地方,但我仍然不确定如何。

任何帮助表示赞赏。

0 投票
0 回答
195 浏览

c++ - C++ 指针危险?如何为 Arduino 成功创建更通用的 i2c/TWI 库?

我正在做一个使用多个 i2c IC/传感器的项目。Adafruit 为各个 IC 提供了非常好的基本库,这非常方便(节省了数小时挖掘数据表的时间)。但是他们的库是不灵活的。我试图通过应用依赖注入来缓解这种情况。

所以解决方案是使用 TwoWire 实例并将其作为对(在我的情况下)MCP23008 库(依赖注入)的引用传递,并让该库使用相同的 TwoWire 实例来执行所有 i2c 调用。

为了使主题更具可读性——但仍然提供我已经测试过的内容和原因的见解——我将首先提到这个问题,然后在底部提供更多背景信息。

我也改变了所有的“电线”。在其他方法中引用“_wire->”。

在我的测试草图(mcp23008_test.ino)中:

程序不会崩溃(我使用心跳 LED 并且串行输出继续工作,i2c 总线也保持响应(开始/结束)但连接到 mcp23008 的 LED 在库的 TwoWire 依赖注入版本中没有反应)。

我将尝试的一件事是在 i2c 总线上添加一个逻辑分析仪,看看会出现什么消息……但是由于“被黑”库解决方案确实可以正常工作,我猜想还有其他事情发生。

请注意,我有一个解决方法,即将所有库内容作为子 ino 文件直接包含在主草图中,这可行,但当然不是很可靠。

背景资料:

为了使事情易于管理,我首先关注 MCP23008 IC:我已将 LED 连接到其中一个引脚,向其写入低电平将使 LED 亮起(当我将其降至 3.3V 时),高电平将其关闭. 到目前为止一切顺利,如果我破解库以支持我的特定 i2c 端口并且这可以正常工作:

然后开始我做:

在库的 begin 方法中。

然后,我将库中的所有 Wire 引用替换为 myWire。

到目前为止,到目前为止一切都很好,我可以让 LED 从我的主草图等上闪烁。

所以这适用于我的基本情况,但它是一个非常丑陋的解决方案:您可能又想为 MCP23008 使用一些不同的端口。在我的情况下,我想使用多个 i2c 设备,因为它们都使用 myWire.begin(); 在他们的开始方法中,i2c 总线冻结等。

正如我之前所说:人们并不真正希望库本身做 myWire.begin 的东西(如果需要额外的 pinPeripheral 调用等):人们希望主草图这样做。

SparkFun Electronics 的 Nathan Seidle 写了一些关于 Arduino 库不灵活问题的好文章:https ://www.sparkfun.com/news/2194

但是他的解决方案和他基于他的解决方案的解决方案对我不起作用:我可以在总线上看到 MCP23008,但在使用修改后的库时它对我的命令没有反应。

我还查看了https://github.com/arduino/ArduinoCore-samd/blob/master/libraries/Wire/Wire.cpp/.h,因为它与我尝试完成的工作几乎相同,但比在 Wire等级。我没有看到我的代码与该示例有任何偏差,但查看自己的代码当然总是一个弱点。

更新

这种简约的实现确实有效:我使用了标准的 Wire | 主作家作为一个板上的基本草图和标准电线 | 另一块板上的从接收器。

我换了主人:

CPP 文件:

H 文件:

这按预期工作......注意:我添加了 _wire->begin(); 为了可能混淆Wire通道,但即使那样它也不会混淆。

更新 2:

我实际上能够确认注入可以与其他 i2c 外围设备一起使用,包括 FXOS8700 加速度计/磁力计。所以它可能只是与 MCP 有关,或者我在某个地方犯了一个小错误。也许是时候深入研究 MCP 的数据表了。

更新 3: 也适用于 FXAS21002C,所以我猜这是一些与 MCP 相关的问题。我现在通过将 MCP 代码添加到我的主项目的 ino 文件中创建了一个解决方法,然后我可以毫无问题地使用依赖注入,不像我想要的那样整洁,但现在可行......

0 投票
1 回答
358 浏览

atmel - 暂停 SAMD21 TCC 计数器

Atmel SAMD21 TCC 外设提供了一个 STOP 命令,用于暂停计数器。可以使用 RETRIGGER 命令恢复计数器。

当发出 STOP 指令时,TCC 进入故障状态,其中输出要么处于三态,要么被驱动到配置寄存器中指定的状态。据推测,这种机制旨在支持固定的故障保护输出状态。

在我的情况下,我希望输出引脚冻结在它们在 STOP 命令时所处的状态。我能看到的唯一方法是每次更新输出时更新配置的故障输出状态寄存器 - 需要中断处理,这违背了 TCC 的大部分输出波形扩展架构的目的,以及作为一个我宁愿避免处理负载。还有其他复杂性,例如考虑死区时间机制和硬件/软件竞争。

所以我一直在寻找不涉及 STOP 命令的方法来实现这一点 - 但我看不到任何其他停止计数器的方法。没有办法门控外设时钟输入,并且在 GCLK 中禁用它被排除在外,因为它也运行 TCC1。(谁知道这会产生什么其他影响。)否定 ENABLE 位,除了矫枉过正之外,不出所料还会使输出处于三态。以各种其他方式修改配置通常需要写入启用保护寄存器,因此需要首先禁用外设。

(我还没有研究过的一个想法是从事件系统中驱动计数器,并控制事件生成/门控。)

那么:有没有什么方法可以在当前状态下暂停外设,同时保持输出引脚的状态?

0 投票
3 回答
500 浏览

microcontroller - 在 SAMDG55 上读取输出引脚电平

我正在为基于 Atmel/Microchip AT SAMG55 的设备构建固件。

在一个简单的函数中,触发一些连接到 GPIO 引脚的继电器。因为我想互锁不同的I/O,避免2个特定的输出同时为高电平,所以我需要知道我之前设置的引脚电平。

在另一个基于 SAMD21 的项目中,有一个读取输出引脚状态的函数

ASF 中的 SAMG55 端口库完全不同,所以我尝试ioport_get_pin_level(pin)了,但没有得到预期的结果。我认为它仅适用于配置为输入的引脚。

有没有推荐的解决方案?

0 投票
0 回答
100 浏览

arduino - 草图上传后无法使用 SAMD21 串行控制台

我买了这个 SAMD21 模块,但在使用串行控制台时遇到了问题。我已按如下方式设置 IDE:

  • 板=Arduino M0
  • 端口=COM10(Arduino Zero(本机 USB 端口))
  • 程序员=AVR ISP

一旦我在 SAMD21 上缓慢地双击重置,我就可以将代码上传到它。但是,上传完成后,板子被重置,代码开始运行但端口消失了,所以我看不到我通过 Serial.print 发送的消息....

我知道有一个协议可以将板置于“闪存”模式,然后将其重置,以便它可以运行上传的代码,并且当我双击重置时会启动它,并且这因板而异。

使用 Nano、Mega 或 ESP8266 时,上传完成后,串口仍然存在。

SAMD21 有什么我没有做(或做错)的事情吗?如果上传后无法使串口保持不变,有没有办法我仍然可以在某种控制台中显示调试消息?(调试加密狗?)

提前致谢!

0 投票
0 回答
91 浏览

timer - SAMD21 或任何其他 SAMx MCU:睡眠模式下的脉冲计数

我有三个外部引脚从传感器连接到 SAMD21G18 MCU。传感器的输出是这三个引脚上的电压脉冲。我想用定时器外围设备计算脉冲数。我想在睡觉的时候数数。我只想在另一个定时器的帮助下读取计数,生成中断并从睡眠中醒来。

有没有人尝试在 SAMx MCU 上休眠(空闲模式)时数数?

非常感谢!