STM32F4修改定时器实现呼吸灯
修改定时器的寄存器配置
修改定时器完成呼吸灯并按键延时
前言
此版本为寄存器版本修改相关寄存器的值来实现实验:
通过查阅STM32F4的中文手册并结合板子的原理图可以完成代码的修改
提示:以下是本篇文章正文内容,下面案例可供参考
一、修改定时器14为12
通过查阅手册查看定时器14的寄存器如何修改
从代码可以分析要打开
1.时钟使能
查看手册发现TIM14是位于8处,则需要
RCC->APB1ENR|=1<<8; 左移8位,
而TIM12是位于6的位置,则我们需要改为
左移6位 RCC->APB1ENR|=1<<6;
2.打开相应GPIO口
TIM14的是在GPIOF,所以打开F,TIM12在GPIOB,所以打开B
RCC->AHB1ENR|=1<<1; //使能PORTB
3.设置为复用功能,以及其它配置
点击打开 GPIO_AF_Set 函数,查看相关参数该怎么修改
通过查看知道TIM12到TIM14都是AF9
所以修改为 GPIO_AF_Set(GPIOB,14,9); // GPIOB 14口
GPIO_Set(GPIOB,PIN14
,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//GPIOB14,修改GPIO为B,pin14
4.通过查看手册发现剩余的CCMR,以及CCER,CR1设置几乎都是一样的
二、按键控制呼吸灯延时
1.按键
代码如下(主函数内):
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "timer.h"
#include "key.h"
//ALIENTEK 探索者STM32F407开发板 实验9
//PWM输出实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
u8 key;
int k;
Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
delay_init(168); //延时初始化
TIM12_PWM_Init(500-1,84-1); //1Mhz的计数频率,(时间除以次数500)2Khz的PWM. 500*84 /84Mhz
KEY_Init(); //按键初始化
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>k)dir=0;
if(led0pwmval==0)dir=1;
LED0_PWM_VAL=led0pwmval;
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case KEY1_PRES: //time down
k=50;
break;
case KEY0_PRES: //tmie up
k=300;
break;
}
}
}
}
2.代码的加入
主函数内加入按键初始化函数,再加入switch的相关语句,通过定义一个k,通过按键给k赋值来实现延长时间的控制:
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case KEY1_PRES: //time down
k=50;
break;
case KEY0_PRES: //tmie up
k=300;
break;
}
总结
修改完相应的定时器的配置之后,还要把配置的LED灯与所配置的PWM的那个定时器连接起来,才能实现相关的实验:
以上就是寄存器版本的STM32F4呼吸灯修改定时器并且增加按键延时或增时,谢谢大家!。