STM32 부트로더는 어떻게 만들어지는가? 안녕하세요, 허블입니다. 오늘은 부트로더가 어떻게 만들어지는지 알아보겠습니다. 먼저 시작하기 앞서 부트로더가 무엇인지에 대해부터 알아보겠습니다. 부트로더란? 부트로더(Bootloader)는 애플리케이션(Application) 영역에서 동작이 되기 전 실행이 되는 부분으로 주로 애플리케이션 영역을 업데이트를 하기 위해서 사용이 됩니다. 펌웨어 업데이트를 하기 위해서는 Erase와 Write 하는 동작을 해야 합니다. 애플리케이션 영역만 존재한다고 가정할 경우 펌웨어 업데이트를 하기 위해 자신의 영역을 Erase를 하게 되면 애플리케이션 영역은 지워졌기 때문에 코드를 동작시킬 수 없습니다. 그렇기 때문에 부트로더의 기능이 필요하며 부트로더 영역에서 코드를 실행하여 애플리케이션 영역을 지우고 다운로드하게 됩니.. MCU 3년 전
[ST CubeMX] FreeRTOS 메시지큐(Message Queue) 예제 코드 사용법 안녕하세요, 허블입니다. 오늘은 메시지 큐에 대해서 알아볼까 합니다. 메시지 큐는 Task 간에 데이터를 전송할 때 필요한 개념입니다. 테스크와 테스크가 통신하기 위한 인터페이스로 보면 될듯합니다. 구조는 이런 식으로 되어있습니다. Task에서 Message Queue(메시지큐)를 Put을 하면 다른 쪽 Task에서 Get을 하여 받습니다. 이렇게 구성을 하면 좋은 점은 Task 간의 독립성을 유지할 수 있습니다. 전역 변수로 여기저기서 사용하게 되는 것보다 간결하게 만들 수 있고 독립성을 유지할 수 있기 때문에 모듈로 붙이기 편하다는 장점이 있습니다. 바로 코드를 통해서 만드는 방법도 있지만 CubeMX를 통해서 만드는 방법을 알아보도록 하겠습니다. Cubemx 설정 좌측 카테고리에서 FREERTOS를.. MCU 3년 전
적외선 수신기 기능 구현 적외선 수신기는 IR리시버(수신기)라고도 하는데 여기서 IR은Infrared의 약자로 적외선을 뜻합니다. 적외선 특성을 이용하기 때문에 사람이 볼 수 있는 가시광선 외 영역이라 눈으로 볼 수 없습니다. 적외선 통신은 UART나 I2C처럼 표준화된 통신이 아니라 제조사마다프로토콜이 다르며 보통 NEC 프로토콜을 사용합니다. 이번 수신기 구현에 사용될 리시버는 KSM-60으로 NEC 프로토콜을사용합니다. NEC 프로토콜 Start : 9ms Pulse 유지 후 4.5ms SpaceAddress : 8bit DataAddress Inverse : Address 보수 8bit DataCommand : 8bit DataCommand Inverse : Command 보수 8bit Data데이터 전송 시 보수(Inv.. MCU/STM32F429 4년 전
STM32 Semihosting(STM32F429I Discovery) 오늘 포스팅할 내용은 세미호스팅(Semihosting)에 대한 내용입니다. 세미호스팅은 ARM 타겟 보드에서 실행되는 코드가 디버거를 통해서 호스트 컴퓨터에 Input / output 기능을 통신하고 사용할 수 있도록 해주는 기능입니다. 즉, 시리얼을 안 뚫은 상태에서 디버거만을 이용해 C 라이브러리인 scanf와 printf를 사용할 수 있습니다. 개발 보드의 시리얼을 뚫기 전에 printf를 사용할 수 있는 것은 큰 장점인듯합니다. 그럼 설정 방법에 대해서 알아보도록 하겠습니다. Semihosting 설정 ST Link가 설정이 되어있어야 합니다. 프로젝트의 Option 메뉴를 클릭합니다. General Options에서 Library Configuration 탭에서 Semihosted와 Via se.. MCU/STM32F429 5년 전
STM32 타이머 제어하기(STM32F429I Discovery) STM32F429I Discovery를 이용해서 타이머를 제어하려고 합니다. CubeMX에서는 HAL_Delay라는 라이브러리 함수를 제공해 주는데요, 타이머를 이용하여 동일한 함수를 구현해보도록 하겠습니다. 함수를 구현하기 위해서는 HAL_Delay(1)에 해당하는 1ms를 타이머를 통해서 만들어야 합니다. CubeMX 설정 TIM2를 선택 후 Clock Source에서 Internal Clock을 설정합니다. Configuration 탭에서 TIM2를 클릭합니다. Prescaler는 분주비로 타이머 클럭을 나눠주는데 사용됩니다. Counter Period는 주기를 정하는데 사용됩니다. Prescaler와 Counter Period는 모두 0부터 시작하기 때문에 설정한 값에 -1을 해줍니다. 계산 방법.. MCU/STM32F429 5년 전
GPIO 입출력 제어하기(STM32F429I Discovery) STM32F429I Discovery 보드에 있는 User 버튼과 User LED를 제어를 해보려고 합니다. 소스 코드는 맨 아래를 확인하시면 됩니다. CubeMX 설정 USER LED인 LD3, LD3은 GPIO OUTPUT으로 설정되어 있습니다. PA0는 인터럽트로 설정이 되어있는데 Input으로 설정해도 되고 읽는데는 문제 없습니다. Configuration 탭에서 LED 핀의 설정입니다. 소스코드에는 어떻게 되어있는지 확인해보도록 하겠습니다. 생성된 코드 생성된 소스의 메인 함수의 MX_GPIO_Init();에 GPIO 설정을 볼 수 있습니다. 코드에 대해서 살펴보겠습니다. 123456789101112131415161718192021222324252627282930313233343536373839.. MCU/STM32F429 5년 전
CubeMX Setting 하기 CubeMX는 STmicro에서 제공해 주는 프로그램입니다. UI를 통해서 핀맵의 상태나 설정을 하여 코드를 생성을 해줍니다. CubeMX 없이 포팅을 했을 때는 호환성이 안맞는 부분이 있었는데 간단하게 코드를 생성해 주니 정말 편리한 것 같습니다. STM32CubeIDE라는 CubeMX와 TrueStudio가 하나로 되어있는 프로그램도 있는데 프로그램이 무거운 거 같아서 저는 CubeMX를 사용하고 있습니다. CubeMX URL : https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-.. MCU/STM32F429 5년 전
ATmega128 블루투스 제어(HC-06) 오늘은 ATmeaga128의 UART 통신을 이용해서 Bluetooth 제어하는 방법에 대해서 알아보려고 합니다. 사용할 모듈은 HC06으로 BT 버전은 2.0입니다. SSP(Simple Secure Pairing)을 지원하지 않기 때문에 PINCODE 방식의 Pairing을 지원하며 PINCODE의 초기 번호는 1234입니다. HC-06 이 모듈은 Power Level Class2를 지원한다고 합니다. 여기서 Class란 TX Power라고 생각하시면 됩니다. Class가 낮을수록 출력이 더 높으며 도달 거리도 더 길게 됩니다. Class1 ~ Class4까지 있는데 Class1은 최대 100m, Class3은 1m입니다. Class 스펙을 제대로 사용하기 위해선 두 기기가 모두 동일한 Class를 지.. MCU/AVR 5년 전
ATmega128 타이머를 이용한 DC모터 제어 오늘 포스팅할 내용은 ATmega128 타이머를 이용한 DC 모터 제어 방법입니다. 우선 모터를 제어하기 전에 PWM(Pulse Width Modulation)을 알아보겠습니다. PWM을 말 그대로 펄스폭 변조로 디지털 출력 핀을 사용하여 비례 제어 신호를 외부 장치에 적용하는데 사용되는 일반적인 방법입니다. 펄스폭을 조절하면 평균 전압을 제어를 할 수 있으며 이를 이용해 DC 모터에 속도를 조절할 수 있게 됩니다. 여기서 Duty라는 개념이 나오는데 한 주기 동안에 ON(High)이 되어 있는 시간 Duty라고 하며 Duty/Period의 비율을 Duty Ratio라고 합니다. Duty Ration = t1/T 타이머 카운터- 타이머 카운터는 펄스의 수를 카운터를 해주는 기능을 갖고 있습니다. 타이머는.. MCU/AVR 6년 전
ATmega128 Delay함수 사용 방법 오늘 포스팅할 내용은 ATmega128에서 Delay 함수 사용 방법입니다. Delay는 설정한 시간 동안 프로그램을 중지시키는 기능입니다. LED 제어, LCD 제어, DC 모터 제어 등 안 사용하는 곳이 없기 때문에 꼭 알아야 하는 함수입니다. Delay함수의 헤더는 하기 경로에 위치해 있습니다.C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util 먼저 Delay 함수를 사용하기 위해서는 헤더(util/delay.h)를 추가해야 합니다. 우선 예제를 통해서 알아보겠습니다. Delay 사용법 잘못된 예제 12345678910111213141516171819#include #include int .. MCU/AVR 6년 전