(3)STM32 SG90舵机模块测试

1. 资源简介

  • stm32 rct6板
  • SG90舵机模块
    在这里插入图片描述
    接线引脚:
    橙色:信号线
    红色:电源+5v
    咖色:GND
    此模块三条线固定在一起,如果用开发板测试需要连线的情况下需要一公一母的杜邦线转接一下才行

2.测试源码

不需要其它的文件,测试用只需要将下面代码全部复制到main函数编译运行即可:

#include "stm32f10x.h"   
void pwm_init(void);
void delay(uint32_t x);
int main()
{	  
	pwm_init();	 //PWM初始化
	while(1)
	{
		TIM_SetCompare1(TIM3, 195);//0度
		delay(10000000);
//		TIM_SetCompare1(TIM3, 190);//45度
//		delay(10000000);
		TIM_SetCompare1(TIM3, 185);//90度
		delay(10000000);
//		TIM_SetCompare1(TIM3, 180);//135度
//		delay(10000000);
//    TIM_SetCompare1(TIM3, 177);//比180度旋转的稍微小一点,因为舵机旋转到180度之后可能会卡一下,详细原因可以自行查找
//		delay(10000000);	
//		TIM_SetCompare1(TIM3, 175);//180度
//		delay(10000000);	
	}
}


void pwm_init()
{
	GPIO_InitTypeDef GPIO_InitStructure;   //声明初始化GPIO的结构体变量

	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明初始化定时器的结构体变量

	TIM_OCInitTypeDef TIM_OCInitStructure;//根据TIM_OCInitStruct中指定的参数初始化外设TIMx

	//开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

	//  配置GPIO的模式和IO口
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;// PC6
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	//TIM3定时器初始化
	TIM_TimeBaseInitStructure.TIM_Period = 199; //PWM 频率=72000/(199+1)=36Khz//设置自动重装载寄存器周期的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//设置用来作为TIMx时钟频率预分频值
	TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;	//TIM向上计数模式
	TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);

	GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射 规则在F103参考手册里。

	//PWM初始化
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//决定输出有效电平
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
	TIM_OC1Init(TIM3,&TIM_OCInitStructure);//OC1表示通道1
	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的预装载寄存器
	TIM_Cmd(TIM3,ENABLE);//使能或者失能TIMx外设
}

void delay(uint32_t x)
{
  while(x--);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无敌最俊朗-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值