STM32/touchGFX_STM32 (17) 썸네일형 리스트형 [stm32F746] 100ms마다 USART1 1byte tx test * 목표 : 타이머를 사용하여 100ms마다 UART1 1byte data(0x1) 송신 1. 코드 작성(main.c) /* USER CODE BEGIN PV */ volatile int gTimerCnt; // Count를 위한 변수 /* USER CODE END PV */ ----------------------------------------------------------------- - 타이머 시작 함수 호출 /* USER CODE BEGIN 2 */ if(HAL_TIM_Base_Start_IT(&htim3) != HAL_OK) { Error_Handler(); } /* USER CODE END 2 */ ---------------------------------------------------.. [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.. 이전 1 2 3 다음