当前位置: 首页 > news >正文

基于stm32f103rct6的呼吸灯实现

一、PWM

       我们可以通过改变灯的有效电压占空比来实现呼吸灯效果。其中我们要用到PWM(脉宽调制),通过pwm我们可以来改变高电平的占空比

        ·占空比:在一个周期中,高电平所占整个周期的百分比

具体如图:

当我们用pwm来生成呼吸灯时,因为在stm32f103rct6中PA8LED灯是通过给PA8输入一个低电平点亮的,所以低电平在一个周期中维持的时间越长,灯越亮。

具体实现看代码:

void Pwm_Init()
{GPIO_InitTypeDef  	GPIO_InitStruct;TIM_OCInitTypeDef 	TIM_OCInitStruct;TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;/*1、使能时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA |RCC_APB2Periph_TIM1,ENABLE);/*2、配置GPIO*/GPIO_InitStruct.GPIO_Pin 	= GPIO_Pin_8;  		//引脚8 LED1GPIO_InitStruct.GPIO_Mode 	= GPIO_Mode_AF_PP;		//复用GPIO_InitStruct.GPIO_Speed	= GPIO_Speed_50MHz; //速度GPIO_Init(GPIOA,&GPIO_InitStruct);	//4、初始化定时器,配置ARR,PSC。TIM_TimeBaseInitStruct.TIM_Prescaler	= psc; 	//分频系统  ,每秒数多少个数 TIM_TimeBaseInitStruct.TIM_Period		= per; 	//重装值TIM_TimeBaseInitStruct.TIM_CounterMode	= TIM_CounterMode_Up; //向上计数TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //分频因子TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0x00;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);		/*配置pwm*/TIM_OCInitStruct.TIM_OCMode		=  TIM_OCMode_PWM1; 	  //PWM1模式TIM_OCInitStruct.TIM_OutputState=  TIM_OutputState_Enable;//输出使能TIM_OCInitStruct.TIM_OCPolarity =  TIM_OCPolarity_Low; 	  //极性低TIM_OCInitStruct.TIM_Pulse = 0x00;TIM_OC1Init(TIM1,&TIM_OCInitStruct);//5、使能预装载寄存器: TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); //6、使能自动重装载的预装载寄存器允许位	TIM_ARRPreloadConfig(TIM1,ENABLE);/*pwm输出通道使能*/TIM_CtrlPWMOutputs(TIM1,ENABLE);//7、使能定时器。TIM_Cmd(TIM1,ENABLE);}

 主函数:


void HardWare_Init(void)
{SysTick_Init(72);Pwm_Init(100-1,7200-1);
}int main(void)
{u8 cnt = 0;u8 fx = 1;HardWare_Init();while(1){if(fx){cnt++;if(cnt>99){fx = 0;}}else{cnt--;if(cnt < 1){fx = 1;}}TIM_SetCompare1(TIM1,cnt);delay_ms(20);}
}

http://www.lryc.cn/news/159258.html

相关文章:

  • 关于火绒邮件监控引起的扫描任意IP会有25和110端口反馈
  • 物联网应用中蓝牙模块怎么选?_蓝牙模块厂家
  • Mysql远程登录报错:Host ‘192.168.137.1‘ is not allowed to connect to this MySQL server
  • vue去掉循环数组中的最后一组的某个样式style/class
  • Vue2面试题100问
  • 开机启动应用
  • RK3588平台产测之ArmSoM-W3 DDR压力测试
  • springboot初试elasticsearch
  • Node.js安装教程图文详解
  • laragon 为 php 安装 Xdebug 扩展
  • 华为云 存在不支持迁移的外键解决方法
  • Linux 中的 cd 命令及示例
  • 【VUE】
  • 详解初阶数据结构之顺序表(SeqList)——单文件文件实现SeqList的增删查改
  • JavaScript中的深拷贝和浅拷贝
  • 树形结构的节点作为查询参数业务
  • sql:SQL优化知识点记录(十二)
  • 一.使用qt creator 设计显示GUI
  • sql:SQL优化知识点记录(八)
  • java笔试题,寻找多出来的元素
  • docker笔记3 Docker常规安装
  • 阻止 NTLM后无法登录远程桌面的原因
  • Docker网络功能
  • 如何入门 AI----如何确定学习目标
  • ABAP中加前导零和去前导零方法
  • 聊聊ShardingSphere是怎么进行sql重写的
  • 软件设计模式系列之二——抽象工厂模式
  • P2719 搞笑世界杯 (期望dp
  • spring cloud新版本使用loadbalancer替代Ribbon
  • 【Git-Exception】Git报错:fatal: unable to auto-detect email address