본문 바로가기

stm32f1

(31)
16.[stm32f103][hal]lcd -1602(1) 1. 프로젝트 파일 2. Cube 설정 3. 파일 확인하기 위에 첨부파일을 그냥 붙여넣기 하셔도 되는데 만드는 과정은 처음 프로젝트를 만들면 main.h 에 #include "main.h" #include "stm32f1xx_hal.h" 이렇게 있으실겁니다. 이걸 지우고 include.h로 묶어 놨어요~~ 헤더파일 만드는 과정은 4. 소스 해석 lcd_1602.h #ifndef __lcd_1602_H #define __lcd_1602_H #include "include.h" #define LCD_CMD 0 #define LCD_DATA 1 /* * LCD Command Set */ #define CMD_CLR 0X01 #define CMD_HOME 0X02 #define CMD_ENTRY 0x06 #de..
15.[stm32f103][hal] 타이머 (6) _ Timer PWM One Pulse Mode 1. STM32Cube 설정 원펄스 모드 에 대해서 알아볼까 합니다. 원펄스 모드 말 그대로 한번만 펄스를 준다는 말이지요~ 소스랑 결과를 같이 보시면 이해가 빨리 될거 같습니다. TIM8 설정 부분에서 Repetition 부분이 새로 생긴게 보일실겁니다. 이부분이 몇번의 펄스를 주는가 입니다. 2. 소스 int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM8_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); /* USER CODE END 2 */ while (1) { HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); H..
14.[stm32f103][hal] 타이머 (5) _ Timer PWM Interrupt 1.stm32Cube 설정 주파수 = 8000000/80/1000 = 100Hz 듀티비 = 100(주파수)/100(설정값) * 10 = 10% 2. 소스 main.c int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM8_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start_IT(&htim8, TIM_CHANNEL_1); /* USER CODE END 2 */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } stm32f1xx_it.c void TIM8_CC_IRQHandler(void..
13.[stm32f103][hal] 타이머 (4) _ Timer PWM 1. stm32cube 설정 시간 계산 T = Counter Period / (APB2 timer clocks / Prescaler) %Counter Period 는 최소 100이상이여야한다. %값은 16비트제한으로 최대 65536 입니다. %정확한 카운터를 위해서는 -1을 해야한다. duty비(%) = 100/(Prescaler / Pulse) 시간 계산은 T = 8000000/8 / 1000 = 1ms 듀티비는 100 이면 10% 입니다. 2. 소스 int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM8_Init(); HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); while (1) { } } m..
12.[stm32f103][hal] 타이머 (3) _ Timer OC(Output Compare) Interrupt 1. stm32cube 설정 2. 소스 main.c int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM8_Init(); HAL_TIM_OC_Start_IT(&htim8,TIM_CHANNEL_1); while (1) { } } stm32f1xx_it.c 에 보면 맨 밑에 내려가면 아래와 같은 함수가 생성되어 있을겁니다. 그 안에 HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_7); 추가하면 됩니다. void TIM8_CC_IRQHandler(void) { /* USER CODE BEGIN TIM8_CC_IRQn 0 */ HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_7); /* USER CODE..
11.[stm32f103][hal] 타이머 (2) _ Timer OC(Output Compare) 1. STM32CubeMX 설정 시간 공식 ((APB1or2 timer clock / Prescaler-1) / Counter Period-1) =((8000000 / (8)) / (1000)) =500Hz 1/500 = 0.002 = 2ms 2. 소스 int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM8_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_OC_Start(&htim8,TIM_CHANNEL_1); /* USER CODE END 2 */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }..
10.[stm32f103][hal] 타이머 (1) _ 개요 데이터시트(stm32f103) 1. 타이머 종류는 총 5가지가 있습니다. SysTick Timer 시스템 타이머 hal_delay 가 이걸로 작동하고 있습니다. IWDG,WWDG Independent Watchdog Timer, Window Watchdog Timer Basic Timer 간단한 기능을 하는 내부 타이머 Tim6,7 General purpose timer 범용 타이머 Tim2,3,4,5 Advanced control timer 고급 타이머 (범용타이머+@) Tim1,8 2. STM32Cube 설정 설정하려고 TIM을 여는 순간 영어 + 이상한 용어들로 인해 맨붕... 천천히 살펴보아요~ Slave Mode : 외부 신호에 의해 펄스를 On/Off 시킬때 사용하는 모드에요~기본적으로 Dis..
9.[stm32f103][hal] RCC_MCO 로 Clock 확인하기 1. RCC 설명 RCC 은 클럭을 컨트롤하는 레지스터입니다. 크게 HSI,HSE,PLL,SYSCLK 등이 있습니다. HSI: 내부에서 제공하는 Clock HSE: 외부에서 제공하는 Clock PLL: Clock을 증폭 SYSCLK: 결과물 LSE : 외부 정교한 클락 (RTC)에 사용됨 이렇게 설명할수 있겠습니다. 2. MCO 설명 arm 에서는 클럭을 외부에서 측정할 수 있게 제공하는 기능이 있습니다. 그것이 MCO (Microcontroller Clock Output) PA8번입니다. PA8번 핀을 통해서 HSI LSE HSE PLL SYSCLK 를 측정할 수 있습니다. 3. 핀설정 4. PLL 없이 HSE로 설정 후 측정하기 5. PLL 설정 후 SYSCLK 측정하기 6. 소스 설정대로만 하면 기..