STM32呼吸灯
来源:互联网 发布:最好网络个人投资理财 编辑:程序博客网 时间:2024/04/28 20:49
设计要求:做两个呼吸灯,交替渐亮渐灭由全亮到全灭和由全灭到全亮都是0.5s
设计思路:利用两路脉冲宽度调制(PWM)分别控制两粒灯的亮度。(下面利用TM3的CH1与CH2两路)
具体方案和代码:利用STM32的TIM3定时器产生CH1的PWM输出和CH2的PWM输出分别控制LED0与LED1,其中,CH1的IO口为PA6,CH2的IO口为PA7,又因为LED0与LED1的IO端口分别为PA8与PD2,所以要先把PA6与PD2连接起来,PA7与PA8连接起来。
然后正式开始写代码:首先利用RCC->APB1ENR(外设时钟使能能寄存器)开启TM3(要使用TM3必须先开启对应的时钟APB1ENR)(外事时钟使能寄存器有两个,分别是APB1ENR与APB2ENR,具体用哪个查中文手册65页)。 RCC->APB1ENR|=1<<1; //TIM3 时钟使能
GPIOA->CRL|=0XBB000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7 上拉
GPIOA->ODR|=1<<6;//PA6上拉
设置 ARR 和 PSC 两个寄存器的值来控制输出PWM的周期(>=50HZ) TIM3->ARR=arr;//设定计数器自动重装值 TIM3->PSC=psc;//预分频器不分频
利用捕获/比较模式寄存器(TIM3->CCMR1)控制CH1与CH2。(该寄存器有2个,具体看中文手册240页)
TIM3->CCMR1|=7<<4; //CH1 PWM2 模式
TIM3->CCMR1|=1<<3; //CH1 预装载使能
TIM3->CCMR1|=7<<12; //CH2 PWM2 模式
TIM3->CCMR1|=1<<11; //CH2 预装载使能
利用控制寄存器TIM3->CR1使能TM3(具体看中文手册233页),利用捕获\使能寄存器TIM3->CCER使能CH1与CH2(具体看中文手册244页)
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CCER|=1<<0;
TIM3->CR1=0x0080; //ARPE 使能
TIM3->CR1|=0x01; //使能定时器 3
最后,通过宏定义:
#define LED0_PWM_VAL TIM3->CCR2
#define LED1_PWM_VAL TIM3->CCR1
继而可以通过控制TIM3—CCR2与TIM3—CCR1来控制LED0与LED1的亮度。
遇到问题和解决办法:刚开始接触很多看不懂,最后通过问高手和自己慢慢摸索懂了8成。
感谢:当最后通过自己努力完成目标,感觉真的很开心。接下去继续把STM32学好吧。加油加油·
- STM32呼吸灯
- STM32之呼吸灯实验
- 基于STM32最简单的呼吸灯
- 基于stm32的pwm呼吸灯
- STM32 PWM简介及呼吸灯实验
- stm32成长记之LED呼吸灯
- STM32定时器产生PWM--呼吸灯
- STM32学习笔记一(LED,跑马灯,呼吸灯)
- STM32使用PWM控制LED呼吸灯效果
- stm32之定时器运用———呼吸灯
- 呼吸灯
- 呼吸灯
- 呼吸灯
- 呼吸灯
- Qt实用技巧:会呼吸的痛(呼吸点/呼吸灯)
- Qt实用技巧:会呼吸的痛(呼吸点/呼吸灯)
- BreatheLight 呼吸灯
- 呼吸灯程序
- 排排站
- 常见非关系型数据库(NoSQL)推荐介绍
- cocos2d 制作动态光晕效果基础 —— blendFunc
- 唯一非聚集索引变量传入时索引失效解决方案
- hdu 1482
- STM32呼吸灯
- linux系统下软件安装包类型及安装介绍
- STM32的GPIO口的8种配置模式
- C/C++中的柔性数组
- 组合数的计算
- AFNetworking框架使用浅析
- ZeroC Ice 安装
- Android C/JAVA 输出CallStack
- 医药采购之供货商药品目录添加提交