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

pwm驱动呼吸灯

#include "stm32f10x.h"
#include "Delay.h"
#include "PWM.h"uint16_t i;
int main(void){PWM_Init();while(1){for(i=30;i<=100;i++){//越来越亮PWM_SetCompare(i);Delay_ms(10);}for(i=30;i<=100;i++){//越来越暗PWM_SetCompare(130-i);Delay_ms(10);}}
}

上述代码为呼吸灯实现,呼吸灯的实现,是通过改变RCC来实现的。 

下面为PWM的初始化函数和改变RCC的封装函数

#include "stm32f10x.h"void PWM_Init(void){//要产生一个fre为1KHZ,分辨率为1%的PWM波形,来实现呼吸灯,呼吸灯通过修改CCR的值//①开启时钟,TIM和GPIORCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//选择时钟源TIM_InternalClockConfig(TIM2);//②配置时基单元TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_Prescaler=72-1;  //PSCTIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period=100-1;  //ARRTIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;//这个参数只用于高级TIMTIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);/*//不要上电就中断TIM_ClearFlag(TIM2, TIM_FLAG_Update);//Enablesthe specified TIM interrupts 配置中断输出TIM_ITConfig(TIM2,TIM_FLAG_Update,ENABLE);*///③配置输出比较单元TIM_OCInitTypeDef TIM_OCInitStruct;TIM_OCStructInit(&TIM_OCInitStruct);//给TIM_OCInitStruct的参数赋初始值//修改我们要用的参数TIM_OCInitStruct.TIM_Pulse=0;//Pulse是用来设置CCR的TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//设置输出使能TIM_OC1Init(TIM2, &TIM_OCInitStruct);//使用不同的GPIO,选择的输出比较通道也不一样//这里使用的是GPIOA,所以选择OC1//它的参数比较多,我们只要把我们需要用的列出来就好了//但是此时需要给其他参数赋初始值,//使用TIM_OCStructInit函数//通过上述配置,就可以生成PWM波形了,但是我们需借助GPIO输出。//那TIM2的OC1通道是借了哪个GPIO口呢?//答:因为是TIM2且OC1 所以是TIM2_CH1,又因为TIM2_CH1是引脚PA0的默认服用功能之一//④配置GPIOGPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//定时器是片上外设,所以是复用推挽输出GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//⑤运行控制TIM_Cmd(TIM2,ENABLE);
}//修改CCR的值的封装函数
void PWM_SetCompare(uint16_t Compare1){TIM_SetCompare1(TIM2,Compare1);
}

http://www.xdnf.cn/news/1059.html

相关文章:

  • 【NCCL】transport建立(一)
  • Express项目实战大事件后台 API 项目(五)——文章管理
  • java集合框架day1————集合体系介绍
  • 服务器监控软件推荐
  • Python Cookbook-6.7 有命名子项的元组
  • RAG vs 微调:大模型定制化技术选型全解析
  • 10、Context:跨维度传音术——React 19 状态共享
  • 【Java核心技术卷Ⅰ-第11版学习-第3章-Java的基本程序设计结构】
  • 每日一题(9) 垃圾箱分布
  • 基于SpinrgBoot+Vue的智慧农业管理平台-031
  • 远程医疗系统如何有效防护CC攻击
  • 智慧教室电子班牌-智能管理系统源码,‌后端‌基于Spring Boot框架,前端‌使用Vue.js框架进行组件化开发
  • 在python中装饰器的使用
  • File工具总结
  • 悟空黑桃A邀请码(31187835)
  • VSCode远程图形化GDB
  • 算法 | 鲸鱼优化算法(WOA)与强化学习的结合研究
  • Dify-web开发思路
  • Pikachu靶场-SQL注入
  • STM32——相关软件安装
  • 【Linux】:HTTPS协议
  • 相机标定(输出相机内参和畸变参数)
  • ASP.NET 中防止用户多次登录的方法
  • wkhtmltopdf - HTML转PDF/图像命令行工具
  • python@staticmethod 是什么含义?
  • Coze平台​ 创建AI智能体的详细步骤指南
  • 多源异构网络安全数据(CAPEC、CPE、CVE、CVSS、CWE、ATTCK、D3FEND)的详细解析,包括其作用、数据内容及相互联系
  • 跨越1640年的诗路对话:谢灵运与瓯江山水的古今交响
  • EasyCVR视频汇聚平台安防监控问题排查:GB28181协议摄像头不在线的排查步骤
  • 基于Spring Boot实现文件秒传的完整方案