STM 32定时器一使用

问题描述:写了一个定时器一的初始化函数,CH1(PA8)引脚可以正常点亮LED,但是CH1N(PB13)引脚没有反应,程序在下面,希望有高手能解答疑问

1、IO口初始化

void Tim1_Init(void)//定时器1初始化函数
{
	GPIO_InitTypeDef GPIOInitStructure;
	//开启CH1(PA8)时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIOInitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽
	GPIOInitStructure.GPIO_Pin=GPIO_Pin_8;
	GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIOInitStructure);
	
	//开启CH1N(PB13)时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIOInitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽
	GPIOInitStructure.GPIO_Pin=GPIO_Pin_13;
	GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIOInitStructure);
	
	//开启刹车(PB12)时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIOInitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽
	GPIOInitStructure.GPIO_Pin=GPIO_Pin_12;
	GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIOInitStructure);
	//刹车默认输出低电平
	GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}

 2、定时器初始化

//定时器1配置
void TIM_Mode_Config(void)//TMD没开TIM1的时钟
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
//	TIM_DeInit(TIM1);
	//时基单元初始化
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//计数模式//向上
	TIM_TimeBaseInitStructure.TIM_Period=2000-1;//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler=72-1;//PSC//CK_CNT=fCK_PSC / (PSC+ 1)
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数器(8位)

	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);
	
	TIM_OCInitTypeDef TIM_OCInitStructure;
	//输出比较初始化(OC)
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //比较模式(PWM1)
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OutputNState=TIM_OutputState_Enable;//比较输出使能
	TIM_OCInitStructure.TIM_Pulse=1000;//比较输出脉冲宽度(CCR)
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;   // 比较输出极性(高)
	TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_Low; // 比较输出极性(低)
	TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;//空闲状态输出电平设置(置0)
	TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;//空闲状态时互补输出电平设置(置1)
	
	
	TIM_OC1Init(TIM1,&TIM_OCInitStructure);
	TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
	
	/*-------------------刹车和死区结构体初始化-------------------*/
    // 有关刹车和死区结构体的成员具体可参考BDTR寄存器的描述
    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
    TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
    TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
    TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
    // 输出比较信号死区时间配置,具体如何计算可参考 BDTR:UTG[7:0]的描述
    // 这里配置的死区时间为152ns
    TIM_BDTRInitStructure.TIM_DeadTime = 11;
    TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
    // 当BKIN引脚检测到高电平的时候,输出比较信号被禁止,就好像是刹车一样
    TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
    TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
    TIM_BDTRConfig(ADVANCE_TIM, &TIM_BDTRInitStructure);

    // 使能计数器
    TIM_Cmd(TIM1, ENABLE);
    // 主输出使能,当使用的是通用定时器时,这句不需要
    TIM_CtrlPWMOutputs(ADVANCE_TIM, ENABLE);
}

3、main函数

int main(void)
{
	/*模块初始化*/
	Tim1_Init();
	TIM_Mode_Config();
	while (1)
	{
		
	}
}

4、主要实验现象

现象:红灯(PA8)亮,绿灯(PB13)不亮,刹车(白线PB12)接3.3V红灯跟亮一些

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值