본문 바로가기

반응형

프로젝트/임베디드

(11)
[이론] SPI 통신 직렬 주변장치 인터페이스(SPI, Serial Peripheral Interface)SPI는 마스터/슬레이브 통신을 기반으로 하는 통신 방식이다. 이름에서 알 수 있듯이 주변 장치를 제어하기 위하여 설계되었다.마스터에 의해 여러 슬레이브가 제어되며, 하나의 버스를 여러 주변 장치들이 공유하며 통신할 수 있다. 단 이 경우에는 매체 별로 접근 방법과 제어선이 사전에 구비되어 있어야 한다. 전이중 핀 환경설정과 동기화된 클록 덕분에 UART 통신에 비해서 클록 뒤틀림에 더욱 강건하고, 더 빠른 속도로 통신할 수도 있다. 장점 : 고속 데이터 송수신, 단순한 하드웨어 구성, full duplex, 멀티 슬레이브 지원, 버스 충돌 없음단점 : 슬레이브 장치에 비례하는 핀 수 증가, 거리 제한, 표준화의 부재, ..
RCC 오실로스코프로 확인하기 STM32 계열 MCU를 다루면서 기본적으로 클럭을 설정하고 배분해주어야 한다. 그런데 막상 클럭 설정이 원하는 대로 설정되었는 지 확인하기란 요원하다. 다행히도 RCC CFGR 레지스터는 클럭을 핀으로 출력하여 확인할 수 있도록 기능을 제공한다. STM32F103RBT6을 기준으로는 PA8로 출력된다.  시스템 클럭, HSI 클럭, HSE 클럭, PLL 클럭/2 옵션이 있고 필요에 따라서 선택하면 된다. 주의할 점은 기재된 것처럼 MCO로 출력되는 신호의 주파수는 50MHz을 넘어서는 안된다. 트리를 보면 좀 더 이해가 쉬울 것이다.  CMSIS 라이브러리를 사용하고 있다면 RCC CFGR을 설정할 때 다음의 코드를 삽입해주면 된다.//원하는 것 한 개 선택MODIFY_REG(RCC->CFGR, RCC..
UART 통신 ***해당 실습은 RCC, GPIO, SYSCLK을 설정하였다는 가정하에 진행된다.  UART(범용 비동기화 송수신기)는 병렬 데이터의 형태를 직렬 방식으로 전환하여 데이터를 전송하는 하드웨어의 일종이다. 대표적인 RS-232 통신 표준을 사용한다. 문자 그대로 비동기 통신 방식을 사용하여 양쪽에서 사전에 Baudrate를 지정해야 한다. UART 통신의 장점은 하드웨어적인 구성과 통신 방식이 간단하다는 것이다. 그래서 STLINK 같은 별도의 디버깅을 위한 디바이스가 없는 경우 펌웨어 업로드, 디버깅 등에 자주 활용된다. 데이터의 송수신 형태는 다음과 같다.   시작 비트를 받은 수신측은 종료 비트를 수신하기 전까지 데이터 비트 또는 패리티 비트를 읽게 된다. 데이터 비트의 길이, 패리티 비트의 유무,..
JTAG/SWD 동작 안하는 경우 봐야할 것!! 이 글 보고 해결하면 됩니다!! 클락 선, 데이터 선 확인!! https://cpattern.tistory.com/205 STM32 와 ST-Link 연결이 안 될 경우 체크 사항무슨 이유에서인지 STM32 와 ST-Link 연결이 안 될 경우 꼭 확인해봐야할 사항에 대해 총정리 해보도록 하겠습니다. 본문은 계속해서 생각나는대로 업데이트 할 예정입니다.  흔히 보드가 새로 나cpattern.tistory.com STLINK 업데이트 안되는 경우(DFU 진입 문제 등등)https://igotit.tistory.com/entry/STLINK-V2-firmware-update ST-LINK V2. firmware update.ST-LINK/V2 펌웨어 업데이트 ST-LINK V2 내장된 MCU 의 펌웨어 업데..
0. PPG에 대하여 PPG(photoplethysmogram)는 시간에 따른 조직의 미세혈관층 혈액량 변화를 탐지함으로써 cardiac cycle, 혈압 등이 반영된 생체 신호를 말한다. LED를 이용하여 빛을 조사하고 흡수하는 광량이 시간에 따라 달라지는 것을 photo diode를 이용하여 탐지하는 방식으로 데이터를 추출한다. ECG가 심장의 전기적 활성화 단계를 반영한다면 PPG의 경우 심장의 전기적 활성에 따른 수축, 이완의 결과로 조직 내 혈액량이 변하는 것을 반영한다.    PPG 신호에 영향을 주는 요소는 다양하다. cardiac cycle, 호흡, 근육의 움직임, 혈압, 혈액의 산소포화농도, 혈액의 양 등을 그 예로 들 수 있다.  PPG로 측정할 수 있는 것 중 제일 대표적인 요소는 바로 심박과 cardia..
5. 임베디드 실습 : GPIO + Systick 이제 드디어 LED를 켜볼 것이다. 간단한 동작을 위해 참 돌아돌아 온 것 같다. 이번 글에서는 보드에 장착되어 있는 LED를 주기적으로 키고 끌 예정이다. GPIO(General Purpose Input Output)는 입력이나 출력을 포함한 동작이 런타임 시에 사용자에 의해 제어될 수 있는, 집적 회로나 전기회로 기판의 디지털 신호 핀이다. GPIO를 조작하기 위해서는 다음과 같으 과정을 거쳐야 한다. 조작할 pin을 포함한 포트에 클럭소스를 배분한다. 해당 pin 입출력을 설정한다. 레지스터를 조작하여 디지털 출력을 조정한다. 사용하는 레지스터는 다음과 같다. 각각의 레지스터에 대해서 간단하게 설명해 보겠다. APB2ENR 레지스터는 입출력 장치에 클럭 소스를 배분할 지 안할 지를 결정한다. CPI..
4. 임베디드 실습 : Main System Clock Source 클럭(Clock)을 설정해야 한다. 기기가 제대로 동작하기 위해서는 시간의 기준이 되는 신호가 필요하다. 이 신호가 바로 클럭이다. 클럭의 속도가 빨라지면 내부에서 명령어를 처리하는 속도가 빨라진다. 게임에 관심이 있는 사람이라면 오버클럭(Over clock)이라는 용어를 들어본 적이 있을 것이다. 기존의 안정성을 고려하여 설정된 클럭 수보다 더 높게 클럭을 설정하여 성능을 끌어올리는 것인데, 여기서의 클럭이 우리가 다룰 클럭과 같은 의미이다. 클럭을 높이면 왜 동작이 빨라지는 것인가? 앞서서 언급했던 것처럼 클럭은 MCU 동작의 기준이 된다. 예를 들어 0과 1의 값을 반복하는 클럭이 있다면, 특정 레지스터에서 다른 레지스터로 값을 넘길 때는 0에서 1로 클럭 값이 전환되어야 한다는 등 하드웨어적으로 ..
3. 임베디드 실습 : NVIC ~ 빈 main() 드디어 코드를 작성할 수 있게 되었다. 그러면 바로 main()에다가 원하는 프로그램을 넣으면 되는가? 그렇지 않다. 우선적으로 .data와 .bss 영역을 초기화 해주어야 한다. .data 섹션의 초기화는 FLASH 영역에 저장된 .data를 RAM으로 복사해주어야하고, .bss 영역은 C 규약에 따라서 정적 심보의 초깃값을 0으로 해주어야 한다. 앞서서 target.ld에서 entry point를 isr_reset()으로 설정했음으로 초기화 작업을 해당 함수에서 해준다. extern unsigned int _stored_data; extern unsigned int _start_data; extern unsigned int _end_data; extern unsigned int _start_bss; ..

반응형