stm32实现呼吸灯

##新建.h文件commontim.h
#ifndef COMMONTIM_H
#define COMMONTIM_H
#include “stm32f10x.h”
void CommonTIM3_Config(void);
void TIM3_SetCompareValue(uint8_t B,uint8_t G,uint8_t R);

#endif

编写.c文件

#include “commontim.h”

void CommonTIM3_Config(void){

GPIO_InitTypeDef   GPIO_InitStruct;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef  TIM_OCInitStruct;


//打开时钟---GPIOC  TIM3 AFIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

// 初始化GPIO  PIN6 7 8  复用推挽输出  50hz
GPIO_InitStruct.GPIO_Pin   	 	=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode  	=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed 	=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);

//TIM3完全重映射
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);

//初始化TIM3  ARR-255 预分频器的值-1-1 向上计数 一分?
TIM_TimeBaseInitStruct.TIM_ClockDivision  		=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode			=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period				=255;
TIM_TimeBaseInitStruct.TIM_Prescaler				=1-1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);

//TMI3的通道初始化 ccr的值-0   低电平 PWM1模式 通道1 2 3
TIM_OCInitStruct.TIM_OCMode					=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity					=TIM_OCPolarity_Low;
TIM_OCInitStruct.TIM_Pulse						=0;
TIM_OCInitStruct.TIM_OutputState				=TIM_OutputState_Enable;
TIM_OC1Init(TIM3, &TIM_OCInitStruct);
TIM_OC2Init(TIM3, &TIM_OCInitStruct);
TIM_OC3Init(TIM3, &TIM_OCInitStruct);

//使能ARR的预装载寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE);

//使能通道1,2,3的预装载寄存器
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);

//使能定时器
TIM_Cmd(TIM3,ENABLE);

//写一个设置CRR1 2 3 的函数

}
void TIM3_SetCompareValue(uint8_t B,uint8_t G,uint8_t R){

TIM_SetCompare1(TIM3,B);
TIM_SetCompare2(TIM3,G);
TIM_SetCompare3(TIM3,R);

}

##编写主函数
#include “commontim.h”
uint8_t i;
uint8_t j;
int main(void)
{

Systick_Config(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
CommonTIM3_Config();
while(1){	
	//LET_CTRL("SEDG","OPEN");
//呼吸灯
	for(i=0;i<255;i++){
	TIM3_SetCompareValue((uint8_t)i,(uint8_t)i,(uint8_t)i);
	Systick_DelayNms(3);
	}
	for(j=i;j>0;j--){
	TIM3_SetCompareValue((uint8_t)j,(uint8_t)j,(uint8_t)j);
	Systick_DelayNms(5);
	}
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值