提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
正文
通过配置定时器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);
}
}
总结
支持国产单片机!!!