Stm 32

#include "main.h"

TIM_HandleTypeDef htim2;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_TIM2_Init();

    // เริ่มต้น PWM
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

    while (1) {
        // ปรับความเร็วมอเตอร์
        __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 50); // 50% Duty Cycle
        HAL_Delay(2000);

        __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 75); // 75% Duty Cycle
        HAL_Delay(2000);

        __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 25); // 25% Duty Cycle
        HAL_Delay(2000);
    }
}

// ฟังก์ชันการตั้งค่า Timer
static void MX_TIM2_Init(void) {
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};

    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 719; // กำหนด Prescaler
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = 100; // กำหนด Period ให้ได้ 1 kHz
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    if (HAL_TIM_Base_Init(&htim2) != HAL_OK) {
        Error_Handler();
    }

    if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) {
        Error_Handler();
    }

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 50; // เริ่มต้นที่ 50% Duty Cycle
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
        Error_Handler();
    }

    HAL_TIM_MspPostInit(&htim2);
}
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่