728x90

전체 글 618

C# - WinForm을 이용한 기억력 게임

C#의 Winform을 이용하여 기억력 게임을 만들어 보았다. 게임은 크게 1초, 0.5초 0.25초 간격의 난이도를 가지고 있다.아래 GIF 파일들은 실제 게임을 실행하는 중요 부분들만 캡처한 것이고, 그 외 상세한 부분들은 글과 코드를 통해 설명할 것이다.속도 선택가장 먼저 게임 속도를 선택하게 되면 게임 속도가 선택에 맞게 설정된다.속도 1 게임 실행1단계 게임을 실행하게 되면 1초의 속도로 기억력 게임이 시작되고 속도 1 점수에 해당하는 곳에 최고 점수가 기록된다.속도 2 게임 실행속도 2를 선택하게 되면 0.5초 간격의 난이도로 게임이 시작되고, 속도 2에 해당하는 점수판에 최고 속도가 기록된다.속도 3 게임 실행속도 3을 선택하게 되면 0.25초 간격의 난이도로 기억력 게임이 시작되고, 속도 ..

STM32 - OC (Output Capture)

OC (Output Capture)출력 비교 모드는 카운터(CNT)의 출력값이 캡쳐/비교기에 설정된 비교값(CCRx)과 일치할 때 인터럽트나 (CCxl)나 해당 핀에 출력(OCx)이 발생하는 모드다.이전 PWM의 경우 TIM의 PSC의 값과 ARR값에 의해 타이머의 주기가 정해지고, CCR 값에 의해 Duty ratio를 통해 PWM가 정해지는 것을 알게되었다.OC (Output Compare) 또한 마찬가지로 PSC와 ARR에 의해  타이머의 주기가 정해지고 CCR의 값에 의해 비교가 발생한다.위 DataSheet를 보게되면 CCR의 값이 003A로 설정되어 있을 경우 CNT가 003A를 만나게되면 OC1의 출력 값이 반전되고, 중간에 CCR의 값이 B201로 바뀌게 되면 CNT가 B201을 만나게 되..

STM32 - RTC (Real Time Clock), Alarm을 통한 시간 및 알람 출력

RTC (Real Time Clock)RTC는 기본적으로 초고속 클럭이 필요하지 않기 때문에 LSE를 사용한다.  STM32는 RCC(Reset and Clock Control)를 통해 HSI, HSE, LSI, LSE를 설정하게 된다.HSE는 MCO 즉, ST-Link로부터 클럭을 전달 받고, LSE의 경우 Nucleo 보드에 장착된 크리스탈에 의해 클럭 신호가 생성된다.Clock Configuration을 보게 되면 LSE는 32.768KHz를 사용중이다. STM32 RTC는 Clock Source 외에도 Alarm 용도로 사용 가능하다.RTC의 Parameter Settings를 보게되면 기본적으로 시간과 관련된 Parameter를 확인 가능하다. 시간 포맷을 정함과 동시에 Asynchronous ..

Verilog - CHARACTER LCD에 문자 입력하기

FPGA를 이용한 LCD 문자 출력 결과 화면LCD는 CLK 신호를 기반으로 RS, RW, E, DB0~DB7 핀을 통해 신호를 전달받아 데이터를 출력한다. RS는 Register Select의 약자로RS가 0일 경우 명령 레지스터를 선택한다. 즉, LCD에 보내는 데이터가 명령어 또는 제어 명령어임을 나타낸다.RS가 1일 경우 데이터 레지스터를 선택한다. 즉, LCD에 보내는 데이터가 화면에 표시될 문자 데이터임을 나타낸다. RW는 Read Write의 약자로RW가 0 일 때는 쓰기 모드로 MCU -> LCD로 데이터를 전송한다. 이 모드는 주로 LCD에 문자를 표시하거나 명령을 전송할 때 사용된다.RW가 1일 때는 LCD -> MCU로 데이터를 전송한다. 이 모드는 주로 LCD의 상태를 읽거나, Bu..

STM32 - PWM를 이용한 모터 제어 및 부저를 이용한 멜로디 생성

PWM(Pulse Width Modulation) 출력의 주파수는 Auto Reload 값(ARR)에 결정되며 duty ratio는 Capture Compare(CCR)값에 의해 결정된다. PWM 출력 발생 모드는 Mode 1, Mode 2에 따라 구분된다.Mode 1Up Counting일 때 Count 값이 CCR보다 작으면 1을 Count값이 CCR보다 같거나 크면 0을 출력한다.Mode 2Up Counting일 때 Count 값이 CCR보다 작으면 0을 Count값이 CCR보다 같거나 크면 1을 출력한다. ARR(Auto-Reload Register)ARR은 주기적인 PWM 신호의 주기를 설정하는 레지스터다. 주로 타이머의 설정 중 하나다.주기 = Timer Clock 속도 / (ARR 값 + 1)..

HAL 함수 모음 (GPIO, EXTI, UART, ADC, DAC, TIM...)

기본HAL_PPP_Process()인터럽트 모드에서 프로세서를 시작하는 함수사용자의 코드에서 이 함수를 호출하면 프로세스가 인터럽트 모드에서 시작 HAL_PPP_IRQHandler()PPP 주변장치의 인터럽트 핸들러인터럽트 모드에서 프로세스를 시작하기 전에 stm32f4xx_it.c 파일에서 해당되는 인터럽트 핸들러가 코딩되어 있어야함. __weak HAL_PPP_ProcessCpltCallback()작업 완료시 호출되는 콜백 함수콜백 함수는 드라이버 내에서 약함 함수(weak function)으로 선언되어 있음사용자가 유저 작성 코드 내에서 콜백 함수를 다시 선언하는 것이 가능즉, 사용자가 콜백 함수 내에 원하는 작업을 코딩하여 작성하는 것이 가능 __weak HAL_PPP_ProcessErrorCal..

Clock Configuration, UART 글자 깨짐 현상 해결 방법

MPU/MCU Select를 통해 생성했을 때 Board Select을 했을 때 문제가 없었던 UART 통신에서 문자가 깨지는 현상이 발생하였다. 문제점UART를 통해 Console 창에 문자는 출력되지만 문자가 깨져서 나오는 상황 처음 문제가 발생했을 때 생각한 원인들은 이랬다.1. 인코딩이 잘못되고 있다.2. baud rate가 맞지 않아서 글자 깨짐3. 그 외 Port가 잘못되거나 ST-Link와의 통신에서 문제가 있을 것이다. 1. 에 대한 해결책으로 인코딩과 관련된 모든 설정을 변경해보았지만 결과가 같았다.3. 에 대한 해결책으로 USART 1,2,3 등 많은 USART 포트를 사용해봤지만 결과가 동일했다. 2. 에 대한 해결책으로일반적으로 우측 부분에 관한 Clock만 생각했기 때문에 우측 부..

STM32 - Clock, Timer 구현 (SysTick, Timer 사용)

https://insoobaik.tistory.com/631 STM32 - TIM 이론보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.insoobaik.tistory.comTIM 이론에 이어 실제로 TIM을 Necleo board에 구현해 볼 것이다.LSE, LSI, HSI, HSE 총 4개가 있는데 일반적으로 External 즉, 크리스탈을 이용하여 생성된 클럭이 안전하다.RTC의 경우에도 LSE를 사용한다.STM32F429의 경우 HSE는 ST-Link 파트에 붙어있는 MCO로부터 클럭을 받아 사용하게 된다. Clock Configuration을 통해 설정이 가능하며, DataSheet를 통해 각 타이머가 사용하는 APB도 알 수 있다.각 타이머는 위 DataSheet와 같이 동작하게 ..

STM32 - TIM 이론

STM32F429의 Clock은 최대 180MHz 속도로 동작할 수 있다. 단 동작 속도가 빠르면 전력 소모가 많기 때문에 전력 소모를 고려하여 최대 속도로 동작 시킬 필요가 없다. STM32F429Nucleo Board는 내부에 16MHz의 CPU clock과 32KHz의 RTC(Real Time Clock)가 있다.CPU clock은 HSE, HSI 중 하나를 선택할 수 있고 초단위 시간을 측정하는 RTC LSE, LSI 중 하나를 선택 가능하다.HSE : High Speed ExternalHSI : High Speed InternalLSE : Low Speed External (32.768KHz)LSI : Low Speed Internal (32KHz) RTC clock에 해당하는 LSE 32.76..

Verilog- FPGA를 이용한 DC 모터 구동

https://insoobaik.tistory.com/635 STM32 - PWM를 이용한 모터 제어 및 부저를 이용한 멜로디 생성보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.insoobaik.tistory.comPWM에 대한 내용은 위 글을 통해 참고하면된다.STM32를 가지고 PWM을 통해 모터를 동작시킨 것과 동일하게 FPGA, Verilog를 통해 DC 모터 제어를 해 볼 것이다.MotorMotor StatusIN1IN2IN3IN4MOTOR_AFoward Rotation1/PWM0  Reverse01/PWM  STOP00  Break11   DC 모터의 경우 ARR값에 대한 CCR값을 통해 속도를 조절 할 수 있다.DC 모터의 속도는 ARR에 의해 정해진 타이머 주기의 평균 전압..

728x90