arduino - pinMode参数1的确定 - 以arduino nano every核心板为例

news2024/11/18 16:29:07

文章目录

    • arduino - pinMode参数1的确定 - 以arduino nano every核心板为例
    • 概述
    • 笔记
    • pins_arduino.h
    • ABX00028-datasheet.pdf
    • 简单的辨认管脚号就照ABX00028-datasheet.pdf来
    • END

arduino - pinMode参数1的确定 - 以arduino nano every核心板为例

概述

arduino nano every的核心板使用的MCU为ATMega4809
在看一个工程(基于arduino nano every核心板), 在初始化代码中看到了很多 pinMode(x, x); e.g. pinMode(2, OUTPUT);
突然懵逼了… 到底是在初始化核心板哪个引出的引脚呢? 如果分不清操作的是哪个管脚, 就无法将工程实现和使用核心板的原理图一一对应.

假设要在核心板的数字IO上点亮一个灯, 或者用数字IO模拟串口发送一些数据(节省成本), 可能要初始化20个数字IO(就是模拟20个串口发送), 如果整错了, 都不知道操作的哪个引脚…
要先确定是核心板哪个引出管脚是哪个pin数字, 才可能正确初始化指定的pin数字为输出模式.

arduino库是经过封装的, 同一个函数(e.g. pinMode), 名称一样, 但是选不同核心板时, 是不同的实现(这就是封装).
而且基于arduino nano every的工程是不支持单步的. 所以想进基于arduino nano every的pinMode实现去看看, 这个参数1(管脚号码)是怎么使用的, 是不可能的.

即使使用能单步调试的arduino核心板(e.g. arduino zero)工程, 即使单步或转到pinMode的实现, 也是arduino zero的实现, 不是arduino nano every的实现.

看不到基于arduino nano every的工程库实现, 有点为难.

在arduinoIDE相关的目录中, 找到了 C:\Users\me\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.8\variants\nona4809\pins_arduino.h
再结合ABX00028-datasheet.pdf中的核心板引脚导出图, 这才明白.

笔记

pins_arduino.h

C:\Users\me\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.8\variants\nona4809\pins_arduino.h

// On the Arduino board, digital pins are also used
// for the analog output (software PWM).  Analog input
// pins are a separate set.

// ATMEGA4809 / ARDUINO
//
//                     (SCL)(SDA) (7)  (2)                 (R)  (3~) (6~)
//                 PA4  PA3  PA2  PA1  PA0  GND  VDD  UPDI PF6  PF5  PF4  PF3
//
//                  48   47   46   45   44   43   42   41   40   39   38   37
//              + ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ +
//        PA5   1|                                                             |36  PF2
//        PA6   2|                                                             |35  PF1 (TOSC2)
//        PA7   3|                                                             |34  PF0 (TOSC1)
//   (9~) PB0   4|                                                             |33  PE3 (8)
//  (10~) PB1   5|                                                             |32  PE2 (13)
//   (5~) PB2   6|                                                             |31  PE1 (12)
//        PB3   7|                          48pin QFN                          |30  PE0 (11~)
//   (Tx) PB4   8|                                                             |29  GND
//   (Rx) PB5   9|                                                             |28  AVDD
//        PC0  10|                                                             |27  PD7 (VREF)
//        PC1  11|                                                             |26  PD6
//        PC2  12|                                                             |25  PD5 (A5)
//               + ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ +
//                  13   14   15   16   17   18   19   20   21   22   23   24
//
//                  PC3  VDD  GND  PC4  PC5  PC6  PC7  PD0  PD1  PD2  PD3  PD4
//                                 (1)  (0)  (4)       (A0) (A1) (A2) (A3) (A4)

//

const uint8_t digital_pin_to_port[] = {
  PC, // 0 PC5/USART1_Rx
  PC, // 1 PC4/USART1_Tx
  PA, // 2 PA0
  PF, // 3 PF5
  PC, // 4 PC6
  PB, // 5 PB2
  PF, // 6 PF4
  PA, // 7 PA1
  PE, // 8 PE3
  PB, // 9 PB0
  PB, // 10 PB1
  PE, // 11 PE0
  PE, // 12 PE1
  PE, // 13 PE2
  PD, // 14 PD3/AI3
  PD, // 15 PD2/AI2
  PD, // 16 PD1/AI1
  PD, // 17 PD0/AI0
  PF, // 18 PF2/AI12
  PF, // 19 PF3/AI13
  PD, // 20 PD4/AI4
  PD, // 21 PD5/AI5
  PA, // 22 PA2/TWI_SDA
  PA, // 23 PA3/TWI_SCL
  PB, // 24 PB5/USART3_Rx
  PB, // 25 PB4/USART3_Tx
};

上面的摘录, 可以看出从MCU侧, 看到的引脚号码. 但是这个要和核心板引出的管脚对应的话, 就需要看数据表. 因为我们要操作的数字IO, 是核心板引出的管脚, 如果只看MCU侧, 看不明白.

ABX00028-datasheet.pdf

在这里插入图片描述
红色的Dx和~Dx, 就是数字IO(只能赋值为0和1的引脚),
D2就说明数字IO编号为2, 对照 pins_arduino.h 如下
在这里插入图片描述
在这里插入图片描述

~D9就说明数字IO为9, 对照 pins_arduino.h 如下
在这里插入图片描述
在这里插入图片描述

简单的辨认管脚号就照ABX00028-datasheet.pdf来

如果要操作核心板引出的哪根数字IO, 就可以对照ABX00028-datasheet.pdf中的6 Connector Pinouts中带的核心板引脚导出图中的Dx, ~Dx带的数字来确认pinMode的参数1该填哪个数字.

假设核心板D2引脚要初始化为输出, 引脚号就是2, 就调用 pinMode(2, OUTPUT);
在这里插入图片描述

假设核心板~D10引脚要初始化为输出, 引脚号就是10, 就调用 pinMode(10, OUTPUT);
在这里插入图片描述

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我的交易抽象思路分享

这几天我老是抛出一些问题给老师们,都是故意而为之,因为我靠这种方式自己引导自己很多年; 比如:龙头真的存在么?为何前几天它还不是龙头,怎么今天就是了? 再如:交易模式和交易系统…

微信小程序解密encryptedData报错pad block corrupted

前要: 今天调试一下微信授权登录的时候老是第一次报错解密失败pad block corrupted,第二次授权的时候正常,因为第一次已经获取到手机号码! 后端代码: public static JSONObject getUserInfo(String encryptedData, S…

微信自动回复软件

软件介绍 软件名称: 微信超级管家 适用平台: windows 是否免费: 完全免费 病毒检测: 火绒安全检测通过 流氓检测: 无广告、无弹窗、无其他流氓行为 软件大小: 183M 这个软件依赖的是本地微信客户端&#x…

C++ 初始化列表详解

目录 1.什么是初始化列表 2.什么时候需要使用初始化列表? 3.初始化列表的效率 4.初始化列表的初始化顺序 1.什么是初始化列表 class A { public:A(int value):m_dada(value){}private:int m_dada; }; 如上图,红色圈起来的部分,就是构造函…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《5》

在上一篇文章的介绍中,我们知道语义分割可以对图像中的每个像素进行类别预测。这节主要讲关于全卷积网络(Fully Convolutional Network,FCN),实现从图像像素到像素类别的变换。 那这里的卷积神经网络跟以往的有什么不一样的地方吗? 这里的网络是通过转置…

Java中享元模式是什么/享元模式有什么用,编程如何实现,哪里用到了享元模式

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 5.8 享元模式 5.8.1 概述 运用共享技术来有效地支持大量细粒度对象的复用,通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象…

图文并茂strapi 4.5.5自定义搭建指南以及数据库字段名接口返回mapping分析

strapi是什么? 基于Nodejs的开源免费CMS框架 为什么选择它? 基于nodejs,100%JavaScript,上手迅速可轻松创建功能强大且可自定义的API可以使用任何喜欢的数据库 先决条件 首先你的电脑需要具备以下环境,再执行命令…

技术破局:程序员2023为何跳出舒适圈?

1前言今天的冬日暖阳高照,给我羽绒服下的肉身火一般的燥热,给了我一个错觉,以为到了阳春三月。刚刚送完老妈还有老婆孩子回老家,我坐到电脑机器前,准备捋一下思绪,回首2022的生活和工作。 2 2022 回顾今年用…

Linux下C/C++实现cpustat(测量CPU利用率)

在Linux中,cpustat定期转储正在运行的进程的当前CPU利用率统计信息。cpustat已被优化为具有最小的CPU开销,与top相比,通常使用约35%的CPU。cpustat还包括一些简单的统计分析选项,可以帮助描述CPU的加载方式。 cpustat介绍 cpust…

大数据概论

大数据概论大数据概论概念特点(4V)Volume(大量)Velocity(高速)Variety(多样)Value(低价值密度)应用场景发展前景部门间业务流程分析部门组织结构大数据概论 概念 大数据(BigData),指无法在一定时间范围内\textcolor{Red}{无法在一定时间范围内}无法在一定时间范围…

iOS—Effective Objective—C2.0(2)

文章目录对象,消息,运行期理解“属性”概念合成与存取dynamic关键字属性特性原子性读/写权限内存管理语义方法名为什么几乎所有的属性都可以使用nonatomic:要点在对象的内部尽量直接访问实例变量惰性初始化:要点理解“对象同等性”…

2022年度总结——平凡之路

文章目录一、缘起二、回首2022三、展望2023四、结束语我是平凡的人,总要接受普通平凡的自己。一、缘起 我注册CSDN的时间是2021-07-25,这是一个值得纪念的时间。不过那时候的我并没有写博客,只是在CSDN游览一些文章,查看资料&…

一文读懂Java垃圾回收机制及算法原理万字详解

Java垃圾回收机制及算法 文章目录Java垃圾回收机制及算法垃圾回收概述垃圾回收-对象是否已死判断对象是否存活 - 引用计数算法判断对象是否存活-可达性分析算法可达性分析算法JVM之判断对象是否存活再谈引用垃圾收集算法分代收集理论标记-清除算法什么是标记-清除算法?标记-复…

读书:《卡片笔记写作法》

2023年罗胖跨年演讲时提到了一个故事,说Flomo的创始人有3个原则:一不在软件内弹广告,二不做永久会员,三不融资。我就马上试用了一下这款Flomo软件,然后就发现了《卡片笔记写作法》这本书。 这本书的卡片写作法来自于一…

【Qt】QtCreator新建Application项目的6类应用程序的示例

【Qt】QtCreator新建Application项目的6类应用程序的示例1、背景2、Application分类1、背景 操作系统:windows10专业版。 Qt版本:qt-opensource-windows-x86-msvc2013_64-5.7.1.exe 注意:安装了该exe可执行文件,就自动安装了qtcr…

(考研湖科大教书匠计算机网络)第一章概述-第一节:因特网概述

文章目录一:网络、互联网和因特网基本概念二:因特网发展的三个阶段三:ISP和基于ISP的三层结构的因特网(1)ISP(2)基于ISP的三层结构的因特网四:因特网的标准化工作五:因特…

KMP算法--子串查找问题

目录 一.前言 二.KMP算法简介 三.关键概念1:字符串的前后缀 四. 关键概念2:字符串相等前后缀与最长相等前后缀长度 五.关键概念3:Next数组 六.Next数组在算法中的应用: 七.模式串Next数组的构建 先膜拜一下三位神仙&#x…

面试前端数组去重,我会问这3个小问题

关于数组去重,已经是一个老生常谈的问题了,网络上已经有N篇关于数组去重的讲解了,所以,凡是能看见这篇博客的,我们都是有缘人,希望2023年你可以乘风破浪,职击沧海。而一般面试的时候&#xff0c…

MySQL调优-高性能业务表结构设计

目录 前言记录: 数据库表设计 范式设计 什么是范式? 数据库设计的第一范式 数据库设计的第二范式 数据库设计的第三范式 范式说明 反范式设计 什么叫反范式化设计? 反范式设计-商品信息 范式化和反范式总结 实际工作中的反范式实…

C++ stack和queue

1. stack的介绍和使用1.1 stack的介绍1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器&…