597|4

605

帖子

0

资源

一粒金砂(高级)

【GD32L233C-START评测】3、pwm实现呼吸灯 [复制链接]

相关文章:

【GD32L233C-START评测】1、优点与缺点都很明显的GD32L233C-START(开箱)

【GD32L233C-START评测】2、非阻塞方式点灯,blink,blink,blink……

 

1、硬件连接

image.png   2、PWM通道

image.png  可以看出,PC6对应的是TIME2的CH0通道。

3、实现方法

通过调节占空比,递增占空比,led逐渐变亮,视觉上是呼吸灯的效果。

4、核心代码

(1)pwm初始化

void PwmInit(void)
{	
    rcu_periph_clock_enable(RCU_GPIOC);
    /* TIMER1 GPIO */
    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6 );
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);

    gpio_af_set(GPIOC, GPIO_AF_1, GPIO_PIN_6);

    //64000000/6400=10k
	//TIMER2CLK = SystemCoreClock/6400 = 0.01MHz, the period is 1s(100/10000).=0.01s=10ms=100hz

    timer_oc_parameter_struct timer_ocinitpara;
    timer_parameter_struct timer_initpara;

    /* enable the peripherals clock */
    rcu_periph_clock_enable(RCU_TIMER2);

    /* deinit a TIMER */
    timer_deinit(TIMER2);
    /* initialize TIMER init parameter struct */
    timer_struct_para_init(&timer_initpara);
    /* TIMER2 configuration */
    timer_initpara.prescaler        = 6399;
    timer_initpara.alignedmode      = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection = TIMER_COUNTER_UP;
    timer_initpara.period           = 99;
    timer_initpara.clockdivision    = TIMER_CKDIV_DIV1;
    timer_init(TIMER2, &timer_initpara);

    /* initialize TIMER channel output parameter struct */
    timer_channel_output_struct_para_init(&timer_ocinitpara);
    /* configure TIMER channel output function */
    timer_ocinitpara.outputstate    = TIMER_CCX_ENABLE;
    timer_ocinitpara.ocpolarity     = TIMER_OC_POLARITY_HIGH;
    timer_channel_output_config(TIMER2, TIMER_CH_0, &timer_ocinitpara);

    timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 99);
    /* CH0 configuration in OC timing mode */
    timer_channel_output_mode_config(TIMER2, TIMER_CH_0, TIMER_OC_MODE_PWM0);

    /* enable a TIMER */
    timer_enable(TIMER2);
}

(2)更改占空比

void PwmOut(void)
{
	static uint32_t tick=0;
	
	static  uint8_t out=1;
	
	if(SystemGetTick()-tick>200)
	{
		tick=SystemGetTick();

		out=out+10;
		
		if(out>100)
		{
			out=1;
		}
		
		timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, out-1);
	}
}

5、现象

pwmled.gif   6、示波器测量波形

pwm波形.gif  

 

 

此帖出自GD32 MCU论坛
个人签名stm32/LoRa物联网:304350312

回复

60

帖子

1

资源

一粒金砂(中级)

SystemGetTick()在哪里

点评

可以看【GD32L233C-START评测】2、非阻塞方式点灯,blink,blink,blink……这个帖子,用一个定时器中断1ms实现的,维护一个全局tick  详情 回复 发表于 2022-1-23 08:23

回复

605

帖子

0

资源

一粒金砂(高级)

mameng 发表于 2022-1-22 20:59 SystemGetTick()在哪里

可以看【GD32L233C-START评测】2、非阻塞方式点灯,blink,blink,blink……这个帖子,用一个定时器中断1ms实现的,维护一个全局tick

个人签名stm32/LoRa物联网:304350312

回复

60

帖子

1

资源

一粒金砂(中级)

工程文件共享性下?


回复

605

帖子

0

资源

一粒金砂(高级)

mameng 发表于 2022-2-23 09:03 工程文件共享性下?

GD32L233_Project_pwm.rar (360.63 KB, 下载次数: 0)

个人签名stm32/LoRa物联网:304350312

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表