This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS3in1/1.Cabin/4.MISC/ADS1278/Drivers/SYSTEM/pwm/pwm.c

121 lines
4.8 KiB
C
Raw Normal View History

/**
****************************************************************************************************
* @file gtim.c
* @author <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>(ALIENTEK)
* @version V1.1
* @date 2021-10-15
* @brief ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @license Copyright (c) 2020-2032, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾
****************************************************************************************************
* @attention
*
* ʵ<EFBFBD><EFBFBD>ƽ̨:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD> ̽<EFBFBD><EFBFBD><EFBFBD><EFBFBD> F407<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ:www.yuanzige.com
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
* <EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD>ַ:www.alientek.com
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ:openedv.taobao.com
*
* <EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD>
* V1.0 20211015
* <EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><EFBFBD><EFBFBD>
* V1.1 20211015
* 1,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>gtim_timx_pwm_chy_init<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
****************************************************************************************************
*/
#include "./SYSTEM/pwm/pwm.h"
TIM_HandleTypeDef g_timx_handle; /* <20><>ʱ<EFBFBD><CAB1>x<EFBFBD><78><EFBFBD><EFBFBD> */
/**
* @brief ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD>TIMX<EFBFBD><EFBFBD>ʱ<EFBFBD>жϳ<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note
* ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APB1,<EFBFBD><EFBFBD>PPRE1 <EFBFBD><EFBFBD> 2<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ΪAPB1ʱ<EFBFBD>ӵ<EFBFBD>2<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>APB1Ϊ42M, <EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʱ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> = 84Mhz
* <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Tout = ((arr + 1) * (psc + 1)) / Ft us.
* Ft=<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>λ:Mhz
*
* @param arr: <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>װֵ<EFBFBD><EFBFBD>
* @param psc: Ԥ<EFBFBD><EFBFBD>Ƶϵ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void gtim_timx_int_init(uint16_t arr, uint16_t psc)
{
GTIM_TIMX_INT_CLK_ENABLE(); /* ʹ<><CAB9>TIMxʱ<78><CAB1> */
g_timx_handle.Instance = GTIM_TIMX_INT; /* ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>x */
g_timx_handle.Init.Prescaler = psc; /* Ԥ<><D4A4>Ƶϵ<C6B5><CFB5> */
g_timx_handle.Init.CounterMode = TIM_COUNTERMODE_UP; /* <20><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
g_timx_handle.Init.Period = arr; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
HAL_TIM_Base_Init(&g_timx_handle);
HAL_NVIC_SetPriority(GTIM_TIMX_INT_IRQn, 1, 3); /* <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3 */
HAL_NVIC_EnableIRQ(GTIM_TIMX_INT_IRQn); /* <20><><EFBFBD><EFBFBD>ITMx<4D>ж<EFBFBD> */
HAL_TIM_Base_Start_IT(&g_timx_handle); /* ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>x<EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
}
/**
* @brief <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
/*********************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>PWM<57><4D><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*************************************/
TIM_HandleTypeDef g_timx_pwm_chy_handle; /* <20><>ʱ<EFBFBD><CAB1>x<EFBFBD><78><EFBFBD><EFBFBD> */
/**
* @brief ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD>TIMX ͨ<EFBFBD><EFBFBD>Y PWM<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>PWMģʽ1<EFBFBD><EFBFBD>
* @note
* ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APB1,<EFBFBD><EFBFBD>PPRE1 <EFBFBD><EFBFBD> 2<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* ͨ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ΪAPB1ʱ<EFBFBD>ӵ<EFBFBD>2<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>APB1Ϊ42M, <EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʱ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> = 84Mhz
* <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Tout = ((arr + 1) * (psc + 1)) / Ft us.
* Ft = <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>λ:Mhz
*
* @param arr: <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>װֵ
* @param psc: Ԥ<EFBFBD><EFBFBD>Ƶϵ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void gtim_timx_pwm_chy_init(uint16_t arr, uint16_t psc)
{
TIM_OC_InitTypeDef timx_oc_pwm_chy = {0}; /* <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_timx_pwm_chy_handle.Instance = GTIM_TIMX_PWM; /* <20><>ʱ<EFBFBD><CAB1>x */
g_timx_pwm_chy_handle.Init.Prescaler = psc; /* Ԥ<><D4A4>Ƶϵ<C6B5><CFB5> */
g_timx_pwm_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
g_timx_pwm_chy_handle.Init.Period = arr; /* <20>Զ<EFBFBD><D4B6><EFBFBD>װ<EFBFBD><D7B0>ֵ */
HAL_TIM_PWM_Init(&g_timx_pwm_chy_handle); /* <20><>ʼ<EFBFBD><CABC>PWM */
timx_oc_pwm_chy.OCMode = TIM_OCMODE_PWM1; /* ģʽѡ<CABD><D1A1>PWM1 */
timx_oc_pwm_chy.Pulse = arr / 2; /* <20><><EFBFBD>ñȽ<C3B1>ֵ,<2C><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>ռ<EFBFBD>ձ<EFBFBD> */
timx_oc_pwm_chy.OCPolarity = TIM_OCPOLARITY_LOW; /* <20><><EFBFBD><EFBFBD><EFBFBD>Ƚϼ<C8BD><CFBC><EFBFBD>Ϊ<EFBFBD><CEAA> */
HAL_TIM_PWM_ConfigChannel(&g_timx_pwm_chy_handle, &timx_oc_pwm_chy, GTIM_TIMX_PWM_CHY); /* <20><><EFBFBD><EFBFBD>TIMxͨ<78><CDA8>y */
HAL_TIM_PWM_Start(&g_timx_pwm_chy_handle, GTIM_TIMX_PWM_CHY); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦPWMͨ<4D><CDA8> */
}
/**
* @brief <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HAL_TIM_PWM_Init()<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param htim:<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
if (htim->Instance == GTIM_TIMX_PWM)
{
GPIO_InitTypeDef gpio_init_struct;
GTIM_TIMX_PWM_CHY_GPIO_CLK_ENABLE(); /* <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>y<EFBFBD><79>CPIOʱ<4F><CAB1> */
GTIM_TIMX_PWM_CHY_CLK_ENABLE(); /* ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1> */
gpio_init_struct.Pin = GTIM_TIMX_PWM_CHY_GPIO_PIN; /* ͨ<><CDA8>y<EFBFBD><79>CPIO<49><4F> */
gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
gpio_init_struct.Pull = GPIO_PULLUP; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Alternate = GTIM_TIMX_PWM_CHY_GPIO_AF; /* IO<49><4F>REMAP<41><50><EFBFBD><EFBFBD>, <20>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD>鿴ͷ<E9BFB4>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>õ<EFBFBD>˵<EFBFBD><CBB5>! */
HAL_GPIO_Init(GTIM_TIMX_PWM_CHY_GPIO_PORT, &gpio_init_struct);
}
}