灵动微电子 FTHR-G0001 pwm点灯测试

分享作者:wx17389398002965
评测品牌:灵动微电子
评测型号:FTHR-G0001
发布时间:2025-02-26 10:42:24
0
概要
pwm输出功能
开源口碑分享内容

这块板子可以插usb直接下载,同时可作为daplink调试使用非常方便

简写一下定时器1  pwm输出的代码

首先是配置定时器

void TIM1_Configure(void)

{

   GPIO_InitTypeDef        GPIO_InitStruct;

   TIM_OCInitTypeDef       TIM_OCInitStruct;

   TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;


   /* Compute the value to be set in ARR regiter to generate signal frequency at 100 Khz */

   uint32_t TimerPeriod = (TIM_GetTIMxClock(TIM1) / 100000 ) - 1;


   /* Compute CCR1 value to generate a duty cycle at 80% for channel 1 */

   uint32_t Channel1Pulse = ((uint32_t)800 * (TimerPeriod - 1)) / 1000;


   /* Compute CCR2 value to generate a duty cycle at 40% for channel 2 */

   uint32_t Channel2Pulse = ((uint32_t)400 * (TimerPeriod - 1)) / 1000;


   /* Compute CCR3 value to generate a duty cycle at 25% for channel 3 */

   uint32_t Channel3Pulse = ((uint32_t)250 * (TimerPeriod - 1)) / 1000;


   RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM1, ENABLE);


   TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);

   TIM_TimeBaseStruct.TIM_Prescaler         = 0;

   TIM_TimeBaseStruct.TIM_CounterMode       = TIM_CounterMode_Up;

   TIM_TimeBaseStruct.TIM_Period            = TimerPeriod;

   TIM_TimeBaseStruct.TIM_ClockDivision     = TIM_CKD_Div1;

   TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;

   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStruct);


   TIM_OCStructInit(&TIM_OCInitStruct);

   TIM_OCInitStruct.TIM_OCMode       = TIM_OCMode_PWM1;

   TIM_OCInitStruct.TIM_OutputState  = TIM_OutputState_Enable;

   TIM_OCInitStruct.TIM_Pulse        = 0;

   TIM_OCInitStruct.TIM_OCPolarity   = TIM_OCPolarity_High;

   TIM_OCInitStruct.TIM_OCIdleState  = TIM_OCIdleState_Set;


   TIM_OCInitStruct.TIM_Pulse = Channel1Pulse;

   TIM_OC1Init(TIM1, &TIM_OCInitStruct);


   TIM_OCInitStruct.TIM_Pulse = Channel2Pulse;

   TIM_OC2Init(TIM1, &TIM_OCInitStruct);


   TIM_OCInitStruct.TIM_Pulse = Channel3Pulse;

   TIM_OC3Init(TIM1, &TIM_OCInitStruct);


   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);


   GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);  /* TIM1_CH1  */

   GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_1);  /* TIM1_CH2  */

   GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_4);  /* TIM1_CH3  */


   GPIO_StructInit(&GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_8 | GPIO_Pin_9;

   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;

   GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_PP;

   GPIO_Init(GPIOA, &GPIO_InitStruct);


   TIM_Cmd(TIM1, ENABLE);


   TIM_CtrlPWMOutputs(TIM1, ENABLE);

}

然后是配置pwm功能

void TIM1_PWM_Output_Sample(void)

{

   printf("\r\nTest %s", __FUNCTION__);


   TIM1_Configure();


   while (1)

   {

       PLATFORM_LED_Toggle(LED1);

       PLATFORM_DelayMS(100);

   }

}

全部评论
暂无评论
0/144