반응형 전자/임베디드 시스템164 키보드 회로 키보드 또는 키패드는 다음과 같이 매트릭스 구조를 가진다. 위에서 C1~4와 R1~4는 모두 MCU의 GPIO에 연결한다. C1~C4는 pull-up input으로 설정한다. 다음과 같은 순서로 키보드 값을 읽는다. (1) R2~R4는 pull-pu input으로 설정하고 R1은 output으로 설정하고 Low를 출력한다. (2) C1~4의 값을 읽어서 1번째 줄의 키값을 알수 있다. (3) R1, R3~R4는 pull-pu input으로 설정하고 R2은 output으로 설정하고 Low를 출력한다. (4) C1~4의 값을 읽어서 2번째 줄의 키값을 알수 있다. (5) R1~2, R4는 pull-pu input으로 설정하고 R3은 output으로 설정하고 Low를 출력한다. (6) C1~4의 값을 읽어서 .. 2022. 5. 25. STM32CubeIDE 디버깅 중 Watchdog 중지 STM32CubeIDE에서 Watchdog이 활성화되면 디버깅 모드에서 잠시 실행을 정지했을 때 Watchdog이 동작하여 정상적으로 디버깅이 안된다. 디버깅 중 Watchdog을 중지시키기 위해서는 다음과 같이 설정한다. Project - Propterites 메뉴를 선택하면 다음과 같은 창이 뜬다. Run/Debug Settings에서 Edit을 선택한다. 아래와 같이 Suspend watchdog counters while halted를 Enable로 한다. 이렇게 하면 디버깅 중 실행을 정지했을 때 Watchdog 카운터도 정지한다. 2022. 5. 21. MCU 리셋 문제 해결방법 보드 시험 중 MCU가 리셋되거나 죽는 원인은 다음과 같은 것들이 있다. Firmware F/W 오류로 Watchdog 발생 영으로 나눔 Memory Alignment가 맞지 않음 Stack overflow 발생 배열의 인덱스가 메모리 범위를 벗어나 Hard fault 발생 체크썸을 통과한 에러 통신 패킷에 의한 이상동작과 리셋 Hardware 전압 불안정 전자파 노이즈 유입 MCU 모드 설정핀 플로팅 고온 ☞ Hardfault 해결방법 2022. 5. 18. STM32 5V Tolerant Pin (FT) STM32는 +3.3V에서 동작한다. 그래서, 기본적으로 입력 로직의 전압은 +3.3V이다. 하지만, 핀 중에서 5V Tolerant Pin (FT, Five-volt Tolerant)은 +5V 로직을 입력 받을 수 있다. 다음과 같이 FT 핀은 VDD+4.0V로 +3.3V 전원을 사용한다면 최대 +7.3V까지 입력 받을 수 있다. FT 핀은 데이터시트의 핀 정의에 FT라고 표기되어 있다. 2022. 5. 5. STM32L1 시리즈 STM32L1 시리즈는 Cortex-M3 코어를 사용하는 저전력 MCU이다. 클럭은 32MHz이다. STM32L1 시리즈에는 STM32L100, STM32L151, STM32L152, STM32L162가 있다. STM32L100 시리즈는 다음과 같다. STM32L151/152 시리즈는 다음과 같다. STM32L1 시리즈는 STM32F 시리즈와 핀이 호환된다. 2022. 5. 3. STM32 벡터 테이블 구조 STM32 중 M3 코어를 사용하는 MCU의 벡터 테이블은 다음과 같다. 주소 0x0000에는 초기 스택 포인터값이 저장된다. MCU가 리셋되면 이 주소를 스택 포인터 값으로 사용한다. 주소 0x0004에는 Reset_Hanlder 함수의 주소가 저장된다. MCU가 리셋되면 Reset_Hanlder 함수가 가장 먼저 실행된다. 컴파일러 초기 설정을 바꾸지 않았다면 Initial SP Value 주소는 Flash 메모리 시작 위치인 0x08000000이고 Reset 주소는 0x08000004이다. STM32CubeIDE에서는 "startup_stm32***.s" 파일에 다음과 같이 벡터 테이블이 정의되어 있다. 위 코드에서 Initial SP value의 값은 _estack이다. _estack은 STM32.. 2022. 4. 11. STM32의 벡터 테이블 주소 STM32의 벡터 테이블 주소의 LSB는 항상 1이다. 벡터 테이블에서 주소값 0x08001b01는 0x08001b00을 의미한다. 2022. 4. 11. STM32F0 시리즈 종류 STM32 STM32는 크게 저전력용 L 시리즈와 일반적 용도의 F 시리즈가 있다. F 시리즈 F 시리즈는 다시 Mainstream인 F0, F1, F3와 High Performance인 F2, F4, F7이 있다. F0 시리즈 F0 시리즈는 다시 다음과 같이 0x0, 0x1, 0x2, 0x8 시리즈가 있다. F0x0 시리즈 STM32F0x0는 Vaule line으로 가장 저렴한 모델로 다음과 같은 종류가 있다. 2022. 4. 10. 라즈베리파이 상태 LED 라즈베리파의 상태 LED의 의미는 다음과 같다. LED 종류 색 의미 OK/ACT 초록 SD 카드 동작 PWR 빨강 전원 상태 FDX 초록 LAN 연결됨 LNK 초록 LAN 동작 10M/100 노랑 100M LAN 연결됨 ☞ 라즈베리파이 PWR LED 동작 2022. 4. 7. TMS320F28335 특성 TI의 TMS320F28335 특성은 다음과 같다. Clock 150MHz Flash 256k x 16 RAM 34k x 16 PWM 18 HRPWM 6 Encoder Input 2 32bit Timer 8 16bi Timer 9 CAN 2 UART 3 SPI 3 I2C 1 ADC 12bit 16channel 2022. 4. 3. STM32L0 시리즈 종류 STM32 STM32는 크게 저전력용 L 시리즈와 일반적 용도의 F 시리즈가 있다. L 시리즈 L 시리즈는 다시 L0, L1, L4, L4+, L5 등의 시리즈가 있다. L0 시리즈 L0 시리즈는 다시 다음과 같이 0x0, 0x1, 0x2, 0x3 시리즈가 있다. L0x0 시리즈 STM32L0x0는 Value line으로 가장 저렴한 모델로 다음과 같은 종류가 있다. 2022. 4. 3. 라즈베리 파이 4핀 커넥터 용도 라즈베리 파이 4B 또는 3B+에는 아래 사진과 같이 보드 위에 4핀 커넥터가 있다. 4핀 커넥터는 이더넷과 연결되어 있다. 4핀 커넥터는 아래의 PoE HAT에서 사용하다. PoE HAT를 사용하면 PoE (Power over Ethernet) 네트워크를 통해 전원을 공급받을 수 있다. 2022. 4. 2. SPI/I2C - UART 변환 IC MAX14830는 Maxim에서 나오는 4 채널 SPI/I2C - UART 변환 IC이다. MAX14830의 특성은 다음과 같다. 종류 파라미터 UART 채널 4채널 FIFO 128 byte 최대 UART 속도 12/24Mbps SPI 클럭 26MHz I2C 클럭 1MHz MAX14830의 내부 구조는 다음과 같다. SPI 통신 파형은 다음과 같다. FIFO 데이터는 Burst Read/Write가 가능하다. 2022. 4. 1. 라즈베리 파이 SPI 속도 라즈베리 파이에서 SPI의 최대 속도는 코어 클럭에서 2, 4, 8, 16, 32 등으로 나눈 값이다. 코어 클럭은 250Mhz이다. 라즈베리 파이의 SPI 클럭은 다음과 같다. SPI의 최대 클럭은 125MHz가 가능하지만 에러 없이 통신이 가능한지는 주위 상황에 따라 달라진다. 특정 클럭 속도로 사용 가능한지는 실제로 실험을 해봐야 한다. 2022. 4. 1. 오렌지 파이 개요 오렌지 파이(Orange Pi)는 라즈베리 파이와 비슷한 중국산 싱글보드 컴퓨터이다. 현재 가장 최신 버전은 Orange Pi 4 LTS이다. 2022. 3. 31. Task Overrun과 실행시간 Task Overrun은 인터럽터에서 태스크가 실행될 때 태스크 실행시간이 인터럽터 주기를 넘어가는 것을 의미한다. 1초에 인터럽터를 100번 실행하는 프로그램이 있을 때 Task Overrun이 발생하면 태스크가 한번 씩 빠지면서 1초에 100번 미만으로 실행되게 된다. 5ms 미만의 태스크 5ms 주기로 실행되는 인터럽터가 있을 때 다음 그림과 같이 나타낼 수 있다. 만약 INT#1보다 우선순위가 높은 태스크 INT#2가 샐행된다면 다음 그림과 같다. 위 그림에서 INT#1 실행 주기가 5ms에서 7ms로 한번 늘어나고 다음 인터럽터 주기는 3ms로 줄어든다. 하지만 전체적으로 실행되는 총 횟수는 변하지 않는다. INT#2 실행시간이 5ms 미만일 때 INT#1의 실행 주기는 0~10ms로 변동될 수.. 2022. 3. 22. MPU-6050 I2C 통신 자이로/가속도 센서 MPU-6050의 I2C 통신 최대 속도는 400kHz이다. MPU-6050의 I2C 통신 프레임은 다음과 같다. 6바이트을 Burst로 읽을 때는 84비트가 필요하고 통신시간은 400kHz일 때 0.21ms이다. ☞ STM32에서 MPU-6050 사용하기 2022. 3. 22. STM32에서 ADXL345 사용하기 ADXL345는 3축 가속도 IC이다. ADXL345의 I2C 통신 레지스터는 다음과 같다. 0번지의 DEVID 값은 항상 0xE5이다. I2C 주소는 ALT ADDRESS 핀이 High이면 0x1D이고 Low이면 0x53이다. 프로그램 코드 STM32에서 ADXL345를 사용하는 코드는 다음과 같다. // 초기화 b = 0; HAL_I2C_Mem_Write(&hi2c1, ADXL345_ADDRESS 2022. 3. 4. STM32 SPI 통신 절차 STM32의 SPI 통신 모듈 구조는 다음과 같다. Tx Buffer에 데이터를 쓰면 먼저 Shift register로 이동한 후 한 비트씩 전송된다. DR 레지스터에 데이터를 쓰면 Tx buffer에 저장되고 DR 레지스터를 읽으면 Tx buffer 데이터가 읽힌다. SPI 마스터로 통신하는 절차 1. 전송 절차 1) DR에 전송할 데이터를 쓴다. (Tx buffer에 저장된다.) 2) Tx buffer가 비면 SR의 TXE가 1이 된다. (Shift register로 전송될 때) CR2의 TXEIE이 1로 설정되어 있으면 인터럽터가 발생한다. 2. 수신 절차 1) 수신이 완료되면 Shift register의 데이터가 Rx buffer로 이동된다. 2) 이 때 SR의 RXNE 비트가 1이 된다. 3) .. 2022. 2. 24. Eclipse에서 Perspective 자동 전환 Eclipse에서 디버깅 모드에 진입하면 Perspective를 자동으로 전환되게 할수 있다. Window - Preferences 메뉴에서 Run/Debug에서 Perpectives를 선택하면 다음과 같은 창이 뜬다. 여기서 Always, Never, Prompt 중 하나를 선택한다. 2022. 2. 24. STM32CubeIDE의 metadata 폴더 이동 이클립스 기반인 STM32CubeIDE에서 프로젝트 폴더를 이동시키면 .metadata 폴더의 .ide.log 파일은 이동되지 않는다. 이 파일을 지워도 STM32CubeIDE를 실행시키면 자동으로 다시 만들어진다. 이 파일을 새 폴더로 이동시킬려면 먼저 새 폴더의 .metadata 폴더의 .log4j.xml 파일을 텍스트 편집기로 연다. .log4j.xml 파일에서 다음과 같은 문장에서 폴더 위치를 수정한다. 2022. 1. 10. Nested Interrupt 뜻 인터럽터 실행 중 다른 인터럽터가 발생했을 때 그 인터럽터를 실행하는 것을 Nested Interrupt라고 한다. Nested Interrupt는 우선순위가 있다. 우선순위가 낮은 인터럽터가 실행 중 우선순위가 높은 인터럽터가 발생하면 실행하고 우선순위가 낮은 인터럽터가 발생하면 실행하지 않는다. STM32와 같이 MCU 하드웨어에서 Nested Interrupt가 지원될 때는 우선순위만 지정해 주면 된다. AVR과 같이 Nested Interrupt가 지원하지 않을 때는 소프트웨어로 구현해야 한다. Nested Interrupt를 소프트웨어로 구현하는 것은 조금 까다롭고 잘못 설정하면 버그가 발생할 가능성이 높다. 하지만 다수의 인터럽터를 사용하기 위해서는 Nested Interrupt를 설정해야지만.. 2021. 12. 26. STM32 GPIO 레지스터 STM32의 GPIO 레지스터는 다음과 같다. GPIOx_MODER : Input, Output, Alternate, Analog GPIOx_OTYPER : Push-pull, Open-drain GPIOx_OSPEEDR : Low, Medium, High Speed GPIOx_PUPDR : Pull-up, Pull-down GPIOx_IDR : Input data GPIOx_ODR : Output data GPIOx_BSRR : Reset, Set output data GPIOx_LCKR : Lock config GPIOx_AFRL : Alernate function low register GPIOx_AFRH : Alernate function high register GPIOx_BRR : Reset .. 2021. 11. 10. STM32 메모리 Remap STM32F030의 메모리 구조는 다음과 같다. 0x0000000~0x00040000 범위는 Flash 또는 SRAM 또는 시스템 메모리가 될 수 있다. 0x0000000~0x00040000 주소가 Flash로 Remap 되어 있다면 0x00000000~ 주소와 0x08000000~ 주소는 동일한 주소가 된다. SRAM으로 Remap 되어 있으면 0x00000000~ 주소와 0x00040000~ 주소는 동일한 주소가 된다. Flash 또는 SRAM 또는 시스템 메모리는 BOOT 핀과 BOOT 비트을 통해 설정할 수 있다. SYSCFG 레지스터의 MEM_MODE 비트를 통해 설정할 수도 있다. 2021. 11. 3. STM32F0 벡터 테이블 STM32F1이나 STM32L1에는 SCB->VTOR에 벡터 테이블의 주소를 지정할 수 있다. SCB->VTOR 값에 따라 벡터 테이블 위치를 변경할 수 있다. 하지만, STM32F0에는 벡터 테이블 주소를 지정하는 기능이 없다. STM32F0에서는 벡터 테이블 주소를 지정할 수 없지만 벡터 테이블을 RAM으로 지정할 수는 있다. 벡터 테이블을 RAM에 복사한 후 SYSCFG의 다음 비트를 11로 설정하면 벡터 테이블이 RAM으로 설정된다. 2021. 11. 3. 라즈베리파이 PWR LED 라즈베리파이의 PWR LED (빨강)는 전압 상태를 나타낸다. MODEL A와 B에서는 PWR LED가 +3.3V에 직접 연결되어 있다. MODEL B+부터는 CPU가 +5V 전압을 센싱하여 전압이 정상이면 PWR LED이 항상켜지고 전압이 4.65V 이하가 되면 PWR LED가 꺼진다. 전압이 4.63V 이하가 되면 PWR LED가 깜박이는 모델도 있다. 라즈베리파이는 생각보다 전류를 많이 사용한다. 라즈베리파이를 컴퓨터의 일반 USB에 꽂으면 전류부족으로 PWR LED가 켜지지 않을수도 있다. 2021. 9. 28. STM32F405 사양 STM32F405 스펙은 다음과 같다. 종류 특성 Core Cortex-M4 FPU Yes 클럭 168MHz 플래시 512 ~ 1024kB RAM 192kB CAN 2 ea UART 6 ea SPI 3 ea I2C 3 ea 타이머 17 ea 패캐지 64-pin LQFP 100-pin LQFP 144-pin LQFP 90-pin WLCSP 2021. 9. 27. 르네사스의 SH-2 시리즈 르네사스(Renesas)의 SH-2 (SuperH)시리즈는 다음과 같다. SH7040과 SH7010 시리즈는 현재 생산은 하지만 사용을 권장하지 않는다. SH7044는 Flash 256kB, 클럭 28MHz의 MCU이다. SH7144는 Flash 256kB, 클럭 50MHz의 MCU이다. SH는 32비트 프로세서지만 16비트 명령어를 사용하여 저가이면서 더 작은 메모리를 사용하는 장점이 있다. SH-5는 16비트와 32비트 명령어를 모두 사용한다. 2021. 9. 26. STM32CubeIDE Flash/RAM 메모리 용량 STM32CubeIDE에서 컴파일했을 때 사용된 Flash/RAM 메모리 용량은 다음과 같이 Build Analyzer에서 확인할 수 있다. Flash/RAM 용량이 Size를 넘어가면 컴파일 할 때 에러가 뜬다. Size는 STM32*_FLASH.ld 파일에서 설정한 값이다. 2021. 9. 12. STM32CubeIDE 최적화 STM32CubeIDE에서 프로젝트 이름에서 우클릭하여 다음과 같이 프로젝트 전체의 최적화 레벨을 조절할 수 있다. 파일별로 최적화 레벨을 조절하기 위해서는 다음과 같이 소스파일에서 우클릭하여 설정한다. 2021. 9. 12. 이전 1 2 3 4 5 6 다음 반응형