전체 글 81

GPIO >SPI

stm32 cubeide  프로젝트 복사해도 복사한 파일의 값을 변경하면 원래 파일의 정보가 바뀜  > metadata 등의 관계에의해 + 백업 잘해두자,, 다 날려버림 해결책 1. second 로 실행시 ide에 first라고 뜨는데 그거 제거     ** 이때 contents on disk 체크 박스 꼭 해제 2. import projects 3. general > existing projects into workspace 4. second > browse 5. ioc 이름도 secoond 로 변경 // 속성에서 잘 확인 6. 디버그 속성에서도 second.elf로 변경 7. project > clean ------------------------------------------------------..

FND 분석

// SCLK   HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, LOW); HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, HIGH); // HIGH 로 끝나므로 시작도 HIGH // DO (DATA OUT)    if (X & 0x80)     {       HAL_GPIO_WritePin(FND_DIO_GPIO_Port, FND_DIO_Pin, HIGH);     }     else     {      HAL_GPIO_WritePin(FND_DIO_GPIO_Port, FND_DIO_Pin, LOW);     }     send(0xF8); HAL_Delay(1000); > 오실로스코프로 1111 1000 확인 ..

Scatter Loading 주의점, heap 및 stack

1)  우리 나름대로의 Stack과 Heap을 사용하게됨   > 자동으로 Compiler가 만들어주는 Stack과 Heap은 안씀 "그런데, 우리가 만들어낸 image의 ZI에 포함되지 않는 여기서의 Stack과 Heap은 도대체 뭐냐!   Default Memory model > RO, RW, ZI : Application 하나 올린것  Embedded OS (또는 Kernel)같은 복잡한 것이 porting되지 않았음     > Application이 사용하는 Stack과 Standard Library가 사용하는 (malloc같은) Heap인것      >  Compiler가 알아서 Stack과 Heap영역을 만들어줌 /* 스택(stack) 영역 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는..

Reset Handler에서 main까지 (Entry Point)

ARM core Embedded System Power on == Reset Exception  >  SVC mode > Reset Vector > PC setting    Reset Vector( Low Vector ) : 0x0 // Reset Handler로 branch하는 code가 있음 Exception Vector AREA    INT_VECT, CODE, READONLY CODE32                         ; 32 bit ARM instruction set. ENTRY B       Reset_Handler                       ; 0x0  // Reset Handler로 branch B       Undefined_Handler              ..

SPI통신

SPI데이터 주고받는 선 : 3가닥 ( 클럭, 데이터2 )  > 전압차이 이용 HIGH > LOW or LOW > HIGH 데이터 구분  1. Time base : bps (1초를 쪼개서) 2. CLK : 1주기에 대한 데이터의 값 구분 > SPI : CLK 전이중 > A의선 B의선 두개로 서로 말할 수 있음 반이중 > A와 B 가 하나의 선을 번갈아 사용 > SPI :default 전이중, + 둘다 사용 1:다수 통신  A  1) > B C D       2) > B C D  CLK > B C D >> 단점1)  A입장 >누구한테 말할지 알 수 없음        "    2) BCD입장 > 누가 말하는지 알 수 없음 (SPI 해결)  2) Master, Slave 전용으로 만듬 slave : maste..

FND 모듈제어

모듈 구성 : 메인칩 + 필요한 최소한의 회로   (쪽보드) 제어 단계 1. 칩, 부품 모델명 확인 : TM74HC595 , 7세그먼트  2. 데이터시트 구글링 1) TM74HC595 2) 모듈 자체의 데이터시트 QA , QB, QC ,,, 찾는법  1) 모듈 데이터시트 2) 쇼트테스트 3) 남이 정리한것 찾기 4) 샘플 코드를 구해서, 일단 동작시키고     > 그다음 추리     구글에 칩 sample code 검색.. @ STI 통신 CLK > DI( data )  클럭을 기준으로 데이터를 보냄 GPIO3개 outut > CLK, DATA Input , DATA output @ cpp 코드 > stm 으로 변환 해석 void TM74HC595Display::send(unsigned char X) {..

LED 회로

다이오드 : 긴쪽 + 짧은쪽 - 저항 220R GPIO > 1 ( 3.3v , HIGH ) ,0 ( LOW ) 으로 해서 가운데의 LED가 껏다 켜졌다 할 수 있음 HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState); GPIOx : GPIO group   > MX_GPIO_Init();       >  HAL_GPIO_WritePin(PB6_LED1_GPIO_Port, PB6_LED1_Pin, GPIO_PIN_SET); 1,3번 연결2,4번 연결 > s/w : on > 1234 다연결// 테스터기로 1,3 과 2,4를 찾을 수 있음  1. s/w off : PB0_TEMP-SET-UP 으로 전류가 흐름 > HIGH2. s/w on : GND > 다 흐름 , PB0_TEMP-S..

Bootloader

Boot : 시작해서 System을 사용할 수 있는 상태까지의 Sequence Loader: 뭔가 싣는것  > ROM에서 RAM으로 뭔가를 싣는 것 >>  Hardware를 정상 사용하도록, 실제 동작이 가능하도록 ROM에서 RAM으로 뭔가를 싣는것 MCP (Multi chip Package) ROM + RAM을 한 package에 담은 chip  //주로사용 NOR + PSRAM ( NOR MCP ), NAND + SDRAM (NAND MCP)   Bootloader가 해야 할 일 > combination에 따라 달라짐 ROM에 담을것 : code, RO (const data), RW   // RW: 초기값이 있는 Global 변수 >ROM에 초기값을 담아야함  //  ZI (Zero Initializ..

카테고리 없음 2024.11.29

UART로 printf() 구현

리눅스에서 표준출력 바꾸는 방법 있음 printf > 파일에 기록되게 할 수 있다. UART : 장치 관리자 > 포트 > usb serial port(com3) 3.3v 로 스위치 바꾸어 줘야함 모듈                  보드 DTR RX (수신부) - 보드에서는 TX   (PA9), 60번 TX(송신부) - 보드에서는 RX (PA10) ,55번 VCC CTS GND //신호의 기준선 XShell5 세션만들기 > 프로토콜 :serial > serial 설정 : com3 STM32 char senddata[20]= "hello world\r\n"; // 엔터 하려면 \r\n FTDI 모듈 > 컴퓨터 (드라이버)  >Port3 > xshell > hello world   오실로스코프  start 1..

Coprocessor Assembly

Coprocessor:  Co-worker , cpu 혼자 모든걸 처리할 수는 없으니Coprocessor 명령 : 전용 registerData를 전송하는 명령1) Coprocessor 내부의 Register들을 장난 침. (Coprocessor 내부 Register ↔ Coprocessor 내부 Register) 여기에 붙은 모든 것들은 Coprocessor 내부에 정의 된 녀석들(형식)CDP Coprocessor번호, Coprocessor 명령어, CRd, CRnCoprocessor 명령어 : Coprocessor마다 준비된 명령어가 다름CRd: Coprocessor 내부에 있는 Register,, Destination Register로 사용 CRn: Coprocessor 내부에 있는 Register ..