STM32 21

STM32 익히기 2)

이번엔 RTOS에 대해 알아보고 간단한 실습을 해보겠다. 먼저 RTOS란 무엇인가?Real Time Operating System라고 하며 실시간 운영체제 라고 말한다.제한된 시간내에 원하는 작업을 모두 처리하는 것을 보장하는 운영체제이다. 여기서 FreeRTOS를 실습할건데 왜 앞에 Free가 붙었나?라고 말한다면 누구나 사용가능하고, 상업적으로 사용해도 비용 청구가 없는 무료이기 때문에 Free가 붙었다. 여기서 선점형과 비선점형이 나오는데 이는 운영체제에 대해 알면 알것이다.선점형 하나의 프로세스가 다른 프로세스 대신에 프로세서를 차지할 수 있다.비선점형 하나의 프로세스가 끝나지 않으면 다른 프로세스는 프로세서를 차지할 수 없다. 제공되는 API는 다음과 같다.종류설명xTaskCreate()Task..

STM32 2024.12.05

STM32 익히기 1)

STM32에 대해 계속 공부하고 있지만, 익숙해지는 것이 제일 우선이라고 생각한다.이전에 기초를 공부했지만 이번엔 또 다른 책인 STM32Fx Cortex ARM 프로그래밍 기초편에 대해 빠르게 공부하면서 익숙해져가겠다. 몇주에 걸쳐 포스팅이 끝날지 모르지만 그날 이해한 부분까지 계속 포스팅을 올려보려한다.  일단 스위치 on off로 LED 제어를 하고, 다음은 스위치가 100ms이상 눌렸을 때 켜지고, 켜진 상태에서도 스위치가 100ms이사 눌렸을 때만 꺼지도록 해보겠다. (채터링 방지) UML Tool ( 관련 모양에 대한 설명은 https://1000yun.tistory.com/16 참조 바람 ) 다음은 간단하게 회로도를 그려봤다. 이렇게 LED를 제어해볼 예정이다. ( PB3 ) /* USER..

STM32 2024.12.02

RTC사용해보기

Data와 Time을 한번 UART로 보내볼건데, 먼저 시간을 우리가 설정해줄것이다. 먼저 RTC란 현재의 시간을 유지시키는 컴퓨터 시계이다.그래서 현재의 시간은 우리가 정해주고 (그러기 싫으면 NTP) 시간의 흐름을 출력해보자 먼저 외부클럭을 다음과 같이 설정해주자  날짜 시간을 설정해준다.RTC의 동작 주기는 기본적으로 LSE(32.768 kHz) 또는 LSI(약 32 kHz) 클럭을 사용RTC를 정확히 1Hz로 동작시키기 위해, 분주기를 설정하여 클럭을 나눈다.RTC 클럭을 1Hz로 만들기 위한 Prescaler 계산  그리고 다음과 같은 코드를 짜준다.RTC_HandleTypeDef hrtc;UART_HandleTypeDef huart2;/* USER CODE BEGIN PV *//* USER C..

STM32 2024.11.26

I2C로 LCD 제어해보기

STM32407VE 에서 I2C를 먼저 설정해주자 설정은 이렇게만 해주고 코드를 작성하자. 코드는 다음과 같다.라이브러리는 https://github.com/alixahedi/i2c-lcd-stm32 GitHub - alixahedi/i2c-lcd-stm32: i2c lcd STM32 libraryi2c lcd STM32 library. Contribute to alixahedi/i2c-lcd-stm32 development by creating an account on GitHub.github.com이곳에서 제공해준 라이브러리를 사용한다. I2C_HandleTypeDef hi2c1;I2C_LCD_HandleTypeDef lcd1;/* USER CODE END 0 *//** * @brief The a..

STM32 2024.11.25

STM32F407VE - 기초 7) Timer

Timer를 한번 다루어 보겠다.폴링과 인터럽트로 해보겠다. 폴링은 인터럽트만 체크하지 않으면 됨을 이전 포스팅에서 계속 다루었다. 이렇게 하고, LED하나를 달아 점등하게 했다. 그리고 이것을 오실로스코프를 찍어본 결과이다.코드는 다음과 같다. HAL_TIM_Base_Start(&htim6); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(__HAL_TIM_GET_FLAG(&htim6, TIM_FLAG_UPDATE)) { __HAL_TIM_CLEAR_IT(&htim6, TIM_IT_UPDATE); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); } /* ..

STM32 2024.11.25

MCU Internal 온도 측정하기

먼저 데이터 시트에서 온도를 어떻게 계산할 수 있는지 확인하자  Temperature (in C) = {(V25 - VSENSE) / Avg_Slope} + 25 이고VSENSE = ADC 채널의 값 * 3000 / 4096V25는 0.76 = mV로 바꾸면 760이다.Avg_Slope은 mV이니까 그대로 2.5따라서 {( VSENSE- 760 ) / 2.5 } + 25 이 된다.나중에 수식에 넣어주면 된다 다음을 따라서 ADC를 설정해주자  다음으로 코드를 짜주자 (폴링방식으로 진행함) uint32_t adc_data;float Temp;void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){ adc_data = HAL_ADC_GetValue(&hadc1); ..

STM32 2024.11.24

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