본문 바로가기

Firmware

(38)
STM32 Lepton 2.5 Project -1 STM32를 활용해 Lepton 2.5를 구동해보자 Lepton 2.5를 출력하기 위한 설계는 다음과 같다. 1. MCU : STM32F407VET 2. Firmware Package Version : FW_F4 V1.26.1 FREERTOS를 사용 할 것이며 Task는 총 4개로 구성되어 있다. 1. Console Task UART로 터미널을 통해 외부 명령어를 받아 처리한다. 2. Ethernet Task TCP/IP Client로 동작하며 외부 명령어를 받아 처리한다. 3. TempDetection Task 온도 감지 중 뜨거운 열원이 발생하면 이벤트를 발생한다. (감시 Task를 넣기 위해 일부러 추가) 4. Lepton Task Lepton 설정 및 Video Frame을 뽑는다. MCU, 펌웨..
NanoPB - Stm32 NanoPb를 STM32에 적용시켜보자 NanoPb란? -> Protobuf를 Embedded System에 적용하기 위해 C기반 경량화로 나온 프로토콜을 NanoPb라고 한다. NanoPb 순서 1. ~~~.proto 파일에 인코딩 하고 싶은 데이터,구조체등을 정의한다. 2. ~~~.proto 파일을 컴파일 한다. (ex: protoc --nanopb_out=/SaveDirectory ~~~proto) 3. 컴파일이 정상적으로 되면 Save Directory에 ~~~.pb.c, ~~~.pb.h 파일이 나온다. 4. ~~~.pb.c, ~~~.pb.h 파일 및 Common protobuf.c,h 를 stm32에 넣고 컴파일을 돌린다. 5. Test 코드 작성후 검증 순서에 들어가기 전에 NanoPb를 컴파..
STM32 FREERTOS Mail Queue 구현 MailQueue 기본 Function 구현 (CMSIS-RTOS-V1) MailQueue는 Task끼리 데이터를 주고받기 위해 사용하는 자료구조이다. 동작: STM32F407Discvery로 구현 하였다. Task의 우선순위는 똑같이 Normal 1. sendMailTask는 val1, val2, val3에 0x01, 0x02, 0x03을 쓴다. 2. Mailput을 호출하여 전송 후 osDelay를 호출하여 Context Switching을 한다. 3. recvMailTask은 Block 상태에서 해제되어 val1, val2, val3 이 0x01,0x02,0x03이 맞는지 확인한다. 4. 맞으면 RED LED를 Blink 하고 틀리면 Blue LED를 Set 한다. (DEBUG 모드에서 PRINTF..
STM32 SPI ErrorCallback 처리 SPI Slave 동작 중에 가끔 HAL_SPI_ErrorCallback으로 진입하고 SPI는 멈추는 현상이 있다. 먼저 개발 스펙은 다음과 같다. Develop Toolchain Toolchain / IDE: STM32CubeIDE Firmware Package Name and Version: STM32Cube FW_L1 V1.10.0 SPI Settings Mode: FULL-Duplex Slave Basic Parameters: Frame Format Motorola Data Size 8 Bits First Bit MSB First Clock Parameters: Frequency 1MHz Clock Polarity (CPOL) Low Clock Phase (CPHA) 2 Edge * CRC Cal..
STM32 SPI Slave 동작 시 데이터 송수신 이상 현상 SPI Slave 동작 중 데이터를 receive 받을 때 받는 텀이 매우 빠르면 데이터가 밀리거나 동작이 안되는 현상이 있다. 개발 스펙은 다음과 같다. Develop Toolchain Toolchain / IDE: STM32CubeIDE Firmware Package Name and Version: STM32Cube FW_L1 V1.10.0 SPI Settings Mode: FULL-Duplex Slave Basic Parameters: Frame Format Motorola Data Size 8 Bits First Bit MSB First Clock Parameters: Frequency 1MHz Clock Polarity (CPOL) Low Clock Phase (CPHA) 2 Edge * CRC..
STM32 SPI Slave로 Interrupt DMA Transmit/Receive 구현하기 STM32cubeMX : 5.6.1 STM32cubeIDE : 1.3.1 Code Lib Version: STM32Cube_FW_L1_V1.9.0 MCU:STM32L151VET SPI는 양방향 Serial 통신으로 Master or Slave로 동작을 할 수 있다. 이번에 Slave로 구현을 해보자 CubeMX 설정 Mode를 Slave로 설정 Hardware NSS Signal은 Hardware NSS Input Signal로 설정한다. 다음은 DMA 및 Interrupt를 설정한다. DMA란 Direct Memory Acess로 DMA를 OFF 할 경우 MCU에서 SPI통신을 할 때 다 Adminstrate를 해 줘야 하지만 DMA로 연결해 놓을 경우 Hardware 단에서 관리해 하므로 Applic..
STM32 Bootloader 메뉴 FLASH_If_WriteProtectionConfig 문제 cubeMX : 5.6.1 cubeIDE : 1.3.1 Code Lib Version : STM32Cube_FW_F1_V1.8.0 MCU:STM32F103VBTx Enable the write protection 을 실행 시 Lock 이 이상하게 안 걸리는 문제가 있는데 예제가 잘못되어 있다. 우선, 4번을 눌렀을 시 protection 기능이 동작 하는데 예제에 있는 코드를 FlashProtection 함수로 정리 하였다. void FlashProtection(void) { if (Flash_Protection != FLASHIF_PROTECTION_NONE) { /* Disable the write protection */ if (FLASH_If_WriteProtectionConfig(OB_WRPST..
STM32 IAP (Ymodem 프로토콜) Bootloader - 2 cubeMX : 5.6.1 cubeIDE : 1.3.1 Code Lib Version : STM32Cube_FW_F1_V1.8.0 MCU:STM32F103VBTx https://kjt9109.tistory.com/entry/STM32-IAP-Ymodem-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-Bootloader-1 의 이어서 작업.. 이전작업에서 Bootloader 코드를 만들었으므로 이번에는 Application 코드를 만들어 본다. 기존의 메모리를 확인해보면 Bootloader 코드는 0x0800 0000에 올라가 있고 Application Code는 0x0800 4000 에 올리기로 했다. Application은 임의의 프로젝트로 만든다 이때 Application은 코드가..