아두노 IDE 없이 열심히 아두노.

12922 단어 #Arduino
이 보도에 관하여
아두노 IDE는 없고 아두노 개발은
왜 그렇게 번거로운 일을 합니까?빈둥거리는 것 외에 다른 이유가 없다.
필요한 물건
이 문장과 같은 일을 하려면 다음과 같은 것이 필요하다.
* Arduino UNO Rev.3(Atmega 328P 탑재)
아마존에서 살 수 있어요.
탑재된 MCU가 Atmega328P가 아니라면 이 기사에 소개된 코드를 편집해야 한다.
  • PC(Ubuntu 20.04LTE 탑재)
    일반적으로 같은 방법이 통용된다고 생각하지만, 윈도와 맥은 환경 구축에 매우 힘들다.ubuntu라면 포장 관리자로부터 한꺼번에 받을 수 있습니다.
  • USB 케이블
    쓰기에 사용됩니다.
  • 개발 환경 설정
    Ubuntu20.04LTE 환경을 전제로 대화를 나눈다.
    우선 다음 개발에 필요한 도구를 준비하세요.
  • gcc-avr
    avr의 교차 컴파일러입니다.
  • avr-libc
    AVR의 C 라이브러리입니다.
  • avrdude
    는 AVR의 Intel Hex 파일에 대한 쓰기 응용 프로그램입니다.
  • 아래의 지령에 따라 단번에 얻을 수 있다.
    sudo apt install gcc-avr avr-libc avrdude
    빌드 디렉토리 생성하기
    다음과 같이 구성 디렉토리를 생성합니다.

    Makefile 쓰기
    빌드 단계에서는 다음 단계를 수행합니다.

    이 구축 절차를make 파일로 수정할 때 다음과 같습니다.
    #!/usr/bin/make -f
    
    # setting output file
    OUT = build/Program.ihex
    
    # compiler setting
    CC = avr-gcc
    CFILES = $(wildcard src/*.c)
    CPU_FREQ = 16000000
    CFLAGS = -c -std=gnu99 -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p
    
    # linker setting
    LD = avr-gcc
    OBJFILES = $(addprefix build/, $(notdir $(CFILES:.c=.o)))
    LDFLAGS = -Os -mmcu=atmega328p -ffunction-sections -fdata-sections -Wl,--gc-sections
    
    #  objcopy setting
    OBJCOPY = avr-objcopy
    OBJFLAGS = -O ihex -R .eeprom 
    
    # avrdude setting
    AVRDUDE = avrdude
    PORT = /dev/ttyACM0
    AVRDUDECONF = ./conf/avrdude.conf
    AVRDUDEFLAGS = -C $(AVRDUDECONF) -v -V -p atmega328p -carduino -b 115200 -P $(PORT) -D
    
    # Build Step Setting
    all : $(OUT)
    
    $(OUT) : $(OUT:.ihex=.elf)
        $(OBJCOPY) $(OBJFLAGS) $^ $@
    
    $(OUT:.ihex=.elf) : $(OBJFILES)
        $(LD) $(LDFLAGS) $^ -o $@
    
    build/%.o : src/%.c
        $(CC) $(CFLAGS) -DF_CPU=$(CPU_FREQ) $^ -o $@
    
    upload : $(OUT)
        $(AVRDUDE) $(AVRDUDEFLAGS) -U flash:w:$^:i
    
    clean :
        rm -rf build/*.o
        rm -rf build/*.ihex
        rm -rf build/*.elf
    
    .PHONY : all upload clean
    
    이makefile은 src/디렉터리 이하의 * 입니다.c 파일을 추출하여 구축합니다.
    구축 결과물은build/디렉터리에 있습니다.
    구축하려면 다음 명령을 실행하십시오.
    make all
    
    makefile의 다음 변수 값을 고쳐서 구축할 때의 설정을 설정할 수 있습니다.
    변수 이름
    컨텐트 설정
    CPU_FREQ
    CPU 작업 빈도(기본값은 16MHz)
    PORT
    Arduino의 포트 연결
    구축된 파일을 Arduino에 쓰고 싶을 때
    make upload
    
    집행하다.
    빌드 결과물을 삭제하려는 경우
    make clean
    
    build/디렉터리의 구축 결과물을 삭제합니다.
    avrdude 설정
    avrdude의 설정은 conf/avrdude입니다.conf 파일에 씁니다.
    avrdude.conf의 학습은 매우 번거롭기 때문에 Arduino IDE의 설정을 참고해야 합니다.
    Arduino IDE의 avrdude 설정은 Hardware/tools/avr/etc에 있습니다.
    같은 물건도 Giithub에 있습니다.
    쓰기를 수행하려면 Serial 포트에 대한 액세스 제한을 변경해야 합니다.
    쓰기 전에 다음 명령을 실행하십시오.
    sudo chmod a+rw /dev/ttyACM0
    
    환경에 따라 ttyACM0은 때로는 ttyACM1, 때로는 ttyACM2입니다.
    코드를 쓰다
    src/Main.c에 코드를 쓰세요.
    우리 삽입식 엔지니어에게 익숙한 요새를 만들자.
    우선 아두노의 회로도를 보고 어떤 트랙터가 보드에 연결된 LED에 연결되었는지 조사한다.
    다음 링크에서 Arduino의 회로도를 볼 수 있습니다.

    PIN13이 보드의 LED에 연결되어 있음을 알 수 있습니다.13PIN을 하이라이트로 설정하면 LED가 빛을 낸다.13PIN을 거슬러 올라가서 어디에 연결하면...

    PB5바늘인 거 알아요.
    다음은 Atmega238p의 수첩을 찾아보겠습니다.
    The DDxn bit in the DDRx Register selects the direction of this pin. If DDxn is written logic one, Pxn is configured as an output pin. If DDxn is written logic zero, Pxn is configured as an input pin.
    그 밖에
    If PORTxn is written logic one when the pin is configured as an output pin, the port pin is driven high (one). If PORTxn is written logic zero when the pin is configured as an output pin, the port pin is driven low (zero).
    이런 견해가 있다.
    그래서 src/Main.c에 다음 코드를 쓰십시오.
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define MS_DELAY 500
    
    void setup(void);
    void loop(void);
    
    int main(void)
    {
        setup();
    
        while (1)
        {
            loop();
        }
    }
    
    void setup(void)
    {
        /* configure PB5 pin as an output pin */
        DDRB |= _BV(DDB5);
    }
    
    void loop(void)
    {
        /* set PB5 pin high */
        PORTB |= _BV(PORTB5);
    
        /*Wait 500 ms */
        _delay_ms(MS_DELAY);
    
        /* set PB5 pin low */
        PORTB &= ~_BV(PORTB5);
    
        /*Wait 500 ms */
        _delay_ms(MS_DELAY);
    
        /* set PB5 pin high */
        PORTB |= _BV(PORTB5);
    
        /*Wait 500 ms */
        _delay_ms(MS_DELAY);
    
        /* set PB5 pin low */
        PORTB &= ~_BV(PORTB5);
    
        /*Wait 500 ms */
        _delay_ms(MS_DELAY);
    
        /* set PB5 pin high */
        PORTB |= _BV(PORTB5);
    
        /*Wait 2000 ms */
        _delay_ms(MS_DELAY);
        _delay_ms(MS_DELAY);
        _delay_ms(MS_DELAY);
        _delay_ms(MS_DELAY);
    
        /* set PB5 pin low */
        PORTB &= ~_BV(PORTB5);
    
        /*Wait 500 ms */
        _delay_ms(MS_DELAY);
    }
    
    한 다스
    make all
    
    Arduino를 컴퓨터에 연결
    make upload
    
    만들다
    이렇게 하면 아래와 같은 LED가 깜박거린다.
    Giithub 창고
    다음 창고에서 본문에 사용된 코드를 얻을 수 있습니다.
    참고 문헌
  • 아두노 본가
  • MICROCHIP Technology - ATmega328P
  • GNU.org - Simple Makefile(GNU make)
  • Introduction to Bare Metal Programming in Arduino Uno
  • 좋은 웹페이지 즐겨찾기