GD32F303的PWM实现LED呼吸灯的方法

  1. 首先配置TIMER1,定义初始化结构体变量
static void ConfigTIMER1ForPWMPB10(unsigned short arr, unsigned short psc)
{//定义初始化结构体变量timer_oc_parameter_struct timer_ocinitpara;timer_parameter_struct timer_initpara;rcu_periph_clock_enable(RCU_GPIOB);    //使能GPIOB时钟rcu_periph_clock_enable(RCU_TIMER1);   //使能TIMER1时钟rcu_periph_clock_enable(RCU_AF);       //使能TIMER1时钟gpio_pin_remap_config(GPIO_TIMER1_PARTIAL_REMAP1, ENABLE);  //TIMER1部分重映射TIMER1_CH2->PB10gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);  //设置GPIO输出模式及速度timer_deinit(TIMER1);                                  //将TIMER1配置为默认值timer_struct_para_init(&timer_initpara);               //timer_initpara配置为默认值timer_initpara.prescaler         = psc;                //设置预分频值timer_initpara.alignedmode       = TIMER_COUNTER_EDGE; //设置对齐模式timer_initpara.counterdirection  = TIMER_COUNTER_UP;   //设置向上计数timer_initpara.period            = arr;                //设置重装载值timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;   //设置时钟分频因子timer_initpara.repetitioncounter = 0;                  //设置重复计数值timer_init(TIMER1, &timer_initpara);                   //初始化定时器//将结构体参数初始化为默认值timer_channel_output_struct_para_init(&timer_ocinitpara);  timer_ocinitpara.outputstate  = TIMER_CCX_ENABLE;                    //设置通道输出状态timer_ocinitpara.outputnstate = TIMER_CCXN_DISABLE;                  //设置互补通道输出状态timer_ocinitpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;              //设置通道输出极性timer_ocinitpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;             //设置互补通道输出极性timer_ocinitpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;             //设置空闲状态下通道输出极性timer_ocinitpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;            //设置空闲状态下互补通道输出极性timer_channel_output_config(TIMER1, TIMER_CH_2, &timer_ocinitpara);  //初始化结构体timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, 0);                   //设置占空比timer_channel_output_mode_config(TIMER1, TIMER_CH_2, TIMER_OC_MODE_PWM0);         //设置通道比较模式timer_channel_output_shadow_config(TIMER1, TIMER_CH_2, TIMER_OC_SHADOW_DISABLE);  //失能比较影子寄存器timer_auto_reload_shadow_enable(TIMER1);                                          //自动重载影子使能 timer_enable(TIMER1);  //使能定时器
}

2. 设置占空比的函数

void SetPWM(signed short val)
{s_iDutyCycle = val;                   //获取占空比的值timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, s_iDutyCycle);  //设置占空比
}

3. 实现占空比循环的函数,每50ms被调用1次

void CirclePWM(void)
{static signed short val=600;       //占空比static unsigned char flag=0;       //0:由亮到暗       1:由暗到亮SetPWM(val);         //设置PWM值if(flag==0)    //由亮到暗{if(val==0)flag=1;elseval-=50;}if(flag==1)    //由暗到亮{if(val==600)flag=0;elseval+=50;}
}

4. 配置LED的GPIO

static  void  ConfigLEDGPIO(void)
{//使能RCU相关时钟rcu_periph_clock_enable(RCU_GPIOA);                                 //使能GPIOA的时钟//这里将PA8由推挽输出改为浮空输入gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_8);  //设置GPIO输出模式及速度}

5. 在2ms的任务里面定义呼吸灯的周期,这里设置的是50ms,可以根据实际需求任意更改效果

static  void  Proc2msTask(void)
{  static signed short s_iCnt25=0;if(Get2msFlag())  //判断2ms标志状态{ if(s_iCnt25>=49){CirclePWM();    //实现PWMV循环s_iCnt25=0;}else{s_iCnt25++;}Clr2msFlag();   //清除2ms标志}
}

代码结束了,关于PWM和GPIO的配置,根据实际使用来更改即可。

GD32F303的PWM实现LED呼吸灯的方法相关推荐

  1. 小熊派gd32f303学习之旅(7)—使用PWM实现LED呼吸灯

    小熊派gd32f303学习之旅(7)-使用PWM实现LED呼吸灯 一.前言 通过查看gd32f30x的参考手册,可以知道gd32f303的通用定时器和高级定时器可以硬件生成PWM波,然后我们查看gd3 ...

  2. ESP32 Arduino开发之路(2)— 使用PWM实现LED呼吸灯

    ESP32 Arduino开发之路(2)- 使用PWM实现LED呼吸灯 一.前言 在ESP32上有一个LEDC外设模块专用于输出PWM波形,其介绍如下所示: 参考文章:在 ESP32 上使用 LEDC ...

  3. 【嵌入式知识12】使用PWM实现LED呼吸灯

    本次实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 ...

  4. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  5. 使用STM32输出PWM波形LED呼吸灯的效果

    文章目录 前言 一.PWM简介 1.1 关于PWM 1.2 使用步骤 二.使用STM32CUBEMX实现2个 LED呼吸灯的效果 2.1.配置环境 2.2 代码配置 2.3.输出PWM波形 2.4 呼 ...

  6. 利用PWM实现LED呼吸灯

    一.实验目的 本实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LE ...

  7. stm32呼吸灯c语言程序,STM32使用PWM控制LED呼吸灯效果

    实验的STM32型号: STM32F103C8T6   48引脚 涉及到的知识: RCC,GPIO,TIMER,PWM 设置 *RCC需打开外部时钟 *GPIO查表得知 PA3 默认复用引脚 TIM2 ...

  8. 基于STM32的PWM驱动LED呼吸灯

    一,PWM基本原理 所谓PWM,就是脉冲宽度调制技术,其具有两个很重要的参数:频率和占空比.频率,就是周期的倒数:占空比,就是高电平在一个周期内所占的比例.如当周期T=T1+T2:T1为高电平时间,T ...

  9. STM32输出PWM波形以及实现LED呼吸灯

    目录 一.PWM的简介 1.PWM的定义 2.PWM的优点 3.PWM的几种控制方法 (1)等脉宽PWM法 (2)随机PWM (3)SPWM法 4.PWM的主要参数 (1)PWM占空比 (2)PWM的 ...

最新文章

  1. SVN还原与SVN更新区别
  2. 之江学院第0届 A qwb与支教 容斥与二分
  3. bilibili【考研英语词汇】
  4. 高通 SPI驱动笔记
  5. 详细介绍ADMM交替方向乘子法
  6. android常用的混淆规则,关于Android混淆的基本做法
  7. adsl双网卡共享上网的设置(win2003)
  8. 数据结构与算法-表(单链表 循序表 )
  9. 内部版本号android,分享个老教程:修改手机型号、品牌、内部版本号、Android版本...
  10. 亚马逊账号关联的后果是什么
  11. 北京人工智能产业联盟成立,百度CTO王海峰出任联盟理事长
  12. java责任链模式审批请假_14-学生生病请假:责任链模式
  13. 常用数据结构及其应用场景
  14. 重学Java设计模式-创建者模式-建造者模式
  15. 《互联网软件应用与开发(网络程序设计)》
  16. Linux基础学习(1)
  17. 文件服务器导出共享文件列表,服务器共享文件访问记录方法、共享文件操作日志记录功能实现...
  18. 用SHOPEX增强工具把淘宝数据包批量上传到自己的ShopEX独立网店
  19. 每日一个Linux命令之ls命令
  20. 关于计算机1K=1024 的原因,计算机在什么情况下1k=1000

热门文章

  1. CSS实例(一):漂亮的表格样式(使用CSS样式表控制表格样式)
  2. 安卓开发 之小白养成-Android适配
  3. 地表真实温度,辐射温度,亮度温度的区别
  4. 【烧写Uboot到SD卡,打开 SD-bl1-8k.bin 失败,failed to open‘SD-bl1-8k.bin】
  5. 怎么使用视频做动图?如何快速将视频转成gif图
  6. Fragment的onCreate和onCreateView区别
  7. 为什么选一款适合自己的蓝牙耳机这么难?高性价比低延迟蓝牙耳机推荐
  8. python pexpect安装
  9. nanotime java 博客园_JVM源码分析之System.currentTimeMillis及nanoTime原理详解
  10. 家里WiFi信号差的问题你碰到过吗?WiFi Mesh路由或许能够解决