5117 views|3 replies

174

Posts

1

Resources
The OP
 

[Fudan Micro FM33LC046N Review] + GPTIM_PWM [Copy link]

 This post was last edited by chrisrh on 2021-3-10 10:05

Learn about timers. The timers of FM33LC046N are divided into four categories:

Advanced timer ATIM, general timer GPTIM, basic timer BSTIM32, and low power timer LPTIM32

Use the general timer GPTIM to complete the PWM control of simple four-way LED lights

Connect the flying wire of LED4 to PB11

Configure GPTIM initialization parameters in mf_config.c:

/**
  * @brief GPTIM0_TimerBase Initialization function
  * @param  void
  * @retval None
  */
void MF_GPTIM0_TimerBase_Init(uint16_t psc,uint16_t arr)
{
    /*IO CONFIG*/
    FL_GPTIM_InitTypeDef    TimerBaseInitStruct;

    TimerBaseInitStruct.prescaler = (uint16_t)psc;//预分频系数
    TimerBaseInitStruct.counterMode = FL_GPTIM_COUNTER_DIR_UP;//计数模式
    TimerBaseInitStruct.autoReload = arr;//自动重装载值 
    TimerBaseInitStruct.autoReloadState = DISABLE;//预装载使能
    TimerBaseInitStruct.clockDivision = FL_GPTIM_CLK_DIVISION_DIV1;
    //定时器分频系数与数字滤波器所使用的采样时钟分频比
    FL_GPTIM_Init(GPTIM0,&TimerBaseInitStruct );
}
 
/**
  * @brief  GPTIM0_Channel1 Initialization function 
	_____PB10_____GPTIM0_CH1_____LED3_____
	_____PB11_____GPTIM0_CH2_____LED4_____
  * @param  void
  * @retval None
  */
void MF_GPTIM0_Channel1_Channel2_Init(void)
{
    FL_GPIO_InitTypeDef    GPIO_InitStruct;
    FL_GPTIM_OC_InitTypeDef    defaultInitStruct;

    GPIO_InitStruct.pin = FL_GPIO_PIN_10|FL_GPIO_PIN_11;
    GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = DISABLE;
    GPIO_InitStruct.remapPin = ENABLE;

    FL_GPIO_Init( GPIOB, &GPIO_InitStruct );

    defaultInitStruct.OCMode = FL_GPTIM_OC_MODE_PWM1;//比较输出模式
    defaultInitStruct.OCFastMode = DISABLE;//比较输出通道快速模式使能
    defaultInitStruct.OCPreload = DISABLE;//输出比较预装载
    defaultInitStruct.compareValue = 0x1F4U;//通道比较值
    defaultInitStruct.OCPolarity = FL_GPTIM_OC_POLARITY_NORMAL;//比较输出极性
    defaultInitStruct.OCETRFStatus = DISABLE;//ETR清0使能

    FL_GPTIM_OC_Init(GPTIM0,FL_GPTIM_CHANNEL_1,&defaultInitStruct );
	FL_GPTIM_OC_Init(GPTIM0,FL_GPTIM_CHANNEL_2,&defaultInitStruct );
}

/**
  * @brief  GPTIM1_TimerBase Initialization function
  * @param  void
  * @retval None
  */
void MF_GPTIM1_TimerBase_Init(uint16_t psc,uint16_t arr)
{
    /*IO CONFIG*/
    FL_GPTIM_InitTypeDef    TimerBaseInitStruct;

    TimerBaseInitStruct.prescaler = (uint16_t)psc;//预分频系数
    TimerBaseInitStruct.counterMode = FL_GPTIM_COUNTER_DIR_UP;//计数模式
    TimerBaseInitStruct.autoReload = arr;//自动重装载值
    TimerBaseInitStruct.autoReloadState = DISABLE;//预装载使能
    TimerBaseInitStruct.clockDivision = FL_GPTIM_CLK_DIVISION_DIV1;
    //定时器分频系数与数字滤波器所使用的采样时钟分频比
    FL_GPTIM_Init(GPTIM1,&TimerBaseInitStruct );
}
 
/**
  * @brief  GPTIM1_Channel1_Channel2 Initialization function 
	_____PC0_____GPTIM1_CH1_____LED1______
	_____PC1_____GPTIM1_CH2_____LED2______
  * @param  void
  * @retval None
  */
void MF_GPTIM1_Channel1_Channel2_Init(void)
{
    FL_GPIO_InitTypeDef    GPIO_InitStruct;
    FL_GPTIM_OC_InitTypeDef    defaultInitStruct;

    GPIO_InitStruct.pin = FL_GPIO_PIN_0|FL_GPIO_PIN_1;
    GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = DISABLE;
    GPIO_InitStruct.remapPin = ENABLE;

    FL_GPIO_Init( GPIOC, &GPIO_InitStruct );

    defaultInitStruct.OCMode = FL_GPTIM_OC_MODE_PWM1;//比较输出模式
    defaultInitStruct.OCFastMode = DISABLE;//比较输出通道快速模式使能
    defaultInitStruct.OCPreload = DISABLE;//输出比较预装载
    defaultInitStruct.compareValue = 0x1F4U;//通道比较值
    defaultInitStruct.OCPolarity = FL_GPTIM_OC_POLARITY_NORMAL;//比较输出极性
    defaultInitStruct.OCETRFStatus = DISABLE;//ETR清0使能

    FL_GPTIM_OC_Init(GPTIM1,FL_GPTIM_CHANNEL_1,&defaultInitStruct );
	FL_GPTIM_OC_Init(GPTIM1,FL_GPTIM_CHANNEL_2,&defaultInitStruct );
}

After writing the GPTIM initialization parameters, modify the mf_config.h header file and call it in MF_Config_Init

void MF_Config_Init(void)
{
    /*FUNCTION CALL*/
    MF_GPTIM0_TimerBase_Init(999,200);
    MF_GPTIM0_Channel1_Channel2_Init();
	MF_GPTIM1_TimerBase_Init(999,200);
	MF_GPTIM1_Channel1_Channel2_Init();
}

Start GPTIM0 and GPTIM1 in the main function and set the comparison parameter value for comparison


int main(void)
{
    uint16_t led1pwmval=0,led2pwmval=50,led3pwmval=100,led4pwmval=150;
  uint8_t dir1=1,dir2=1,dir3=1,dir4=1;

    MF_Clock_Init();
    MF_SystemClock_Config();

    UserInit();

    MF_Config_Init();
    FL_GPTIM_Enable(GPTIM0);
    FL_GPTIM_Enable(GPTIM1);

    while(1)
    {     
		DelayMs(10);
		if(dir1)led1pwmval++;
		else led1pwmval--;
		if(dir2)led2pwmval++;
		else led2pwmval--;
		if(dir3)led3pwmval++;
		else led3pwmval--;
		if(dir4)led4pwmval++;
		else led4pwmval--;
		if(led1pwmval>200)dir1=0;
		if(led1pwmval==0)dir1=1;
		if(led1pwmval>200)dir2=0;
		if(led1pwmval==0)dir2=1;
		if(led1pwmval>200)dir3=0;
		if(led1pwmval==0)dir3=1;
		if(led1pwmval>200)dir4=0;
		if(led1pwmval==0)dir4=1;
		FL_GPTIM_WriteCompareCH1(GPTIM1,led1pwmval);//LED1
		FL_GPTIM_WriteCompareCH2(GPTIM1,led2pwmval);//LED2
		FL_GPTIM_WriteCompareCH1(GPTIM0,led3pwmval);//LED3
		FL_GPTIM_WriteCompareCH2(GPTIM0,led4pwmval);//LED4
    }
}

The effects of controlling LED1~4 through PWM of GPTIM0 and GPTIM1 are as follows:

GPTIM_PWM.zip

2.82 MB, downloads: 65

This post is from Domestic Chip Exchange

Latest reply

The host is very careful and attentive. He commented it so quickly. Thank you.   Details Published on 2021-3-10 19:22
 
 

6587

Posts

0

Resources
2
 

It would be more perfect if you can add comments to the key statements of the code so that everyone can understand it a little bit.

This post is from Domestic Chip Exchange

Comments

ok  Details Published on 2021-3-10 16:09
 
 
 

174

Posts

1

Resources
3
 
Jacktang posted on 2021-3-10 11:01 It would be more perfect if you could add comments to the key statements of the code so that everyone can understand it a little bit

ok

GPTIM PWM输出.zip

2.82 MB, downloads: 53

This post is from Domestic Chip Exchange

Comments

The host is very careful and attentive. He commented it so quickly. Thank you.  Details Published on 2021-3-10 19:22
 
 
 

6587

Posts

0

Resources
4
 

The host is very careful and attentive. He commented it so quickly. Thank you.

This post is from Domestic Chip Exchange
 
 
 

Just looking around
Find a datasheet?

EEWorld Datasheet Technical Support

Related articles more>>

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号
快速回复 返回顶部 Return list