GD32F30X单片机开发 --- PWM输出

GD32F30X单片机开发 — PWM输出

配置

1. 引脚初始化

  1. 使能GPIOA时钟
  2. 使能AF时钟

2. 定时器初始化

高级定时器PWM初始化

  1. 使能定时器0时钟
  2. 去初始化
  3. 设置:周期值,预分频系数,计数模式,对齐模式,采样分时钟分频
  4. 定时器通道输出配置:
    输出状态;输出极性;空闲状态;输出通道;输出模式
  5. 使能定时器

代码

/* 引脚复用配置 */
void gpio_config()
{
	rcu_periph_clock_enable(RCU_GPIOA);
	rcu_periph_clock_enable(RCU_AF);

	gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
}

/* 高级定时器PWM初始化 */
void Timer_PWM_Init()
{
	rcu_periph_clock_enable(RCU_TIMER0);					/* 使能定时器0时钟 */

	timer_deinit(TIMER0);									/* 去初始化 */

	timer_parameter_struct timer_initpara;
	timer_initpara.prescaler = 1 - 1;						/* 预分频器值 */
	timer_initpara.alignedmode = TIMER_COUNTER_EDGE;		/* 对齐模式:边沿对齐模式(无对齐模式)*/
	timer_initpara.counterdirection = TIMER_COUNTER_UP;		/* 向上计数模式 */
	timer_initpara.period = 7200 - 1;						/* 配置周期*/
	timer_initpara.clockdivision = TIMER_CKDIV_DIV1;		/* 时钟分频 */
	timer_initpara.repetitioncounter = 0;					/* 重复计数器值 */
	timer_init(TIMER0, &timer_initpara);					/* 初始化定时器0 */

	/* 
		占空比:在一个周期内,高电平所占的时间;占空比 = 脉冲数 / 周期值
				周期值最好和65535相近,占空比控制效果更好
		频率:系统主频 / 预分频系数 / 周期值 / 采样分频
	*/

	/* 配置PWM模式0 */
	timer_oc_parameter_struct timer_ocintpara;
	timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;   								/* 输出极性 */
	timer_ocintpara.ocnpolarity = TIMER_OCN_POLARITY_HIGH;								/* 互补输出极性 */
	timer_ocintpara.outputstate = TIMER_CCX_ENABLE; 									/* 输出状态 */
	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);					/* 定时通道输出配置 */
	timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0);			/* 定时器通道输出模式配置:PWM0 */
	timer_channel_output_shadow_config(TIMER0, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);	/* 配置TIMER通道输出比较影子寄存器功能 */
	timer_primary_output_config(TIMER0, ENABLE);										/* 互补通道保护-所有通道输出使能 */
	timer_auto_reload_shadow_enable(TIMER0);											/* 自动重载影子使能 */
	timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_0, 0);						/* 占空比初始值0 */

	timer_enable(TIMER0);																/* 使能定时器0 */
}

/* 主函数 */
int main(void)
{	
	gpio_config();
	Timer_PWM_Init();
	
	INT16U i = 0;
	while(1)
	{
		Delay100Ms(10);
		i += 1800;
		if(i > 7200)
		{
			i = 0;
		}
		timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_0, i);		/* 每1s占空比加大25% */
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值