분류 전체보기 (137) 썸네일형 리스트형 [stm32F746] UART 송신 while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_Delay(3); // 3ms delay USART1->TDR = 0x1; // tx data = 0x1 } [stm32F746] 3. 외부인터럽트 + 타이머 * 목표 : 스위치를 누를 때 외부인터럽트가 발생하여 LED가 3초 켜지고 꺼진다. - 인터럽트 루틴은 시간이 많이 걸리는 코드를 실행하면 문제가 생길 수 있음. 따라서 인터럽트는 flag를 처리하고 메인 무한루프 안에서 flag를 체크해서 처리하도록 작성함 - MX 설정은 이전의 2 와 동일 1. 코드 작성(main.c) void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == GPIO_PIN_11) { flag = 1; // 인터럽트 발생 시 콜백함수에서는 flag 값만 변경 } } --------------------------------------------------------------------------------------- whi.. [stm32F746] 2. EXTI (외부인터럽트) * 목표 : 보드의 B1(User Button)을 누르면 외부 인터럽트가 발생하여 LED(PK3) Toggle 1. GPIO 설정 - button이 연결된 PK3 핀을 EXTI_OUTPUT으로 설정 - mode : External Interrupt Mode with Falling edge trigger detection => B1 버튼 회로도를 보면 버튼을 눌렀을 때 신호가 High에서 Low로 바뀌도록 설계되어 있음. 따라서, 버튼을 누를 때 인터럽트가 발생하게 하려면 Falling edge 모드로 변경하는 것이 적합. 2. NVIC 설정 - EXTI line interrupt : ENABLE 설정 3. 코드 작성 - 인터럽트가 발생하면 EXT15_10_IRQHandler() -> HAL_GPIO_EX.. [stm32F746] 1. 타이머 만들기 * 목표 : 타이머를 이용하여 1초 주기의 인터럽트가 발생하도록 하여 LED Toggle 1. RCC 설정 2. Clock Configuration 설정 - 데이터시트를 참고하면 TIM3은 APB1 프리스케일러를 통과한 클럭을 소스로 사용함을 알 수 있음 3. Parameter Settings - 인터럽트 주기 설정 공식 [Hz] = Frequency / (Prescaler * Period) ex) 108 * 10^6 / (108 * 1000) = 1000[Hz] => 주기 = 1[ms] - auto-reload preload : Enable 설정 => 반복적인 인터럽트 발생하기 위해 * 인터럽트 발생 이후 함수 호출 순서 TIM3_IRQHandler() -> HAL_TIM_IRQHandler() -> .. [touchGFX] Font 추가 1. 폰트 ttf 파일 다운로드 2. ttf 파일 원하는 프로젝트 경로에 추가 - 프로젝트명\TouchGFX\assets\fonts (ex. D:\TouchGFX\workspace\MyApplication0828_1\TouchGFX\assets\fonts ) 3. 프로젝트 재시작하면 폰트 반영되어있는 것을 확인할 수 있음 [touchGFX] UART Transmit * 목표 : 버튼 클릭시 "Hello World" PC로 전송 View -> Presenter -> Model void Screen2View::btnE_click() { // textArea1Buffer 초기화 memset(textArea1Buffer, 0, sizeof(textArea1Buffer)); textArea1.invalidate(); // 데이터 전송 presenter->txEnter(); } // View -> Presenter -> Model void Screen2Presenter::txEnter() { model->txEnter(); } #include "stm32f7xx_hal.h" extern UART_HandleTypeDef huart1; void Model::txEnter() {.. touchGFX 입력 키패드(1) 목표 1) 숫자 키패드 버튼을 통한 입력 => 화면 출력 4자리 2) Enter 버튼 -> UART통신을 통한 PC화면에 데이터 출력 3) Delete 버튼 -> 값 초기화 1. UI 화면 작업 2. 숫자 키패드의 화면 출력 - 버튼 클릭 인터랙션 생성 (숫자 0 ~ 9) - 자릿수와 숫자 값 저장을 위한 구조체 typedef struct { uint8_t ct1; // 자릿수 위치 uint16_t tb; // 숫자 값 } TEN_User_InitTypeDef; TEN_User_InitTypeDef ten; // ten이라는 이름의 구조체 생성 protected: typedef struct { uint8_t ct1; uint16_t tb; } TEN_User_InitTypeDef; TEN_User_Ini.. 데이터형 정리 *** 단, AVRStudio는 bit 변수를 지원하지 않는다 2진에서 8진으로 만들 때에는 오른쪽 끝에서부터 3자리씩 잘라서 바꾼다. 2진에서 16진으로 만들 때에는 오른쪽 끝에서부터 4자리씩 잘라서 바꾼다. 2진 10진 16진 모두 앞자리 0은 생략 가능 합니다. 0b00000001 = 0b1 0d01 = 0d1 0x01 = 0x1 위 숫자는 모두 같은 1이므로 0b00000001 = 0x01 = 0d01 = 1 우리가 많이 사용 하는 10진은 0d를 생략 가능 2진에서 각비트 위치와 상위비트(MSB), 하위비트(LSB)는 아래와 같습니다. 2진 MSB LSB bit 7 6 5 4 3 2 1 0 0b 0 0 0 0 0 0 0 0 형식 유효 자릿수 바이트 수 float 6 ~ 7 4 double 15 .. 이전 1 ··· 14 15 16 17 18 다음