기초 예제이긴 하지만 기록을 위해 남긴다.
먼저 클락설정부터 해준다.
SYS clock은 최대인 180MHz로 했고 APB1 Timer clocks는 90MHz이다.
datasheet의 20페이지 또는 90페이지를 확인하면 각각의 타이머가 어떤 버스의 클락소스를 사용하는지 확인할 수 있다.
타이머 2,3,4를 모두 enable 시키고 파라미터 세팅에서 Prescaler와 ARR을 설정해준다.
각각 0.1초, 0.5초, 1초를 뽑아내려면
주기는 주파수의 역수이니까 10Hz, 2Hz, 1Hz로 설정하면 된다.\
-1 해주는 이유는 0부터 카운트 하기 때문이다.
타이머 셋 다 인터럽트를 켠다.
각각 MX_TIM2_Init(); 함수를 따라가보면 아까 MX툴에서 설정해둔 값이 들어가 있는것을 볼 수 있다.
LED핀 설정
위와 같이 User Label을 쓰면 MX_GPIO_Init과 main.h에 아래와 같이 define 된다.
/* Private defines -----------------------------------------------------------*/
#define LED1_Pin GPIO_PIN_0
#define LED1_GPIO_Port GPIOB
#define LED3_Pin GPIO_PIN_14
#define LED3_GPIO_Port GPIOB
#define LED2_Pin GPIO_PIN_7
#define LED2_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */
보드매뉴얼 24페이지
소스코드
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);
HAL_TIM_Base_Start_IT(&htim4);
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2){
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
HAL_TIM_Base_Start_IT(&htim2);
}else if(htim->Instance==TIM3){
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
HAL_TIM_Base_Start_IT(&htim3);
}else if(htim->Instance==TIM4){
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin);
HAL_TIM_Base_Start_IT(&htim4);
}
}
/* USER CODE END 4 */
'임베디드 개발 > STM32 (ARM Cortex-M)' 카테고리의 다른 글
STM32 ] 메모리 영역 구분 ( Code, Data, BSS, Heap, Stack ) (0) | 2022.06.30 |
---|---|
STM32 ] PWM Edge-aligned mode(UP/DOWN), Center-aligned mode PWM mode 1 or PWM mode 2 일 때 파형 오실로스코프로 확인 (0) | 2022.06.29 |
STM32 ] 플래시 메모리 지우고 다시 쓰기 + 리틀 엔디안과 빅 엔디안 + ST-link utility 사용법 (0) | 2022.06.28 |
STM32 ] 블루투스 모듈 MLT-BT05 사용하기 / 메시지 주고받기 , AT 커맨드 (0) | 2022.06.19 |
STM32 ] RTC 와 LCD 모듈을 사용한 알람시계 구현 (2) - 더블클릭 기능 추가 (0) | 2022.06.19 |