임베디드 106

USB CDC

1. USB 핀셋팅2.middle ware > USB_DEVICE >  CDC > 버퍼사이즈 조정 3. 클럭설정 > 48MHZ 필요, : CPU 클럭 72 로 다시 바꿔줘야함 or 1.5 prescaler  4. inc , app 파일 include 경로설정5. 재복사 > hal_cof, it.c, clock(main.c > systemClock) statup_handler 문제ex) sysTick_Handler 같은건 .word SysTick_Handler                                       >> startup코드에 구현되어있음 6. main 에서 초기화, 헤더파일 가져옴7. 메모리 문제.. 47%나 잡아먹음8. 세팅 > optimize for size     > 20..

stm32 mx >LED

lib 파일내에 cube MX 로 코드 프로젝트 생성 > 참고용으로 사용   > core 파일 >  resource configuration > exclusive from build inc 파일들 다 path 참조 stm32f1xx.h: #define STM32F103xB  STM32F103C8 > STM32F103xB : preprocessor 에 추가 msp, it.c , system 파일들도 복사해주기 ( include 포함) conf.h ( config) : 주변기기들 수정될때마다 따로 복사해주어야함 clock conf, HAL_Init, error_handler 도 복사해주고 > bsp.c void MX_GPIO_Init(void){  /* GPIO Ports Clock Enable */ __H..

초기설정

최소한의 파일main, start_up, .ld ( linkedlist )   ldscript : 메모리 할당startup : main함수 직전까지  /* Highest address of the user mode stack */_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */> 스택은 끝주소부터 점점 작아짐  .section .isr_vector,"a",%progbits .type g_pfnVectors, %object g_pfnVectors: .word _estack  //   >> 스택 ,즉 끝부분 부터 시작 .word Reset_Handler  // 그다음 리셋핸들러 함수로 jump .word NMI_Handler .w..

ADC

ADC  A : analog  온도,소리 와 같은 연속성  D : digital 0,1 비연속성         > ex) 사진 : 좌표로 나눠서 저장 ex) 온도계   측정기(쇳덩어리) : 온도가 오를때마다 저항값이 바뀜 or 기전력 // 스트레인게이지 : 체중계, 상하수도 변형 측정      > ADC > 몇 도 ( analog)일때 몇 V (digital) 를 나타냄   > 프로그래밍연산 > 온도계에 표시 ADC 의 변화과정   :필터링 > 샘플링(표본화) > 양자화 > 부호화                            1. 필터링 > 노이즈 ( 갑자기 튀어오르는) 필터 2. x 축 : 시간 3 y 축 : 측정치 4.  01010101  > 3bit,, 10bit,, 12bit ADC 로 갈수록..

완성 -1-

1. S/W            : 전원 > 저항 > s/w > gnd            // 전원 >  s/w 연결되면 > gnd : short 주의! > GPIO_EXTIO ( interrupt ) : 누를때마다 인터럽트 발생   PB0 : ON > 0, OFF > 1          > 누르면 전압 하강, 띄면 올라감       > 눌렀을때 발생하려면 > 하강엣지 ( 옵션 : falling edge )        눌렀다 띄었을때 발생하면 > 상승엣지        > NVIC : 우선순위 3 정도 >> 누를때마다 it.c 파일 내 코드가 실행됨    > ex) printf ("hello\r\n"); 2.  START S/W   // 1번과 동일 3. 온도센서 .. 처음부터 다시bool Ds18b2..

TCB 구조

각각의 Task : 자기 고유의 TCB 가짐 TCB: Kernel이 Task들을 관리하기 위한 Meta Data* typedef struct {   struct task_tcb_struct *next_ptr;   struct task_tcb_struct *prev_ptr;} task_tcb_link_type ; typedef struct task_tcb_struct {   char                        task_name[200];   void                         *sp;                                  /* 스택 포인터 */   uint32               receive_siganl ;                       ..

SSD1306 코드분석

uint8_t SSD1306_Init (void) { if (HAL_I2C_IsDeviceReady(&H_I2C, SSD1306_I2C_ADDR, 1, 20000) != HAL_OK) { >/* Send slave address */ hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); deAddress > DR DR 쪽에 값을 넣어주면 그 후부터는 Hardware가 처리 I2C_HandleTypeDef hi2c2;{ I2C_TypeDef *Instance;}typedef struct{ __IO uint32_t CR1; __IO uint32_t CR2; __IO uint32_t OAR1; __IO uint32_t OAR2; __IO uint32_t DR; __IO..

TCB - Task , CS

Kernel Level의 Context Switching  현재의 Context잘 보전 > 다른 곳에 갔다 와서 하던 일 계속 진행 가능!       ARM의 Context > 그림1 >  이 녀석만 잘 저장해두면됨  > 해당 Task의 Stack에 저장  Context Switching 할때 , 현재의 Context를 저장해 두는 방법   >  Kernel이 어떻게 Task를 관리할까? System상의 Task : 자기 자신만의 Stack과 TCB (Task Control Block)가짐       TCB :  각 Task를 Control하기 위해 > Task의 정보를 저장해 놓는 Data Structure               > Scheduling과 Context Switching을 위한 정보들..

I2C hello world :)

SM (standard mode ) : 비율 1대 1 FM (fast Mode )             a > 1 : 2            b > 1 : 1.7  SCL clock frequencySM : 0~ 100KHZFM : 0~ 400KHZ Tlow : FM : 1.3 us ~     > duty cycle LOW,HIGH 비율 1:2 ,1 : 1.7 // SM : 1대1 400kHZ = 2.5us 1초에 400kHZ , 1주기 ( LOW + HIGH) : 2.5us > 한쪽당 1.25us>>NXP I2C 메뉴얼에 .. LOW 를 최소 1.3us 유지해야함>HIGH : LOW1 : 2 > 0.8 + 1.7 = 2.51 : 1.7 > 0.9 + 1.6 = 2.5 strech mode ; 클럭 LO..