0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

我玩Arduino,但我使用寄存器开发

LZL18611808956 来源:果果小师弟 2023-05-19 09:27 次阅读

摘要Arduino开发板常用的芯片Atmel公司生产的AVR微控制器系列。最常见的是ATmega328P,被广泛用于Arduino Uno开发板。使用Arduino平台开发AVR的单片机非常方便。ArduinoIDE提供了一个非常简洁、易于使用的开发环境,使编写和上传代码变得简单。它提供了一套简化的函数库和API,使开发者可以轻松地与ATmega328P的硬件进行交互,无需深入了解底层的寄存器操作。但是Arduino也可使用寄存器开发。

一、使用Arduino点灯

使用ArduinoIDE开发AVR的ATmega328P单片机非常方便。在官网下载ArduinoID后,使用IDE自带的实例就可以玩耍了。

fd9b2630-f567-11ed-90ce-dac502259ad0.png

//thesetupfunctionrunsoncewhenyoupressresetorpowertheboard
voidsetup(){
//initializedigitalpinLED_BUILTINasanoutput.
pinMode(LED_BUILTIN,OUTPUT);
}

//theloopfunctionrunsoverandoveragainforever
voidloop(){
digitalWrite(LED_BUILTIN,HIGH);//turntheLEDon(HIGHisthevoltagelevel)
delay(1000);//waitforasecond
digitalWrite(LED_BUILTIN,LOW);//turntheLEDoffbymakingthevoltageLOW
delay(1000);//waitforasecond
}
fdabddae-f567-11ed-90ce-dac502259ad0.png

这样看起来非常简单,这跟学习STM32单片机完全不一样,可能大家一听你是玩Arduino的就觉得那玩意太垃圾了。其实这个单片机也有高大上一点的玩法。

二、AVR单片机IO操作步骤

在玩AVR的ATmega328P之前先了解一下AVR单片机。AVR的IO端口是标准的双向口,在复位时所有端口处于高阻态,AVR的每个端口对应三个寄存器,即DDRx,PORTx,PINx。在使用AVR单片机之前,一定要根据引脚功能对相应的端口初始化,否则,端口很可能不能正常工作。当单片机的引脚作为通用数字I/O口使用时,每个引脚都具有3个寄存器位:DDRxn、PORTxn、PINxn。

DDRxn PORTxn PINxn I/O 上拉电阻 说明
0 0 -- 输入 高阻态
0 1 -- 输入 带上拉电阻
1 0 -- 输出 输出低电平
1 1 -- 输出 输出高电平

AVR单片机中对IO口进行操作之前需要进行相应的初始化设置,其设置步骤如下:

1 通过方向寄存器DDRx设置相应的端口为输入或者输出。

2 如果设置为输出的话,把需要输出的数据送往数据寄存器PORTx。如果设置为输入的话,从输入寄存器PINx中读取外部的输入值,同时可以通过设置PORTx来设置相应的引脚是否需要上拉电阻。

三、使用Atmel Studio点灯

Atmel Studio是Atmel(现在是Microchip)公司推出的一款集成开发环境(IDE),专门用于嵌入式系统的开发。提供了丰富的工具和功能,以支持Atmel微控制器的编程、调试和部署。Atmel Studio支持多种编译器,包括GCC和IAR编译器,可用于生成最优化的代码。支持多种编程语言,包括C、C++汇编语言。开发者可以根据自己的需求选择最合适的编程语言来编写他们的应用程序。

首先在官网下载Atmel Studio的安装包,由于Atmel被Microchip收购了,所以Atmel Studio也更名为Microchip Studio,它整合了Atmel Studio的功能,并扩展支持了更多Microchip微控制器系列,包括PICdsPIC系列。Atmel Studio和Microchip Studio都是用于微控制器应用程序开发的IDE。Atmel Studio主要针对Atmel微控制器,而Microchip Studio则扩展了支持更多的Microchip微控制器系列。

fdb57d50-f567-11ed-90ce-dac502259ad0.png

下载之后傻瓜式安装就可以了。安装完成的界面如下,看着是不是够很熟悉。Atmel Studio和Visual Studio在界面和功能上有很多相似之处,这是因为Atmel Studio是基于Visual Studio Shell开发的。它们的主要区别在于针对的目标平台和硬件。Atmel Studio专注于Atmel微控制器的开发,而Visual Studio是一个通用的开发环境,可用于各种应用程序的开发。因此,如果你已经熟悉Visual Studio,切换到Atmel Studio会相对容易,因为它们之间有很多共享的特性和工作流程。

fdbe4926-f567-11ed-90ce-dac502259ad0.png

3.1 新建工程

fdc4f94c-f567-11ed-90ce-dac502259ad0.pngfdca4bb8-f567-11ed-90ce-dac502259ad0.pngfdd77a40-f567-11ed-90ce-dac502259ad0.png

/*
*GccApplication1.c
*
*Created:2023/5/18/星期三1419
*Author:LiuYao
*Board:ArduinoNano
*/
#ifndefF_CPU
#defineF_CPU10000000UL
#endif

#include
#include

intmain(void)
{
DDRB=(1<

3.2 工具配置

Atmel Studio没有原生支持Arduino的开发,需要进行设置,本文使用的板子为ArduinoUNO,单片机型号为ATmega328P,注意在新建工程的时候要选对型号。

fde314e0-f567-11ed-90ce-dac502259ad0.pngfde9c696-f567-11ed-90ce-dac502259ad0.png

打开以后关键点是填写下面三个选项,同时需要勾选Use Output window。

Title:Arduino UNO(随意填写)

Command:D:SoftwareArduinohardware oolsavrinavrdude.exe,这个路径为ArduinoIDE中avrdude.exe的路径,根据自己的路径填写。

Arguments:这里填写要注意串口号,我这里是COM7,根据自己板子识别填写正确的COM号。

-C"D:SoftwareArduinohardware	oolsavretcavrdude.conf"-v-patmega328p-carduino-PCOM7-b115200-D-Uflash"$(ProjectDir)Debug$(TargetName).hex":i

Arguments参数解释如下:

Usage:avrdude.exe[options]
Options:
-pRequired.SpecifyAVRdevice.
-bOverrideRS-232baudrate.
-BSpecifyJTAG/STK500v2bitclockperiod(us).
-CSpecifylocationofconfigurationfile.
-cSpecifyprogrammertype.
-DDisableautoeraseforflashmemory
-iISPClockDelay[inmicroseconds]
-PSpecifyconnectionport.
-FOverrideinvalidsignaturecheck.
-ePerformachiperase.
-OPerformRCoscillatorcalibration(seeAVR053).
-U:r|w|v:[:format]
Memoryoperationspecification.
Multiple-Uoptionsareallowed,eachrequest
isperformedintheorderspecified.
-nDonotwriteanythingtothedevice.
-VDonotverify.
-uDisablesafemode,defaultwhenrunningfromascript.
-sSilentsafemodeoperation,willnotaskyouif
fusesshouldbechangedback.
-tEnterterminalmode.
-E[,]Listprogrammerexitspecifications.
-xPasstoprogrammer.
-yCount#erasecyclesinEEPROM.
-YInitializeerasecycle#inEEPROM.
-vVerboseoutput.-v-vformore.
-qQuellprogressoutput.-q-qforless.
-llogfileUselogfileratherthanstderrfordiagnostics.
-?Displaythisusage.

3.3 编译和烧写程序

首先编译工程。

fdf3abac-f567-11ed-90ce-dac502259ad0.png

将Arduino UNO连接到电脑,去Tools中点击刚设置的配置Arduino UNO。

fdffae16-f567-11ed-90ce-dac502259ad0.png

这个时候就可以把程序烧写到Arduino中了,output窗口会输出下面的内容。

fe07b4b2-f567-11ed-90ce-dac502259ad0.png

如果报错,需要考虑一下上面提到的路径是不是正确还有COM端口号。

:通过Atmel Studio这个方式不能为Arduino Nano板子下载程序,因为Arduino Nano板子大多数用的是Old Bootloader,如果使用这种方式会下载失败。

试验现象

fe0cfb3e-f567-11ed-90ce-dac502259ad0.gif

下次有人问你玩啥单片机时候你要说:我不玩Arduino,我玩AVR的,和你的ARM一样

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620852
  • 寄存器
    +关注

    关注

    30

    文章

    5030

    浏览量

    117733
  • STM32
    +关注

    关注

    2239

    文章

    10672

    浏览量

    348768
  • 开发板
    +关注

    关注

    25

    文章

    4430

    浏览量

    94011
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184839

原文标题:我玩Arduino,但我使用寄存器开发

文章出处:【微信号:果果小师弟,微信公众号:果果小师弟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    解析CPU中的寄存器

    8位寄存器在16位寄存器中,而16位寄存器在32位寄存器中。
    发表于 09-19 10:10 2904次阅读

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。
    的头像 发表于 07-21 16:59 2977次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>点亮LED灯?

    寄存器讨论——为什么用软件能够改变寄存器的某位的值

    最近学了下ARM7,发现,每个寄存器都有个32位的地址。这么说,对某个寄存器的操作,其实最根本就是对这个地址操作。而寄存器的概念就是有触发
    发表于 04-06 13:48

    怎么在arduino里操作定时寄存器

    直接在arduino寄存器,他说不在这个声明范围avr.ino: In function 'void setup()':avr.ino:6:2: error: 'TIMSK
    发表于 04-21 14:00

    寄存器写入顺序是否可能改变寄存器的行为?

    你好。eval board + steval来设置的步进电机参数。它完美无瑕。现在正在编写Arduino代码以获得相同的控件。
    发表于 11-07 09:51

    stm32寄存器开发概述

    stm32寄存器开发基础寄存器开发概述[^1]寄存器:stm32时钟源:STM32F407引脚分组和寄存
    发表于 08-10 06:07

    寄存器与移位寄存器

    寄存器与移位寄存器 寄存器是用来寄存数码的逻辑部件,所以必须具备接收和寄存数码的功能。任何一种触发器都可以构成
    发表于 03-12 15:19 59次下载

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定义  寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用
    发表于 03-08 14:26 2.1w次阅读

    数据寄存器,数据寄存器是什么意思

    数据寄存器,数据寄存器是什么意思 数据寄存器数据寄存器包括累加器AX、基址寄存器BX、计数寄存器
    发表于 03-08 14:38 1.2w次阅读

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    发表于 03-08 14:50 1.7w次阅读

    32位寄存器,32位寄存器是什么意思

    32位寄存器,32位寄存器是什么意思  从X8086开始学了一年,第一个ASM的程序就是变32换16进制的程序,不过现在叫我从新开始写ASM程
    发表于 03-08 17:26 1.7w次阅读

    寄存器与移位寄存器

    寄存器与移位寄存器:介绍寄存器原理和移位寄存器的原理及实现。
    发表于 05-20 11:47 0次下载

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解
    发表于 10-16 13:04 14次下载
    51<b class='flag-5'>寄存器</b>的所有<b class='flag-5'>寄存器</b>名称,(包括<b class='flag-5'>寄存器</b>每一位的作用及用法)资源详解

    Arduino 74hc595移位寄存器

    电子发烧友网站提供《Arduino 74hc595移位寄存器.zip》资料免费下载
    发表于 06-14 10:03 3次下载
    <b class='flag-5'>Arduino</b> 74hc595移位<b class='flag-5'>寄存器</b>

    寄存器开发,HAL开发和LL开发的区别和参考代码

    1,寄存器开发【难度值:难】寄存器开发是一种直接访问微控制器寄存器的编程方法,它提供了对硬件的极大灵活性和直接控制。在
    的头像 发表于 11-17 08:00 410次阅读
    <b class='flag-5'>寄存器</b><b class='flag-5'>开发</b>,HAL<b class='flag-5'>开发</b>和LL<b class='flag-5'>开发</b>的区别和参考代码