F💻W/Coding 9

STM32 개발 시, delay 함수 직접 구현해서 사용해보자 !

STM32F205RBT6 데이터시트를 참고하면 120 MHz 의 최대주파수로 동작하는 것을 확인 가능하다. 1us의 딜레이를 수행할 시 , asm("nop"); // CPU에게 아무런 작업도 하지 말라는 명령어 동작을 최대주파수만큼 실행한다 만약 여러가지 통신과 기능이 구현되어 있다면, 스코프에서 확인하면 살짝의 오차가 발생하는 것을 확인할 수도 있다! 1us 를 구현했으니, 10us->100us ->1ms 까지 함수를 만들어 사용이 가능하다. stm의 내장 딜레이 함수 사용하고 싶지 않을때, 만들면 좋다 !

F💻W/Coding 2023.12.06

Atmega로 UART, SPI 통신 구현

Atmega8A 칩을 사용해 UART, SPI 통신을 구현할 것입니다. Atmega를 Master칩으로 설정하고, GPIO 핀을 활용해 연결된 Slave칩들의 핀들까지 컨트롤 할 것입니다. 따라서 코드를 그대로 적용할 시 작동이 안 될수도 있습니다,,! 그리고 데이터 시트에서 기초 통신 코드를 어셈블리코드와 C코드로 간략하게 기술되어 있습니다. 저도 그 코드를 일부 참고해서 작성했으니, 웬만하면 데이터시트를 먼저 참고해주세요 :> 1. SPI 설정 최소한의 기능으로 동작하기 위해서 라이브러리를 사용하지 않고, GPIO핀을 조작해 직접 SPI 구현할 것입니다. - SPI_MasterInit() : 핀 설정 SCK, MOSI, NSS를 Output으로설정..

F💻W/Coding 2023.12.04

[STM32F030C6T6] Bootloader 구현

특히 부트코드는 최대한 가볍고 짧게 작성하는 것이 좋음. 필요한 라이브러리인 Flash, UART 관련 라이브러리만 작성하고 나머지는 지우는 것이 좋음. 임베디드 보드 전원 -> 플래시 메모리(ROM)에서 시스템 소프트웨어 시작(H/W 초기화)->리눅스커널을 메모리(RAM)에 적재=사용자명령처리준비 사용하고 있는 mcu는 STM32F100x6. 따라서 데이터시트의 Device overview를 살펴보면, 아래와 같은표가 나온다. Memory mapping은 사이즈가 큰 mcu기준으로 그려지기 때문에 그 그림을 참고하면 안됨! STM32F100Cx 에서 4열은 아래 그림처럼 세부 항목에 대한 순서이다. C6에 해당하므로 두번째 열을 참고하기! 수정이 필요한 인터럽트 함수 - 시리얼로 오는 데이터를 넘겨주고..

F💻W/Coding 2023.03.30

손가락 제스처(1~5) 학습 및 테스트 -> 라즈베리파이 에러

model = load_model('model.h5', compile = False) 로 컴파일 옵션을 줌 - 1분 30초동안 녹화될 때의 데이터를 모은다import cv2 import mediapipe as mp import numpy as np import time, os #actions = ['come', 'away', 'spin'] actions = ['one', 'two', 'three','four','five'] seq_length = 30 secs_for_action = 30 # MediaPipe hands model mp_hands = mp.solutions.hands mp_drawing = mp.solutions.drawing_utils hands ..

F💻W/Coding 2022.07.30