【STM32笔记】定时器(TIM1)无法工作

目录

项目场景:

问题描述

原因分析:

解决方案:


项目场景:

编译环境:keil uverison5

初次学习stm32(stm32f103xx)控制舵机(mg90s)时,舵机不转动(代码逻辑没有问题)。

注:博客是记录我解决问题以及思考过程的,所以不会直接给出答案。


问题描述

这是我的舵机

这是我的代码,执行这个代码舵机不会动(可以确定代码是没有问题的):

void dj_init(){

	GPIO_InitTypeDef GPIO_Initstructure;
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	GPIO_PinRemapConfig (GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	
	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_11;
	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init (GPIOA,&GPIO_Initstructure);
	
	// APB2 TIM1_CH4
	
	// 2. 选择外部时钟源
	TIM_InternalClockConfig(TIM1);
	
	// 3.定时器参数配置
	TIM_TimeBaseInitTypeDef timeBaseInitTypeDef;
	timeBaseInitTypeDef.TIM_ClockDivision = TIM_CKD_DIV1;
	timeBaseInitTypeDef.TIM_Period = 10000 - 1;
	timeBaseInitTypeDef.TIM_Prescaler = 144 - 1;
	timeBaseInitTypeDef.TIM_CounterMode = TIM_CounterMode_Up;
	timeBaseInitTypeDef.TIM_RepetitionCounter = 0;  // 高级tim(1,8)才有

	
	// 4.定时器初始化
	TIM_TimeBaseInit (TIM1,&timeBaseInitTypeDef) ;

	// 5. tim 通道
	TIM_OCInitTypeDef TIM_ocInitstructure;
	TIM_ocInitstructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_ocInitstructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_ocInitstructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_ocInitstructure.TIM_Pulse = 5000;
	
	// 6. tim 通道初始化
	TIM_OC4Init(TIM1, &TIM_ocInitstructure);
	TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
	
	// 7.开启定时器
	TIM_Cmd(TIM1, ENABLE);
}


原因分析:

PA11是否对应TIM1?

在查阅资料之后确定PA11对应TIM1的第四通道。

舵机是否损坏?

在更换舵机之后仍然不运动。

代码哪里有问题?

代码量不多,PWM控制也没有问题,psc等频率计算也没有问题(apb1总线频率为36mhz) 


解决方案:

对于高级定时器(TIM1、TIM8),需要额外加入一句话来使能PWM功能。

TIM_CtrlPWMOutputs(TIM1, ENABLE);

加入这句话之后舵机成功转动!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

活成自己的样子啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值