STM32 25

STM32F407VE - 기초 6) ADC-2

이전 포스팅이어서 인터럽트를 사용해 ADC를 사용해보겠다.핀 설정을 하나만 하겠다.  이렇게 인터럽트를 설정해주자그리고 다음 코드를 넣자uint32_t adc_val[3];float volt[3];void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){ adc_val[0] = HAL_ADC_GetValue(&hadc1);} HAL_ADC_Start_IT(&hadc1); /* USER CODE BEGIN WHILE */ while (1) { volt[0] = adc_val[0]*3.3/4096; printf("adc_val[0]=%ld, Volt[0]=%f\r\n", adc_val[0],volt[0]); HAL_Delay(100); 그..

STM32 2024.11.24

STM32F407VE - 기초 5) ADC

이번 포스팅에서는 ADC를 이용하여 전압을 측정하여 시리얼 통신으로 값을 표기하는 활동을 해보겠습니다.총 3가지로 해볼것이다.- Polling- Interrupt- DMA USART2로 통신포트는 사용할 것이고, 그것은 이전 포스팅에서 알수 있다. Polling 먼저 해보겠다.그리고 배선은 다음과 같이 해주고, 저항은 전부 10k옴이다.(3.3V 2.2V 1.1V가 나오게끔하기 위해 10k옴을 직렬연결했다) 다음은 ADC를 설정하겠다.총 3개를 사용할거고, 채널은 0,1,4를 사용하겠다. ( 3, 2은 USART2 RX, TX 에서 사용중) 밑처럼 체크해주면 알아서 핀을 설정해준다 ( 외쳐 갓 IDE )  3개를 적용해야하니 위처럼 3으로 바꾸고 채널을 설정해주자 여기서 저것들이 무엇인지 궁금할 수 있다..

STM32 2024.11.23

STM32F407VE - 기초 4) USART-2

오늘은 USART를 인터럽트 방식과 DMA방식으로 해보자 먼저 인터럽트 방식으로 하자.저번 폴링방식에서 인터럽트 부분을 켜주면 되는데 같이 알아가보자 NVIC에서 USART2 인터럽트를 Enable해주자 저번과 같은 프로토콜을 사용할 것이고, 코드는 아래와 같다./* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 */uint8_t rx_data[4];void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(huart->Instance == USART2){ if(rx_data[0] == '2' && rx_data[3] == '3..

STM32 2024.11.22

STM32F407VE - 기초 3) USART

나는 USART2를 사용하겠다. 클럭은 이전과 같이 설정해준다. 먼저 폴링방식을 보겠다. 파라미터 설정은 다음과 같이 해준다    인터럽트를 미설정함으로써 자동으로 폴링 방식이 될것이다. 주의사항이건 내가 겪었던 일이고, 하루를 날려먹은 이유다.포스팅 전 미리 실습을 해봤을 때 자꾸 값이 보낸거랑 다르게 와서 모든 방법을 동원해 진행해보았다.내가 놓친부분이 있는데 클럭 설정부분이다.자세히 보자 저기 빨간색으로 줄쳐둔 부분이 25로 설정되어 있었다.하지만 나는 외부크리스탈 (8MHz)를 사용중이였는데 이것이 ST-Link랑 연결되어있어 8MHz의 클럭 신호를 만들어주어야한다고 한다.STM32의 클럭 입력으로 ST-Link의 MCO 핀에서 제공되는 8MHz 클럭을 사용하는 경우, RCC 설정에서 HSE 주파..

STM32 2024.11.21

STM32F407VE - 기초 2) EXTI

EXTI가 무엇일까?EXTI를 왜 써야할까?궁금한 점을 파헤치면서 실습까지 가보자 EXTI는 외부 인터럽트 ( External Interrupt )라고 한다.우리는 외부에서 GPIO로 신호가 들어오면 그것을 가지고 어떠한 동작을 한다.하지만 이때 어떻게 그 신호를 알아차리는가? 여러 방법이 있다.1. While 방식2. Timer기반 방식3. EXTI(외부인터럽트)방식 설명While 방식지속적으로 GPIO 핀의 상태를 읽어 특정 조건을 만족하면 동작을 수행Timer 방식타이머로 주기적으로 GPIO 상태를 체크EXTI 방식GPIO 핀의 Rising Edge, Falling Edge, 또는 Both Edges를 감지해 인터럽트를 발생시킴 장단점을 알아보겠다. 장점단점While 방식코드가 단순하고 설정이 필요..

STM32 2024.11.20

STM32F103C6T6A - 다루기

STM32F103C6T6A 제품에 대해 그냥 포스팅해본다. 여느때와 같이 칩에 대해 선택해주고, 이번엔 디버거가 조금 다르게 생겼다.https://www.devicemart.co.kr/goods/view?no=1326910 ST-LINK V2 호환 STM8/STM32 프로그래머/에뮬레이터 [SZH-PRBP-004]support the full range of STM32 SWD interface debug / support the full range STM8 SWIM download debugging / support for automatic firmware upgrade / ncrease the 5V power supply output / 색상은 랜덤입니다www.devicemart.co.kr 이건데 연결..

STM32 2024.11.17

STM32F407VE - 기초 1)

이번 포스팅은 103말고 407보드가 와서 사용해보려한다.해보는 김에 도서관에서 빌린 책을 이용하여 보드를 가지고 놀아보겠다.(책에서 가지고 노는 보드는 NUCLEO-F411RE 이다)사용하는 보드https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0.html STM32F407VET6 - STM32 F4VE V2.0The STM32-base project is meant for students and hobbyists. The goal of the STM32-base project is to provide a simple and easy to use base project for working with STM32 microcontrollers.stm32..

STM32 2024.11.16

STM32으로 Fan을 제어해보자 2)

이전 포스팅과 이어지니 확인바란다. Fan을 외부전압 5V에 연결하고, fan을 제어한다.내 보드가 3.3V여서 pwm을 제어할 때  5V Fan을 제어하기 어렵지 않을까?라고 생각했지만 3.3V도 High인식하여 문제가 없었다. 이전 포스팅에서의 코드를 그대로 사용하여 fan을 제어해보자 https://youtube.com/shorts/1zVyQvP8EvU?feature=share 점점 속도가 빨라지는 것을 볼수 있다. 그리고 최고 속도에 도달하면 다시 0부터 시작하여 속도가 낮아졌다가 다시 시작하는 것을 알 수 있다. 나는 value를 200 즉, 듀티사이클을 20%로 구동시켜보았는데  오실로스코프에서는 다음과 같은 결과를 얻었다.  PWM은 우리가 정해준 on off만 잘 동작하는 지 확인하면 된다..

STM32 2024.11.12

STM32으로 Fan을 제어해보자 1)

먼저 내가 사용할 Fan은 아래와 같다.https://www.devicemart.co.kr/goods/view?no=12494456&srsltid=AfmBOoo0L6lNkEaUiHM2kXaG34qWmAfQiTO9e2QsaqqR-gdEINd9-38V Jetson Nano PWM 제어 FAN 4020 5V [SZH-JET001]젯슨 나노 방열판에 사용 가능한 방열 팬입니다. PWM 제어를 통해 팬을 가동합니다.www.devicemart.co.kr 외부 전압을 이용할 예정이다.일단 보드의 데이터 시트를 보고 Timer를 선택하자 ( PWM제어를 할 예정임) 살펴보니 38번핀에 PA15번인 TIM2 채널 1이 있다. 이것을 이용해보겠다. ( TIM3이 아니고 2이다.) 이것을 설정해주고, 우리는 외부 크리스탈을..

STM32 2024.11.12

7세그먼트 코드 수정

7새그먼트 코드에서 이전 포스팅 영상을 보면 숫자 부분에 전부 불이 들어오는 걸 볼수 있다.만약 숫자가 카운트 되는 곳만 LED가 들어오길 원할 수 있고, 나도 시험삼아 다시 코드를 짜보겠다. 먼저 저번 코드를 보자 if(HAL_GPIO_ReadPin(GPIOB, PB_9_BUTTON_Pin) == HIGH){ display_number(Index, 50); continue; }else { display_number(Index, 50); ++Index; } // 함수부분 void display_number(int number, int repetitions) { int n1, n2, n3, n4; // 0~9 uint8_t num..

STM32 2024.11.10