pwm 출력으로 led 밝기 조정
clock : 64MHz
Prescaler : 6400-1
ARR : 100-1
CCR1 : 100-1
PA0(pwm output) : OUTPUT LED
PA4, PB5,8,10 : SW1:4
Timer2: channel 1 (pwm generation ch1)
ccr1(pwm pulse) 초깃값 100-1
밝기가 조정되는걸 눈으로 체감하려면 주파수를 높여야한다. arr 값을 100-1로 설정하여 arr이 reload되는 시간을 0.01초로 바꾸었다. 그리고 pwm의 pulse값을 스위치로 조정하며 밝기를 변경하였다.
스위치를 누르면 ccr1의 값이 변경되면서 밝기가 조정된다.
CCR값을 조정하는 방법은 세가지다.
1. oc 설정 구조체 선언 후 구조체.Pulse 에 값 조정
2. HAL_TIM_SET_COMPARE 함수로 값 변경
3. TIMx->CCRx 직접 레지스터 값 변경
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
//TIM_OC_InitTypeDef sConfigOC = {0};
switch(GPIO_Pin){
case GPIO_PIN_8 :
//sConfigOC.Pulse = 10-1;
TIM2->CCR1 = 100-1;
//HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 25-1);
break;
case GPIO_PIN_4 :
//sConfigOC.Pulse = 30-1;
TIM2->CCR1 = 66-1;
//HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 50-1);
break;
case GPIO_PIN_5 :
//sConfigOC.Pulse = 50-1;
TIM2->CCR1 = 33-1;
//__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 75-1);
break;
case GPIO_PIN_10 :
//sConfigOC.Pulse = 100-1;
TIM2->CCR1 = 0;
//__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 100-1);
break;
default :
break;
}
/*
if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
*/
}
/* USER CODE END 4 */
// 타이머2 PWM 채널1 시작
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
// 스위치 인터럽트
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
/* USER CODE END 2 */
'ARM' 카테고리의 다른 글
온도센서(LM35) 를 이용한 ADC (0) | 2022.04.26 |
---|---|
printf 실수(float) 출력 (0) | 2022.04.25 |
Timer PWM 이용한 LED 출력 (1) | 2022.04.24 |
Timer Output Compare로 LED 출력 (1) | 2022.04.24 |
Timer로 1초간격으로 led 토글 (0) | 2022.04.24 |