GD32F130F8P6 定时器配置呼吸灯

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


正文

通过配置定时器13使PA4引脚上实线呼吸灯的效果。
代码如下(如果有用记得给个赞):

#include "gd32f1x0.h"
#include "systick.h"
#include "gd32f1x0_timer.h"


/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/




/*
定时器13初始化PWM函数
psr:时钟预分频系数,预分频值=psr+1
arr:自动重装载值,计数次数=arr+1
返回值 无
*/
void timer13_pwm_init(uint32_t psr,uint32_t arr,uint32_t duty)
{
	timer_parameter_struct timer_init_struct;
	timer_oc_parameter_struct timer_oc_init_struct;
	
	rcu_periph_clock_enable(RCU_TIMER13);
	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_4);
	gpio_af_set(GPIOA,GPIO_AF_4,GPIO_PIN_4);
	
	timer_deinit(TIMER13);
	timer_init_struct.prescaler=psr;
	timer_init_struct.period=arr;
	timer_init_struct.alignedmode=TIMER_COUNTER_EDGE;
	timer_init_struct.counterdirection=TIMER_COUNTER_UP;
	timer_init_struct.clockdivision=TIMER_CKDIV_DIV1;
	timer_init_struct.repetitioncounter=0;
	timer_init(TIMER13,&timer_init_struct);
	
	timer_oc_init_struct.outputstate=TIMER_CCX_ENABLE;
	timer_oc_init_struct.outputnstate=TIMER_CCXN_DISABLE;
	timer_oc_init_struct.ocpolarity=TIMER_OC_POLARITY_HIGH;
	timer_oc_init_struct.ocnpolarity=TIMER_OCN_POLARITY_HIGH;
	timer_oc_init_struct.ocidlestate=TIMER_OC_IDLE_STATE_LOW;
	timer_oc_init_struct.ocnidlestate=TIMER_OCN_IDLE_STATE_LOW;
	timer_channel_output_config(TIMER13,TIMER_CH_0,&timer_oc_init_struct);
	
	timer_channel_output_pulse_value_config(TIMER13,TIMER_CH_0,duty);	
	timer_channel_output_mode_config(TIMER13,TIMER_CH_0,TIMER_OC_MODE_PWM0);
	timer_channel_output_shadow_config(TIMER13,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);
	timer_auto_reload_shadow_enable(TIMER13);
	
	timer_enable(TIMER13);
	
	
}




int main(void)
{
		uint32_t pwmval=300;
		uint8_t dir=0;
    /* enable the LED clock */
    rcu_periph_clock_enable(RCU_GPIOA);

    /* configure led GPIO port */
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_5);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_5);

    gpio_bit_reset(GPIOA,  GPIO_PIN_5);

    /* setup SysTick Timer for 1ms interrupts  */
    systick_config();
		timer13_pwm_init(800-1,299,99);
		TIMER_CH0CV(TIMER13)=pwmval;
    while(1){
			if(dir)pwmval++;
			else pwmval--;
			if(pwmval>300){dir=0;gpio_bit_set(GPIOA, GPIO_PIN_5 );}
			if(pwmval==0){dir=1;gpio_bit_reset(GPIOA, GPIO_PIN_5);}
			
			TIMER_CH0CV(TIMER13)=pwmval;
			
			
			if(pwmval==300) delay_1ms(300);

      delay_1ms(5);

       
			}
}

总结

支持国产单片机!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值