STM32 ] TIM 2,3,4 인터럽트를 사용하여 LED 1,2,3을 각각 0.1, 0.5, 1초 간격으로 토글하는 예제
기초 예제이긴 하지만 기록을 위해 남긴다. 먼저 클락설정부터 해준다. SYS clock은 최대인 180MHz로 했고 APB1 Timer clocks는 90MHz이다. datasheet의 20페이지 또는 90페이지를 확인하면 각각의 타이머가 어떤 버스의 클락소스를 사용하는지 확인할 수 있다. 타이머 2,3,4를 모두 enable 시키고 파라미터 세팅에서 Prescaler와 ARR을 설정해준다. 각각 0.1초, 0.5초, 1초를 뽑아내려면 주기는 주파수의 역수이니까 10Hz, 2Hz, 1Hz로 설정하면 된다.\ -1 해주는 이유는 0부터 카운트 하기 때문이다. 타이머 셋 다 인터럽트를 켠다. 각각 MX_TIM2_Init(); 함수를 따라가보면 아까 MX툴에서 설정해둔 값이 들어가 있는것을 볼 수 있다. LE..
2022. 6. 29.
STM32 , UART 통신으로 피아노 연주하기 , PWM Frequency 제어 ( Passive Buzzer )
STM32F429 보드와 수동부저를 사용하여 멜로디를 연주해 보았다. 인터럽트 방식 UART 통신으로 시리얼 모니터에 숫자를 입력하는 해당하는 음계가 연주된다. 회로와 timer 설정은 지난번에 올린글과 동일하다. 거기서 uart3 설정만 켰다. 2022.05.27 - [MCU/STM32 (ARM Cortex-M)] - STM32 , PWM 주기 변경으로 수동 부저 ( Passive Buzzer ) 제어 , 실시간으로 ARR 변경시 동작 멈추는 현상 해결 , 멜로디 출력 소스코드 전역변수 구간 /* USER CODE BEGIN PV */ typedef enum { N = 0, C = 956, D = 852, E = 758, F = 716, G = 638, A = 568, B = 506, C6 = 478 ..
2022. 5. 27.
STM32 , 디지털 금고 프로그래밍으로 구현 ( 시프트 레지스터 응용 )
시프트 레지스터를 응용한 디지털 금고를 프로그래밍으로 구현하였습니다. 올바른 비밀번호인 3190을 순서대로 입력하면 LED가 오른쪽 왼쪽으로 번갈아 이동하면서 켜지고, 틀린 번호를 입력하면 LED가 깜빡이면서 초기화 되서 다시 입력해야 합니다. 버튼 3, 1, 9, 0 은 PG0-3 과 연결해두었고 버튼 2, 4, 5, 6, 7, 8 은 PC7-12 와 연결해두었다. LED는 PD0-5 이다. D 플립플롭은 입력과 출력이 버퍼와 마찬가지이다. 시프트 레지스터라서 처음 입력이 1으로 고정이고 각 플립플롭의 출력 Qa, Qb, Qc, Qd의 값은 0으로 초기화된 상태에서 시작하기 때문에 올바른 순서대로 클락펄스를 주어야 비트 1이 이동한다. 소스코드 /* USER CODE BEGIN PFP */ void J..
2022. 5. 24.
STM32 레지스터 직접 접근해서 LED를 이용한 카운터, 7 segment FND 출력 제어하기
먼저 PC8, 9, 10, 11 핀을 output 모드로 사용해 0x0-0xF 까지의 카운터를 구현하였고, PD0, 1, 2, 3, 4, 5, 6 핀을 output 모드로 사용해 FND에 0-9까지의 숫자를 출력하였다. 참고로 핀을 선택할때 내가 한 것처럼 이어진 핀을 선택해야 나중에 코드짜기가 쉽다. 그리고 아무리 MODER 에 원하는 값을 대입해도 현재 해당 GPIOx 핀이 MX 툴에서 활성화된게 아무것도 없으면 모드 설정이 안되더라.. 아마 MX_GPIO_Init(); 함수 내에 설정이 안되서 그런거 같은데 MODER은 MX툴 쓰는게 편한거 같다. unsigned char 배열을 사용해 0x0부터 0xF까지의 숫자를 미리 넣어주었다. /* USER CODE BEGIN 2 */ GPIOC->MODER..
2022. 5. 19.