본문 바로가기

MCU 제어

(11)
[STM32] External Interrupt(외부인터럽트) 인터럽트란? https://how-to-make-a-quadcopter.tistory.com/13 인터럽트(Interrupt) 방식 폴링 방식은 CPU의 효율이 떨어지는 것과 동시에 여러 작업이 진행될 때 하나의 작업이 실행이 지연되거나 실행할 수 없는 단점이 있다고 했다. 이러한 문제점을 해결할 수 있는 방식 중 하나가 � how-to-make-a-quadcopter.tistory.com 쿼드콥터의 항공등을 개발하기 위해 외부 인터럽트를 사용할 것이다. 항공등은 주로 기체의 앞뒤방향이나 어두운 곳에서의 위치을 표시하기위해 사용한다. 드론에 장착한 스위치를 이용하여 항공등의 점멸 속도를 조절하거나 On/Off하려한다. 이 스위치는 주기적으로 계산해야하는 값들(PID계산, 라즈베리파이와 통신)들과는 좀 다..
[STM32]PWM을 이용하여 BLDC 모터 구동하기 BLCD모터는 FC에서 작동시키는게 아니라 FC에서 PWM신호를 받은 ESC가 작동시킨다. 그렇다면 어떻게 ESC에게 PWM신호를 줄 수 있을까? Timer를 이용하면 된다. Cube Mx 설정부터 알아보자. 일단 Timer는 PWM신호를 발생시킬 수 있는 타이머로 설정해야된다. TIM6, TIM7은 Basic Timer이므로 PWM을 발생시킬 수 없다. 나는 고급 타이머인 TIM1번을 선택했다. Slave mode와 Trigger Source는 Disable해두자. 사실 나도 자세히 어떤건지 몰라서 나중에 쓸일이 있으면 설명해보겠다. Clock source는 APB 버스를 통한 내부 클럭을 사용할 것이므로 Internal Clock으로 설정해준다. 외부클럭으로 설정하면 실제 외부핀에서 클럭을 받아 AP..
[STM32] Basic Timer Basic Timer를 이용해 1초에 한 번씩 UART로 문자열 출력하기 드론을 개발할 때, 일정시간마다 자세센서의 값을 읽어오거나 PID계산을 해야한다. 어떻게 시간을 잴 수 있을까? Basic Timer를 이용하면 된다. stm32의 타이머 종류에는 크게 Advanced-control timer, General purpose timer, Basic Timer가 있다. 오늘은 DAC 트리거 및 시간 기반 타이머로 사용되는 Basic Timer를 사용해보겠다. 위 데이터 시트를 보면 Basic Timer는 TIM6, TIM7으로 사용할 수 있다는걸 알 수 있다. 그리고 사용하는 클럭을 알아야한다. TIM6는 APB1 timer clock을 사용하고 Cube MX 툴에서 108MHz라는 걸 알 수 있다. ..
[STM32]UART 인터럽트 송수신 실습 폴링 방식의 단점은 개념 카테고리에서 설명했었다. 그렇다면 인터럽트로 데이터를 수신하고 받은 데이터를 PC에 출력하는 프로그램을 작성해보자. 먼저, Cube Mx에서는 usart1을 비동기로 활성화 해주고 Global interrupt를 enable해줘야한다. 우리가 알아야하는 함수는 3가지다. 1. HAL_UART_Receive_IT() - UART 수신 인터럽트를 설정하는 함수다. 2. void USART1_IRQHandler(void) - uart1번을 사용한다고 했을 때, 수신인터럽트가 발생하면 이 함수로 이동하여 IRQ_Handler를 실행하고 HAL_UART_RxCpltCallback()으로 이동한다. 3. HAL_UART_RxCpltCallback() - 결론적으로 이 함수를 호출하므로, 인..
Cube MX란? Cube MX는 ST사의 MCU를 GUI를 통해 타이머, 통신(Uart, I2C, SPI), 인터럽트, DMA, GPIO 등의 기본적인 설정을 하면 자동으로 코드를 생성해주는 툴이다. 그 외에도 MCU의 핀 배열이나 동작 클럭을 확인할 수 있다.
DMA 방식 왜 DMA를 사용할까? 폴링은 프로그램에 의한 입출력 방식이여서 CPU가 계속 주변장치를 감시하기 때문에 CPU의 효율이 떨어진다고 했다. 이런 점을 개선하기 위해 CPU개입없이 주변장치와 상호작용하는 DMA(Direct Memory Access)가 개발되었다. 그럼 CPU개입이 적은 인터럽트를 사용하면 되지 않을까? 인터럽트를 사용하더라도 여전히 CPU는 데이터 전송을 하기위해 개입하게 되고, 입출력하는 시간이 길어지게 되면 CPU는 입출력하는 동안 다른 일을 못하게 된다. DMA 과정 그럼 CPU는 무엇을 하면 될까? CPU는 DMAC(DMA controller)에게 입출력 관련 정보만 주고 다른일을 계속 하면된다. 입출력 정보에는 뭐가 있을까? CPU는 DMAC에게 어떤 source를 보내는지, 목..
인터럽트(Interrupt) 방식 폴링 방식은 CPU의 효율이 떨어지는 것과 동시에 여러 작업이 진행될 때 하나의 작업이 실행이 지연되거나 실행할 수 없는 단점이 있다고 했다. 이러한 문제점을 해결할 수 있는 방식 중 하나가 인터럽트 방식이다. main문을 실행하고 있는 도중에 입출력 장치에서 필요할 때 마다 즉각적으로 CPU에게 인터럽트 신호를 전송하게 된다. 해당 인터럽트가 요청한 작업을 실행하기 위해 하고있는 동작을 멈추고 ISR(인터럽트 처리 루틴)으로 이동한다. ISR이 완료되면 CPU는 수행을 멈춘 곳으로 되돌아가 중지된 작업을 계속한다. 인터럽트 처리 과정 평소에는 노란색 LED와 파란색 LED를 번갈아가며 1초마다 깜빡이다가 스위치를 누르면 1초간 빨간색 LED를 켜고 다시 노란색, 파란색 LED를 계속 깜빡이게 개발한다고..
폴링(Polling) 방식 입출력의 상호작용을 할 때는 크게 3가지 방식이 존재한다. 오늘은 폴링을 먼저 알아보겠다. 폴링은 프로그램에 의한 입출력 방식이다. 데이터의 입출력이 CPU가 수행하는 프로그램의 입출력 명령에 의해 실행되고 입출력을 수행할 준비가 되었는지 알기 위해 CPU가 주변장치의 상태를 계속 감시한다. 폴링(Polling) 방식 CPU가 주변 입출력 장치들(키보드, 센서, LCD 등)에서의 변화를 지속적으로 계속 확인하고 그에 따라 프로그램을 처리하는 방식을 말한다. 프로그램은 쉽게 구현할 수 있지만 예를 들어 컴퓨터의 키보드를 폴링방식으로 구현한다고 생각해보자. 컴퓨터로 영화를 보고 있는데도 키보드를 치고 있는지 아닌지 계속 확인하는 작업을 한다면 CPU의 성능을 제대로 활용할 수 없다. 하지만 아두이노, AVR..
[STM32]ST-Link 사용법 및 IAR 디버깅 방법 ST-Link는 무엇일까? 해석 - ST-LINK/V2는 STM8 및 STM32 마이크로컨트롤러 제품군을 위한 회로 내 디버거 및 프로그래머다. SWIM 및 JTAG/SWD 인터페이스는 애플리케이션 보드에 위치한 모든 STM8 또는 STM32 마이크로컨트롤러와 통신하기 위해 사용된다. 대충 ST-Link는 STM계열의 보드에 프로그램을 업로드 하거나 디버깅할 때 사용하고, 그 인터페이스로 SWIM, JTAG, SWD를 사용할 수 있다는 것 같다. 하드웨어 디버거과 소프트웨어 디버거 주로 시리얼 포트로 터미널 프로그램에 메서지를 출력하며 디버깅하는 것을 소프트웨어 디버깅이라하고 ST-Link등 디버깅 장비와 SWIM, JTAG/SWD 등의 인터페이스로 브레이킹 포인트를 걸고 코드를 한줄 한줄 실행시키고 멈..
[STM32]UART 통신 입출력 실습 무언갈 배울 때 가장 중요한건 왜 배우는지 목적이 무엇인지 아는 것이라고 생각한다. 나는 디버깅할 때 pc로 값을 출력하도록하거나 센서의 값을 읽기 위해 uart 통신을 사용할 것이다. uart를 사용하기 위해 usart1를 비동기 모드로 설정하였다. Basic Parameter를 보면 115200 Baud rate, 8bit, None parity, 1 Stop Bit로 설정하였다. 이전 포스팅을 통해 이 값들이 무엇을 이미하는지 알 수 있을 것이다. Pin out view를 통해 tx, rx핀이 어느 핀으로 설정되있는지 알 수 있다. 자신이 가진 PCB와 사용하는 핀이 다르다면 옮길 수 있다. 나는 PCB회로를 확인한 결과 제대로 설정되있어서 옮기지 않았다. project manager에서 프로젝트 ..