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一样

审核编辑:汤梓红

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

    关注

    6030

    文章

    44505

    浏览量

    632359
  • 寄存器
    +关注

    关注

    31

    文章

    5305

    浏览量

    119909
  • STM32
    +关注

    关注

    2265

    文章

    10859

    浏览量

    354533
  • 开发板
    +关注

    关注

    25

    文章

    4920

    浏览量

    97113
  • Arduino
    +关注

    关注

    187

    文章

    6461

    浏览量

    186565

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

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

收藏 人收藏

    评论

    相关推荐

    基于DWC2的USB驱动开发-发送相关的寄存器DMA寄存器详解

    本文转自公众号,欢迎关注 基于DWC2的USB驱动开发-发送相关的寄存器DMA寄存器详解 (qq.com) 前言 如下寄存器DIEPxxx,对应IN端点,和发送数据相关,这一篇先介绍和
    的头像 发表于 07-16 16:42 1564次阅读
    基于DWC2的USB驱动<b class='flag-5'>开发</b>-发送相关的<b class='flag-5'>寄存器</b>DMA<b class='flag-5'>寄存器</b>详解

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

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

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

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

    寄存器与移位寄存器

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

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

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

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

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

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

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

    寄存器与移位寄存器

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

    移位寄存器的原理

    移位寄存器按照不同的分类方法可以分为不同的类型。 如果按照移位寄存器的移位方向来进行分类, 可以分为左移移位寄存器、移位寄存器和双向移位寄存器
    发表于 07-15 09:38 7.4w次阅读
    移位<b class='flag-5'>寄存器</b>的原理

    AD转换寄存器设置

    AD转换寄存器设置AD转换寄存器设置AD转换寄存器设置
    发表于 11-10 17:36 16次下载
    AD转换<b class='flag-5'>寄存器</b>设置

    arduino i2c 如何写16位寄存器_初学者单片机开发板如何选择?学长为你推荐

    的开源电子原型平台,1.价格便宜:相对其他开发板价格比较廉价,一块开发板价钱只要十几块钱,某宝上有卖,2.使用简单:使用Arduino你可以不了解其内部硬件结构和寄存器设置,仅仅知道单
    发表于 12-31 19:46 1次下载
    <b class='flag-5'>arduino</b> i2c 如何写16位<b class='flag-5'>寄存器</b>_初学者单片机<b class='flag-5'>开发</b>板如何选择?学长为你推荐

    ARM通用寄存器及状态寄存器详解

    笔者来聊聊ARM通用寄存器以及状态寄存器的认识与理解。
    的头像 发表于 01-06 14:58 6891次阅读

    Arduino 74hc595移位寄存器

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

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

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

    寄存器分为基本寄存器和什么两种

    寄存器是计算机中用于存储数据的高速存储单元,它们是CPU内部的重要组成部分。寄存器可以分为基本寄存器和扩展寄存器两种类型。 一、基本寄存器
    的头像 发表于 07-12 10:31 1051次阅读