0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

我玩Arduino,但我使用寄存器開發(fā)

LZL18611808956 ? 來源:果果小師弟 ? 2023-05-19 09:27 ? 次閱讀

摘要Arduino開發(fā)板常用的芯片Atmel公司生產(chǎn)的AVR微控制器系列。最常見的是ATmega328P,被廣泛用于Arduino Uno開發(fā)板。使用Arduino平臺開發(fā)AVR的單片機(jī)非常方便。ArduinoIDE提供了一個非常簡潔、易于使用的開發(fā)環(huán)境,使編寫和上傳代碼變得簡單。它提供了一套簡化的函數(shù)庫和API,使開發(fā)者可以輕松地與ATmega328P的硬件進(jìn)行交互,無需深入了解底層的寄存器操作。但是Arduino也可使用寄存器開發(fā)。

一、使用Arduino點燈

使用ArduinoIDE開發(fā)AVR的ATmega328P單片機(jī)非常方便。在官網(wǎng)下載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

這樣看起來非常簡單,這跟學(xué)習(xí)STM32單片機(jī)完全不一樣,可能大家一聽你是玩Arduino的就覺得那玩意太垃圾了。其實這個單片機(jī)也有高大上一點的玩法。

二、AVR單片機(jī)IO操作步驟

在玩AVR的ATmega328P之前先了解一下AVR單片機(jī)。AVR的IO端口是標(biāo)準(zhǔn)的雙向口,在復(fù)位時所有端口處于高阻態(tài),AVR的每個端口對應(yīng)三個寄存器,即DDRx,PORTx,PINx。在使用AVR單片機(jī)之前,一定要根據(jù)引腳功能對相應(yīng)的端口初始化,否則,端口很可能不能正常工作。當(dāng)單片機(jī)的引腳作為通用數(shù)字I/O口使用時,每個引腳都具有3個寄存器位:DDRxn、PORTxn、PINxn。

DDRxn PORTxn PINxn I/O 上拉電阻 說明
0 0 -- 輸入 高阻態(tài)
0 1 -- 輸入 帶上拉電阻
1 0 -- 輸出 輸出低電平
1 1 -- 輸出 輸出高電平

AVR單片機(jī)中對IO口進(jìn)行操作之前需要進(jìn)行相應(yīng)的初始化設(shè)置,其設(shè)置步驟如下:

1 通過方向寄存器DDRx設(shè)置相應(yīng)的端口為輸入或者輸出。

2 如果設(shè)置為輸出的話,把需要輸出的數(shù)據(jù)送往數(shù)據(jù)寄存器PORTx。如果設(shè)置為輸入的話,從輸入寄存器PINx中讀取外部的輸入值,同時可以通過設(shè)置PORTx來設(shè)置相應(yīng)的引腳是否需要上拉電阻。

三、使用Atmel Studio點燈

Atmel Studio是Atmel(現(xiàn)在是Microchip)公司推出的一款集成開發(fā)環(huán)境(IDE),專門用于嵌入式系統(tǒng)的開發(fā)。提供了豐富的工具和功能,以支持Atmel微控制器的編程、調(diào)試和部署。Atmel Studio支持多種編譯器,包括GCC和IAR編譯器,可用于生成最優(yōu)化的代碼。支持多種編程語言,包括C、C++匯編語言。開發(fā)者可以根據(jù)自己的需求選擇最合適的編程語言來編寫他們的應(yīng)用程序。

首先在官網(wǎng)下載Atmel Studio的安裝包,由于Atmel被Microchip收購了,所以Atmel Studio也更名為Microchip Studio,它整合了Atmel Studio的功能,并擴(kuò)展支持了更多Microchip微控制器系列,包括PICdsPIC系列。Atmel Studio和Microchip Studio都是用于微控制器應(yīng)用程序開發(fā)的IDE。Atmel Studio主要針對Atmel微控制器,而Microchip Studio則擴(kuò)展了支持更多的Microchip微控制器系列。

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

下載之后傻瓜式安裝就可以了。安裝完成的界面如下,看著是不是夠很熟悉。Atmel Studio和Visual Studio在界面和功能上有很多相似之處,這是因為Atmel Studio是基于Visual Studio Shell開發(fā)的。它們的主要區(qū)別在于針對的目標(biāo)平臺和硬件。Atmel Studio專注于Atmel微控制器的開發(fā),而Visual Studio是一個通用的開發(fā)環(huán)境,可用于各種應(yīng)用程序的開發(fā)。因此,如果你已經(jīng)熟悉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的開發(fā),需要進(jìn)行設(shè)置,本文使用的板子為ArduinoUNO,單片機(jī)型號為ATmega328P,注意在新建工程的時候要選對型號。

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

打開以后關(guān)鍵點是填寫下面三個選項,同時需要勾選Use Output window。

Title:Arduino UNO(隨意填寫)

Command:D:SoftwareArduinohardware oolsavrinavrdude.exe,這個路徑為ArduinoIDE中avrdude.exe的路徑,根據(jù)自己的路徑填寫。

Arguments:這里填寫要注意串口號,我這里是COM7,根據(jù)自己板子識別填寫正確的COM號。

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

Arguments參數(shù)解釋如下:

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中點擊剛設(shè)置的配置Arduino UNO。

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

這個時候就可以把程序燒寫到Arduino中了,output窗口會輸出下面的內(nèi)容。

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

如果報錯,需要考慮一下上面提到的路徑是不是正確還有COM端口號。

:通過Atmel Studio這個方式不能為Arduino Nano板子下載程序,因為Arduino Nano板子大多數(shù)用的是Old Bootloader,如果使用這種方式會下載失敗。

試驗現(xiàn)象

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

下次有人問你玩啥單片機(jī)時候你要說:我不玩Arduino,我玩AVR的,和你的ARM一樣

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628417
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119206
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352497
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4771

    瀏覽量

    96180
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6453

    瀏覽量

    185928

原文標(biāo)題:我玩Arduino,但我使用寄存器開發(fā)

文章出處:【微信號:果果小師弟,微信公眾號:果果小師弟】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于DWC2的USB驅(qū)動開發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2的USB驅(qū)動開發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解 (qq.com) 前言 如下寄存器DIEPxxx,對應(yīng)IN端點,和發(fā)送數(shù)據(jù)相關(guān),這一篇先介紹和
    的頭像 發(fā)表于 07-16 16:42 ?1408次閱讀
    基于DWC2的USB驅(qū)動<b class='flag-5'>開發(fā)</b>-發(fā)送相關(guān)的<b class='flag-5'>寄存器</b>DMA<b class='flag-5'>寄存器</b>詳解

    寄存器是什么?怎么操作寄存器點亮LED燈?

    寄存器,是集成電路中非常重要的一種存儲單元,通常由觸發(fā)組成。在集成電路設(shè)計中,寄存器可分為電路內(nèi)部使用的寄存器和充當(dāng)內(nèi)外部接口的寄存器這兩
    的頭像 發(fā)表于 07-21 16:59 ?3623次閱讀
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>點亮LED燈?

    寄存器寫入順序是否可能改變寄存器的行為?

    你好。eval board + steval來設(shè)置的步進(jìn)電機(jī)參數(shù)。它完美無瑕?,F(xiàn)在正在編寫Arduino代碼以獲得相同的控件。
    發(fā)表于 11-07 09:51

    寄存器與移位寄存器

    寄存器與移位寄存器 寄存器是用來寄存數(shù)碼的邏輯部件,所以必須具備接收和寄存數(shù)碼的功能。任何一種觸發(fā)
    發(fā)表于 03-12 15:19 ?59次下載

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

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內(nèi)的組成部分。寄存器是有限存貯容量
    發(fā)表于 03-08 14:26 ?2.2w次閱讀

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思 數(shù)據(jù)寄存器數(shù)據(jù)寄存器包括累加AX、基址寄存器BX、計數(shù)
    發(fā)表于 03-08 14:38 ?1.2w次閱讀

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

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    發(fā)表于 03-08 14:50 ?1.7w次閱讀

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實現(xiàn)。
    發(fā)表于 05-20 11:47 ?0次下載

    移位寄存器的原理

    移位寄存器按照不同的分類方法可以分為不同的類型。 如果按照移位寄存器的移位方向來進(jìn)行分類, 可以分為左移移位寄存器、移位寄存器和雙向移位寄存器
    發(fā)表于 07-15 09:38 ?7.4w次閱讀
    移位<b class='flag-5'>寄存器</b>的原理

    AD轉(zhuǎn)換寄存器設(shè)置

    AD轉(zhuǎn)換寄存器設(shè)置AD轉(zhuǎn)換寄存器設(shè)置AD轉(zhuǎn)換寄存器設(shè)置
    發(fā)表于 11-10 17:36 ?16次下載
    AD轉(zhuǎn)換<b class='flag-5'>寄存器</b>設(shè)置

    arduino i2c 如何寫16位寄存器_初學(xué)者單片機(jī)開發(fā)板如何選擇?學(xué)長為你推薦

    的開源電子原型平臺,1.價格便宜:相對其他開發(fā)板價格比較廉價,一塊開發(fā)板價錢只要十幾塊錢,某寶上有賣,2.使用簡單:使用Arduino你可以不了解其內(nèi)部硬件結(jié)構(gòu)和寄存器設(shè)置,僅僅知道單
    發(fā)表于 12-31 19:46 ?1次下載
    <b class='flag-5'>arduino</b> i2c 如何寫16位<b class='flag-5'>寄存器</b>_初學(xué)者單片機(jī)<b class='flag-5'>開發(fā)</b>板如何選擇?學(xué)長為你推薦

    ARM通用寄存器及狀態(tài)寄存器詳解

    筆者來聊聊ARM通用寄存器以及狀態(tài)寄存器的認(rèn)識與理解。
    的頭像 發(fā)表于 01-06 14:58 ?6405次閱讀

    Arduino 74hc595移位寄存器

    電子發(fā)燒友網(wǎng)站提供《Arduino 74hc595移位寄存器.zip》資料免費下載
    發(fā)表于 06-14 10:03 ?4次下載
    <b class='flag-5'>Arduino</b> 74hc595移位<b class='flag-5'>寄存器</b>

    寄存器開發(fā),HAL開發(fā)和LL開發(fā)的區(qū)別和參考代碼

    1,寄存器開發(fā)【難度值:難】寄存器開發(fā)是一種直接訪問微控制寄存器的編程方法,它提供了對硬件的極
    的頭像 發(fā)表于 11-17 08:00 ?1018次閱讀
    <b class='flag-5'>寄存器</b><b class='flag-5'>開發(fā)</b>,HAL<b class='flag-5'>開發(fā)</b>和LL<b class='flag-5'>開發(fā)</b>的區(qū)別和參考代碼

    寄存器分為基本寄存器和什么兩種

    寄存器是計算機(jī)中用于存儲數(shù)據(jù)的高速存儲單元,它們是CPU內(nèi)部的重要組成部分。寄存器可以分為基本寄存器和擴(kuò)展寄存器兩種類型。 一、基本寄存器
    的頭像 發(fā)表于 07-12 10:31 ?635次閱讀