전체 글
Windows 명령 프롬프트(cmd.exe) 출력된 텍스트 지우기
Windows 명령 프롬프트를 clear 하기 위해서는 아래와 같은 명령어를 입력하면 됩니다. > cls 실행 전 캡쳐 화면입니다. bash를 사용하던 습관 때문에 "clear"라고 입력을 했으나 동작하지 않았습니다. "cls" 명령을 입력하고 실행한 화면입니다. 기대한대로 출력된 텍스트들이 모두 지워졌습니다. 그 외 다른 명령어가 궁금하다면 위키백과를 참고하시면 될 것 같습니다.
[MCS-51] AT89S52 특징
Microchip(구 Atmel)사의 MCS-51(8051) 계통 MCU인 AT89S52의 주요 특징은 아래와 같습니다. MCS-51 계통과 호환되는 구조 8K Bytes의 In-System Programmable 플래시 메모리 동작 전원 범위는 4.0V에서 5.0V 까지 0Hz 부터 33 MHz까지 완전 정적인 작동 3 단계 프로그램 메모리 잠금 256 x 8-bit 내장 RAM 제어가능한 I/O 핀 32개 16bit 타이머/카운터 3개 인터럽트 소스 8개 Full duplex를 지원하는 UART 직렬 채널 저전력 유휴(Idle)과 절전( power-down) 모드 와치독 타이머(Watch dog timer) 데이터 포인터 2개 Power-off 플래그 위 정보는 Microship사의 공식 홈페이지에서..
[MCS-51] MCS-51 기본 구조
기본적인 MCS-51(8051) 칩에는 다음과 같은 것들이 내장되어 있습니다. 일반 CPU 기능 병렬 I/O 포트 (Perallel I/O port) 직렬 포트 (Serial port) 인터럽트 제어기 (Interrupt) 타이머/카운터 (Timer/Counter) ROM RAM 특수 기능 레지스터 (SFR, Special Function Register) 위 구성도는 Microchip(구 Atmel)사에서 생산하는 MCS-51 계열 MCU중 AT89S52의 것 입니다. 기본 8051에는 없지만 이 칩에 추가된 것은 아래와 갔습니다. EPROM을 대신하는 플래시(Flash) 메모리 와치독 타이머 (Watch dog timer) 내장된 플래시 메모리에 프로그램을 쓰기 위한 ISP(In-System Prog..
[STM32] UART 통신 수신 코드 구현 방법
CubeMX에서 사용하고자 하는 UART 페리페럴 설정을 합니다. 저는 프로젝트를 만들면 사용자에게 제안하는 기본 모드 설정(Default mode)을 사용한 상태입니다. 기본 설정은 USART 3번 채널을 사용합니다. 기본 설정 상태에서는 UART관련 인터럽트를 사용할 수 없습니다. 따라서 데이터 송수신과 관련한 인터럽트를 발생시키도록 하는 설정이 필요합니다. [NVIC Settings] 탭에서 "USART3 global interrupt"를 활성화 한 뒤 저장합니다. (.ioc 파일을 저장하면 자동을 code generate 될 것입니다.) 그다음은 데이터 수신이 이루어졌을 때 인터럽트를 발생시키도록 설정하는 함수 HAL_UART_Receive_IT()를 추가합니다. 위치는 main 함수 안, whi..
시리얼 데이터 통신을 위한 프로토콜
장치들 사이에서 통신을 할 때 데이터를 어떻게 전달해야 하는가에 대해서 정리해 보았습니다. 아래와 같은 데이터가 있다고 가정해 봅니다. 네모 한 칸은 1Byte를 의미합니다. 주고받고자 하는 데이터 길이가 항상 같으면 좋겠습니다만, 그렇지 않은 경우가 많을 것입니다. 때로는 길이가 짧을 수도 있고 길 수도 있습니다. 보내는 데이터마다 길이가 제각각이라면, 받는 쪽에서는 어디서부터 어디까지가 이번에 들어온 데이터인지를 알 수 없는 문제가 생깁니다. 그렇기 때문에 데이터가 어느 시점에 시작하고 끝나는가를 알 수 있어야 합니다. 우선 시작을 의미하는 값을 데이터를 보내기 전에 추가합니다. 일반적으로 STX(0x02, Start of Text)를 사용합니다. 데이터의 말단에는 끝을 의미하는 값을 추가합니다. 일..
서울시 산후조리원 이용요금 비교 자료
아내가 임신한 지도 어느덧 18주가 지났습니다. 이런저런 일들이 있었으나 다행히도 배 속의 아기는 잘 자라고 있습니다. 오늘 퇴근 후 아내와 함께 산후조리원을 알아보다가 좋은 자료를 발견하게 되었습니다. 혹시나 산후조리원 정보를 알아보고 계시는 분들에게 도움이 될까 하여 자료를 공유합니다. 서울시에서는 매년 서울시에 위치한 산후조리원 이용요금을 정리하여 공개하고 있습니다. 2019년도에 업데이트 된 자료는 아래 링크를 참고하시면 되겠습니다. 링크: [2019년 8월 서울시 산후조리원 현황 및 이용요금 가격 공개] 만약 2019년 이후에 이 글을 보고 계시다면 관련된 키워드로 구글이나 서울시 홈페이지에서 검색해 보시길 권해드립니다. 관련 키워드: 서울시 산후조리원 구글: www.google.com 서울시 ..
PWM으로 스텝모터 제어시 꼭 확인합시다.
요약: ARR, CCR 값이 설정 가능한 최대값을 넘어가지 않는지 확인합시다. 예를 들어 Core 클럭이 96MHz이고, 타이머의 Prescale 값을 96으로 설정하면(실제로는 설정할 때는 96에서 1이 빠진 95가 되어야 합니다.) Timer 내부에 공급되는 클럭은 1MHz가 됩니다. 이 때, 초당 8펄스 속도로 신호를 공급하고자 했을 때 아래와 같이 값을 설정하게 됩니다. ARR = (1000000 / 8) - 1 = 124999 CCR = (125000 / 2) - 1 = 62499 언듯보면 문제가 없는 것 같습니다. 하지만 모터는 아예 회전을 하지 않았습니다. 과연 무엇이 잘못되어 그런 것일까요? 답은 ARR 설정 값에 있습니다. 제가 사용한 MCU 는 STM32H743ZI 입니다. 그리고 타이..
헤더 파일 중복 방지 왜 필요할까?
헤더파일 중복을 방지하기 위해서 아래와 같은 형식을 사용합니다. #ifndef _XXXX_H #define _XXXX_H ... #endif 의미는 잘 알겠으나, 한가지 의문점이 있습니다. 일반적으로 헤더 파일에는 선언(declaration)을 합니다. 그런데 선언은 중복 되어도 에러가 발생하지 않습니다. 중복 에러가 발생할 수 있는 것은 정의(definition)입니다. 따라서 헤더 파일의 본래 목적대로 선언만을 적어놓는다면 중복 오류가 발생할 일이 없습니다. 그렇다면 왜 중복 방지를 해야할까요? 검색을 해보니 이 글에서 든 예시에서 헤더 파일에 구조체를 정의하는 것을 발견 하였습니다. 구조체를 포함하고 있는 헤더 파일에 중복 선언 방지 처리를 해놓지 않으면 문제가 발생할 수 있게 됩니다. 헤더 파일에..