查看: 10360|回复: 0

复旦微FM33LC046N_ GPTIM_PWM

[复制链接]

221

主题

397

帖子

3584

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3584
QQ
发表于 2021-3-15 21:31:05 | 显示全部楼层 |阅读模式

原帖地址为:http://bbs.eeworld.com.cn/thread-1158808-1-1.html


FM33LC046N的定时器分四大类:

高级定时器ATIM、通用定时器GPTIM、基本定时器BSTIM32、和低功耗定时器LPTIM32

使用通用定时器GPTIM完成简单的四路LED灯的PWM控制

11.jpg

将LED4飞线与PB11连接

在mf_config.c中配置GPTIM初使化参数:

  1. **
  2.   * @brief GPTIM0_TimerBase Initialization function
  3.   * @param  void
  4.   * @retval None
  5.   */
  6. void MF_GPTIM0_TimerBase_Init(uint16_t psc,uint16_t arr)
  7. {
  8.     /*IO CONFIG*/
  9.     FL_GPTIM_InitTypeDef    TimerBaseInitStruct;

  10.     TimerBaseInitStruct.prescaler = (uint16_t)psc;//预分频系数
  11.     TimerBaseInitStruct.counterMode = FL_GPTIM_COUNTER_DIR_UP;//计数模式
  12.     TimerBaseInitStruct.autoReload = arr;//自动重装载值
  13.     TimerBaseInitStruct.autoReloadState = DISABLE;//预装载使能
  14.     TimerBaseInitStruct.clockDivision = FL_GPTIM_CLK_DIVISION_DIV1;
  15.     //定时器分频系数与数字滤波器所使用的采样时钟分频比
  16.     FL_GPTIM_Init(GPTIM0,&TimerBaseInitStruct );
  17. }

  18. /**
  19.   * @brief  GPTIM0_Channel1 Initialization function
  20.         _____PB10_____GPTIM0_CH1_____LED3_____
  21.         _____PB11_____GPTIM0_CH2_____LED4_____
  22.   * @param  void
  23.   * @retval None
  24.   */
  25. void MF_GPTIM0_Channel1_Channel2_Init(void)
  26. {
  27.     FL_GPIO_InitTypeDef    GPIO_InitStruct;
  28.     FL_GPTIM_OC_InitTypeDef    defaultInitStruct;

  29.     GPIO_InitStruct.pin = FL_GPIO_PIN_10|FL_GPIO_PIN_11;
  30.     GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  31.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  32.     GPIO_InitStruct.pull = DISABLE;
  33.     GPIO_InitStruct.remapPin = ENABLE;

  34.     FL_GPIO_Init( GPIOB, &GPIO_InitStruct );

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

  41.     FL_GPTIM_OC_Init(GPTIM0,FL_GPTIM_CHANNEL_1,&defaultInitStruct );
  42.         FL_GPTIM_OC_Init(GPTIM0,FL_GPTIM_CHANNEL_2,&defaultInitStruct );
  43. }

  44. /**
  45.   * @brief  GPTIM1_TimerBase Initialization function
  46.   * @param  void
  47.   * @retval None
  48.   */
  49. void MF_GPTIM1_TimerBase_Init(uint16_t psc,uint16_t arr)
  50. {
  51.     /*IO CONFIG*/
  52.     FL_GPTIM_InitTypeDef    TimerBaseInitStruct;

  53.     TimerBaseInitStruct.prescaler = (uint16_t)psc;//预分频系数
  54.     TimerBaseInitStruct.counterMode = FL_GPTIM_COUNTER_DIR_UP;//计数模式
  55.     TimerBaseInitStruct.autoReload = arr;//自动重装载值
  56.     TimerBaseInitStruct.autoReloadState = DISABLE;//预装载使能
  57.     TimerBaseInitStruct.clockDivision = FL_GPTIM_CLK_DIVISION_DIV1;
  58.     //定时器分频系数与数字滤波器所使用的采样时钟分频比
  59.     FL_GPTIM_Init(GPTIM1,&TimerBaseInitStruct );
  60. }

  61. /**
  62.   * @brief  GPTIM1_Channel1_Channel2 Initialization function
  63.         _____PC0_____GPTIM1_CH1_____LED1______
  64.         _____PC1_____GPTIM1_CH2_____LED2______
  65.   * @param  void
  66.   * @retval None
  67.   */
  68. void MF_GPTIM1_Channel1_Channel2_Init(void)
  69. {
  70.     FL_GPIO_InitTypeDef    GPIO_InitStruct;
  71.     FL_GPTIM_OC_InitTypeDef    defaultInitStruct;

  72.     GPIO_InitStruct.pin = FL_GPIO_PIN_0|FL_GPIO_PIN_1;
  73.     GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  74.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  75.     GPIO_InitStruct.pull = DISABLE;
  76.     GPIO_InitStruct.remapPin = ENABLE;

  77.     FL_GPIO_Init( GPIOC, &GPIO_InitStruct );

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

  84.     FL_GPTIM_OC_Init(GPTIM1,FL_GPTIM_CHANNEL_1,&defaultInitStruct );
  85.         FL_GPTIM_OC_Init(GPTIM1,FL_GPTIM_CHANNEL_2,&defaultInitStruct );
  86. }
复制代码

编写完GPTIM初使化参数同时修改mf_config.h头文件,在MF_Config_Init中进行调用

  1. void MF_Config_Init(void)
  2. {
  3.     /*FUNCTION CALL*/
  4.     MF_GPTIM0_TimerBase_Init(999,200);
  5.     MF_GPTIM0_Channel1_Channel2_Init();
  6.         MF_GPTIM1_TimerBase_Init(999,200);
  7.         MF_GPTIM1_Channel1_Channel2_Init();
  8. }
复制代码

在main函数中启动GPTIM0和GPTIM1,设置比较参数值进行比较

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

  5.     MF_Clock_Init();
  6.     MF_SystemClock_Config();

  7.     UserInit();

  8.     MF_Config_Init();
  9.     FL_GPTIM_Enable(GPTIM0);
  10.     FL_GPTIM_Enable(GPTIM1);

  11.     while(1)
  12.     {     
  13.                 DelayMs(10);
  14.                 if(dir1)led1pwmval++;
  15.                 else led1pwmval--;
  16.                 if(dir2)led2pwmval++;
  17.                 else led2pwmval--;
  18.                 if(dir3)led3pwmval++;
  19.                 else led3pwmval--;
  20.                 if(dir4)led4pwmval++;
  21.                 else led4pwmval--;
  22.                 if(led1pwmval>200)dir1=0;
  23.                 if(led1pwmval==0)dir1=1;
  24.                 if(led1pwmval>200)dir2=0;
  25.                 if(led1pwmval==0)dir2=1;
  26.                 if(led1pwmval>200)dir3=0;
  27.                 if(led1pwmval==0)dir3=1;
  28.                 if(led1pwmval>200)dir4=0;
  29.                 if(led1pwmval==0)dir4=1;
  30.                 FL_GPTIM_WriteCompareCH1(GPTIM1,led1pwmval);//LED1
  31.                 FL_GPTIM_WriteCompareCH2(GPTIM1,led2pwmval);//LED2
  32.                 FL_GPTIM_WriteCompareCH1(GPTIM0,led3pwmval);//LED3
  33.                 FL_GPTIM_WriteCompareCH2(GPTIM0,led4pwmval);//LED4
  34.     }
  35. }
复制代码

通过GPTIM0和GPTIM1的PWM控制LED1~4效果如下:

222222.gif   


33333.gif




具体的程序再附件:

GPTIM_PWM.zip (2.82 MB, 下载次数: 1745)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表