STM32U, STM32H 시리즈부터 GPDMA(General Purposes DMA)가 기본 DMA로 들어가 있습니다. 따라서 앞으로 출시되는 ST MCU에서는 GPDMA가 필수적은 DMA 시스템이 될 가능성이 높습니다. DMA를 사용하셨던 분들이나 앞으로 사용하실 분들은 GPDMA에 대해 필수적으로 알아야 합니다. GPDMA의 핵심은 Linked-list를 통해 다중 블록전송이 가능해졌다는 것입니다. 실례로 I2C로 받은 데이터를 UART를 통해 소프트웨어 개입없이 송출하는게 가능합니다. 아래 번역은 ST Employee 가 작성한 "How to configure the GPDMA?" 포스트를 번역해 놓은 것입니다. GPDMA를 구성하는 방법은 무엇입니까?1. GPDMA 모듈 설정STM32U5와 같이..
Polling Conversion에서 유의해야 할 Overrun을 없애는 방법은 무엇일까요? Overrun 제거 그것은 바로 AUTODLY를 Set하는 방법입니다. 아래 그림을 참조하도록 하겠습니다. AUTDLY=1로 설정 한 후 Conversion을 보면 CH1 Conversion 이후 ADC_DR에서 Read하기 전까지는 다음 Channel CH2를 Conversion 하지 않는 것을 볼 수 있는데요, 이러한 이유로 Overrun이 발생하지 않게됩니다. CubeMX 설정 지난 포스트에 이어서 CubeMX의 설정을 알아보겠습니다. 핀설정은 생략하고 Configruation 부분만 발췌하였습니다. 중요한 것은 우리는 여러채널을 한번에 Conversion 하기 위해서 Scan Conversion Mode을..
CubeIDE에서 Formatter를 이용하여, Code를 일관성 있게 만들어 봅시다. 아무런 설정을 하지 않을 경우 들여쓰기는 Tab, Braces는 Same line으로 되어 있습니다. 취향이기 한데, 저는 아래와 같이 세팅합니다. 1. 들여쓰기 - Spaces only indentation size - 2 tab size - 2 들여쓰기를 Tab으로 할 경우에, 다른 사람이 제코드를 보면 조금 다르게 보일 수 있습니다. 그건 Tab의 사이즈가 서로 다르기 때문에 나타나는 현상입니다. Spaces only 로 두면 들여쓰기는 항상 Space로 구성되어 있어 어디서나 동일한 모습으로 보입니다. (심지어 Word에서도 일관성있게 보입니다.) 들여쓰기 size는 2로 구성했습니다. 아무래도 가로로 ..
STM32CubeMX에서 기본적으로 생성되는 코드는 Flash 메모리에 IRQ Handler들을 올립니다. 그래서 Interrupt가 발생하게 되면 Flash에 올라가 있는 IRQ Handler를 호출하여 해당 Interrupt를 수행하게 됩니다. 간혹 Application이 Flash가 아닌 RAM에서 실행되어야 하는 경우가 생기는데요, 이러한 경우 보통 IRQ Handler를 RAM function으로 만들어 Interrupt가 발생하면 RAM 상에서 해당 Interrupt를 처리하도록 합니다. 여기서의 맹점은 무엇일까요? 바로 IRQ Handler의 Vector Table이 Flash에 있다는 것입니다. Interrupt가 발생하면 Flash의 Start 영역에 기록된 Vector Table을 참조..