当前位置: 首页 > article >正文

【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);

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


http://www.kler.cn/a/388854.html

相关文章:

  • 结构体是否包含特定类型的成员变量
  • C#发票识别、发票查验接口集成、电子发票(航空运输电子行程单)
  • Redis - 集群(Cluster)
  • 【Golang】Channel的ring buffer实现
  • 力扣515:在每个树行中找最大值
  • [代码随想录Day10打卡] 理论基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
  • 网关 Spring Cloud Gateway
  • Hive的远程模式
  • lua入门教程:随机数
  • c++-有关计数、双变量累加、半衰、阶乘、变量值互换的基础知识
  • 架构篇(05理解架构的服务演化)
  • Ubuntu24.04安装Perforce服务
  • 力扣11.7
  • 【LLM】【LLaMA-Factory】:Qwen2.5-Coder-7B能力测评
  • 医学检验报告AI提示词记录
  • PHP Libxml:深入解析与高效应用
  • 极狐GitLab 签约足下科技,加速国产智驾操作系统的发展与普及
  • HBase使用create创建表时报错ERROR: KeeperErrorCode = NoNode for /hbase/master
  • Go语言锁笔记
  • Android MVVM demo(使用DataBinding,LiveData,Fresco,RecyclerView,Room,ViewModel 完成)
  • 攻防世界35-easyupload-CTFWeb
  • 【国产MCU系列】-GD32F4内存映射
  • 基于springboot+vu的二手车交易系统(全套)
  • 如何在docker创建的mysql容器中执行mysql脚本
  • 《大数据治理》
  • 【LeetCode】【算法】560. 和为 K 的子数组