STM32F103控制舵机

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

STM32控制舵机(多个舵机、附代码)

1、基本介绍
在这里插入图片描述2、代码

#include "bsp\_servo.h"

void Servo\_PWM\_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;//定义定时器结构体变量
	TIM_OCInitTypeDef TIM_OCInitStructure;//定义输出比较结构体变量
    GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量
	
	RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //GPIOB时钟使能
	RCC\_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4的时钟
	RCC\_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用时钟

	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//配置GPIO引脚
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置GPIO速率
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//配置GPIO为复用推挽输出
	GPIO\_Init(GPIOB,&GPIO_InitStructure);//GPIO初始化函数
	
	TIM_TimeBaseStruct.TIM_Period=9999;//设置自动重装载的周期值,计算方法多了
	TIM_TimeBaseStruct.TIM_Prescaler=143;//设置预分频系数
	TIM_TimeBaseStruct.TIM_ClockDivision=0;//设置时钟分割,0同TIM\_CKD\_DIV1
	TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
	TIM\_TimeBaseInit(TIM4,&TIM_TimeBaseStruct);//定时器初始化函数
	
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//PWM模式1
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//输出比较极性高
    //多舵机,怎么控制,当然是同一个定时器下的4个通道了,所以,下面的8句就很重要。
	TIM\_OC1Init(TIM4,&TIM_OCInitStructure);//比较输出初始化函数,通道1
	TIM\_OC2Init(TIM4,&TIM_OCInitStructure);//比较输出初始化函数,通道2
	TIM\_OC3Init(TIM4,&TIM_OCInitStructure);//比较输出初始化函数,通道3
    TIM\_OC4Init(TIM4,&TIM_OCInitStructure);//比较输出初始化函数,通道4
	
	TIM\_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); //输出比较1预装载寄存器使能
    TIM\_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);//输出比较2预装载寄存器使能
	TIM\_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);//输出比较3预装载寄存器使能
	TIM\_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);//输出比较4预装载寄存器使能
	
	TIM\_Cmd(TIM4,ENABLE);//TIM4使能,忘了就前功尽弃了
}


头文件

#ifndef \_\_SERVO\_H
#define \_\_SERVO\_H

#include "stm32f10x.h"
#include "stm32f10x\_rcc.h"
#include "stm32f10x\_tim.h"

void Servo\_PWM\_Init(void);

#endif 


最后,最关键的来了,如何使用呢?当然是一句函数了。修改定时器下某一个通道的函数,TIM_SetCompare1(TIM4, 500); 注意:修改哪一个通道的占空比,就要把那个数字1修改为几。
main函数中调用

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

如果你需要这些资料,可以戳这里获取

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103是一款由意法半导体(STMicroelectronics)推出的32位ARM Cortex-M3微控制器系列。要控制舵机,我们需要使用STM32F103的GPIO(通用输入/输出)引脚和定时器功能,以及相应的PWM(脉宽调制)功能。 首先,我们需要在STM32软件开发工具(如Keil或STM32CubeIDE)中创建一个新的项目,选择STM32F103系列芯片。然后,我们可以开始编写源代码。 我们需要设置GPIO引脚为输出模式,并设置定时器作为PWM输出源。可以通过以下代码实现: 1. 首先,包含相关的STM32库文件头文件。 ``` #include "stm32f103xx.h" ``` 2. 然后,设置GPIO引脚为输出模式,并使能GPIO时钟。 ``` GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 假设我们使用引脚A0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); ``` 3. 接下来,我们需要配置定时器作为PWM输出源,并设置相关参数。 ``` TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 假设我们使用TIM2 TIM_TimeBaseInitStruct.TIM_Prescaler = 72 - 1; // 假设系统频率为72MHz TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Period = 20000 - 1; // 假设PWM周期为20ms(50Hz) TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 1500 - 1; // 假设初始脉宽为1.5ms(中间位置) TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_Cmd(TIM2, ENABLE); ``` 通过以上代码,我们成功地设置了GPIO引脚A0为输出模式,并将定时器TIM2配置为PWM输出源。初始脉宽为1.5ms,对应舵机角度的中间位置。 接下来,我们可以根据需要修改脉宽的值以控制舵机的角度。例如,如果要将舵机转到最大角度,可以将脉宽值设置为2.0ms。如果要将舵机转到最小角度,可以将脉宽值设置为1.0ms。 ``` TIM_SetCompare1(TIM2, 2000 - 1); // 最大角度 ``` 为了保持舵机的位置,可以将脉宽值设置为1.5ms。 ``` TIM_SetCompare1(TIM2, 1500 - 1); // 中间位置 ``` 通过以上的代码,我们成功地控制了舵机的角度。 需要注意的是,以上代码只是一个简单示例。实际应用中,可能还需要添加一些额外的代码,如初始化系统时钟、错误处理和中断处理等。 希望以上回答能帮助您理解如何使用STM32F103控制舵机的源代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值