GD32F303的PWM实现LED呼吸灯的方法
GD32F303的PWM实现LED呼吸灯的方法
- 首先配置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呼吸灯的方法相关推荐
- 小熊派gd32f303学习之旅(7)—使用PWM实现LED呼吸灯
小熊派gd32f303学习之旅(7)-使用PWM实现LED呼吸灯 一.前言 通过查看gd32f30x的参考手册,可以知道gd32f303的通用定时器和高级定时器可以硬件生成PWM波,然后我们查看gd3 ...
- ESP32 Arduino开发之路(2)— 使用PWM实现LED呼吸灯
ESP32 Arduino开发之路(2)- 使用PWM实现LED呼吸灯 一.前言 在ESP32上有一个LEDC外设模块专用于输出PWM波形,其介绍如下所示: 参考文章:在 ESP32 上使用 LEDC ...
- 【嵌入式知识12】使用PWM实现LED呼吸灯
本次实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 ...
- 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考
提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...
- 使用STM32输出PWM波形LED呼吸灯的效果
文章目录 前言 一.PWM简介 1.1 关于PWM 1.2 使用步骤 二.使用STM32CUBEMX实现2个 LED呼吸灯的效果 2.1.配置环境 2.2 代码配置 2.3.输出PWM波形 2.4 呼 ...
- 利用PWM实现LED呼吸灯
一.实验目的 本实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LE ...
- stm32呼吸灯c语言程序,STM32使用PWM控制LED呼吸灯效果
实验的STM32型号: STM32F103C8T6 48引脚 涉及到的知识: RCC,GPIO,TIMER,PWM 设置 *RCC需打开外部时钟 *GPIO查表得知 PA3 默认复用引脚 TIM2 ...
- 基于STM32的PWM驱动LED呼吸灯
一,PWM基本原理 所谓PWM,就是脉冲宽度调制技术,其具有两个很重要的参数:频率和占空比.频率,就是周期的倒数:占空比,就是高电平在一个周期内所占的比例.如当周期T=T1+T2:T1为高电平时间,T ...
- STM32输出PWM波形以及实现LED呼吸灯
目录 一.PWM的简介 1.PWM的定义 2.PWM的优点 3.PWM的几种控制方法 (1)等脉宽PWM法 (2)随机PWM (3)SPWM法 4.PWM的主要参数 (1)PWM占空比 (2)PWM的 ...
最新文章
- SVN还原与SVN更新区别
- 之江学院第0届 A qwb与支教 容斥与二分
- bilibili【考研英语词汇】
- 高通 SPI驱动笔记
- 详细介绍ADMM交替方向乘子法
- android常用的混淆规则,关于Android混淆的基本做法
- adsl双网卡共享上网的设置(win2003)
- 数据结构与算法-表(单链表 循序表 )
- 内部版本号android,分享个老教程:修改手机型号、品牌、内部版本号、Android版本...
- 亚马逊账号关联的后果是什么
- 北京人工智能产业联盟成立,百度CTO王海峰出任联盟理事长
- java责任链模式审批请假_14-学生生病请假:责任链模式
- 常用数据结构及其应用场景
- 重学Java设计模式-创建者模式-建造者模式
- 《互联网软件应用与开发(网络程序设计)》
- Linux基础学习(1)
- 文件服务器导出共享文件列表,服务器共享文件访问记录方法、共享文件操作日志记录功能实现...
- 用SHOPEX增强工具把淘宝数据包批量上传到自己的ShopEX独立网店
- 每日一个Linux命令之ls命令
- 关于计算机1K=1024 的原因,计算机在什么情况下1k=1000
热门文章
- CSS实例(一):漂亮的表格样式(使用CSS样式表控制表格样式)
- 安卓开发 之小白养成-Android适配
- 地表真实温度,辐射温度,亮度温度的区别
- 【烧写Uboot到SD卡,打开 SD-bl1-8k.bin 失败,failed to open‘SD-bl1-8k.bin】
- 怎么使用视频做动图?如何快速将视频转成gif图
- Fragment的onCreate和onCreateView区别
- 为什么选一款适合自己的蓝牙耳机这么难?高性价比低延迟蓝牙耳机推荐
- python pexpect安装
- nanotime java 博客园_JVM源码分析之System.currentTimeMillis及nanoTime原理详解
- 家里WiFi信号差的问题你碰到过吗?WiFi Mesh路由或许能够解决