GD32F103 配置timer0输出PWM

编译环境:

库:GigaDevice.GD32F10x_DFP.2.0.2

编译器:KEIL 5.30

芯片:GD32F103C8 

 这句话很重重要,不配置输不出PWM的。

timer_primary_output_config(TIMER0,ENABLE);

 C文件

#include "gd32f10x_libopt.h"

/********************************************************************
Function:beep init
INPUT	:
OUTPUT	:	
NOTE	:   
********************************************************************/
void fun_Beep_init(void)
{
	  timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
//************************IO config*****************************
    rcu_periph_clock_enable(BEEP_PWM_GPIO_CLK);
    rcu_periph_clock_enable(RCU_AF);

    /*Configure PA8 as alternate function*/
    gpio_init(BEEP_PWM_GPIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, BEEP_PWM_PIN);
  
//************************timer config************************//
/* -----------------------------------------------------------------------
    TIMER0 configuration:
    TIMER0CLK = SystemCoreClock / 108 = 1MH
    TIMER0 channel1 duty cycle = (4000/ 16000)* 100  = 25% 62.5HZ
    ----------------------------------------------------------------------- */


    rcu_periph_clock_enable(RCU_TIMER0);

    timer_deinit(TIMER0);

    /* TIMER0 configuration */
    timer_initpara.prescaler         = BEEP_PWM_PRESCALER;
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = BEEP_PWM_PERIOD;
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER0,&timer_initpara);

    /* CH1 configuration in PWM mode1 */
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;

    timer_channel_output_config(TIMER0,TIMER_CH_0,&timer_ocintpara);

    /* CH1 configuration in PWM mode1,duty cycle 25% */
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,3999);
    timer_channel_output_mode_config(TIMER0,TIMER_CH_0,TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER0,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);

	timer_primary_output_config(TIMER0,ENABLE);
    /* auto-reload preload enable */
    timer_auto_reload_shadow_enable(TIMER0);
    /* auto-reload preload enable */
    timer_enable(TIMER0);

}

H头文件 

#ifndef _BEEP_H_
#define	_BEEP_H_

void fun_Beep_init(void);
//********************hard define Config*****************************
// PA8 1 timer4 channel1
#define BEEP_PWM_PIN                   GPIO_PIN_8
#define BEEP_PWM_GPIO_PORT             GPIOA
#define BEEP_PWM_GPIO_CLK              RCU_GPIOA

#define BEEP_PWM_PRESCALER            108-1
#define BEEP_PWM_PERIOD               16000-1









#endif 

版权声明:本文为CSDN博主「lin小羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34152804/article/details/118269548

生成海报
点赞 0

lin小羊

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

GD32精确延时和时间戳

目前网上很多都是利用systick频繁产生中断进行计数,然后实现延时。我写的这写接口,systick产生中断的频率很低,cpu效率很高。而且同时实现了毫秒延时,微秒延时,以及

GD32串口通信注意事项

GD32串口通信 虽说GD32与stm32采用同样的ARM® Cortex®-M3内核,而且GD32很大程度上可兼容stm32的程序,但是也存在着一些差异;所以为了使用上减少出错,使用G

GD32F103基础教程—外部中断实验(八)

一、教程简介 本章主要是讲解GPIO输入实验,通过按键触发外部中断,控制LED2闪烁。 二、实验流程 1、工程配置 外部中断触发实验工程配置方法与第五章的配置方法一致,具体请查看第五章教程&#xff0c