我是靠谱客的博主 落寞大白,最近开发中收集的这篇文章主要介绍stm32f103控制舵机(数字舵机和模拟舵机都一样)双通道(代码改与官方文档),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include “stm32f10x.h”
#include “bsp_GeneralTim.h”

void delay(uint32_t count)
{
for(;count>0;count–);
}
extern __IO u16 ChannelPulse ;
int main(void)
{
/* 定时器初始化 */
GENERAL_TIM_Init();

delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
TIM_SetCompare1(GENERAL_TIM,1490);
TIM_SetCompare2(GENERAL_TIM,ChannelPulse);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
delay(0xfffff);
TIM_SetCompare1(GENERAL_TIM,ChannelPulse);	
TIM_SetCompare2(GENERAL_TIM,1700);

while(1)
{

}
}
/***********************END OF FILE/

#ifndef __BSP_GENERALTIME_H
#define __BSP_GENERALTIME_H

#include “stm32f10x.h”

/通用定时器TIM参数定义,只限TIM2、3、4、5/
// 当使用不同的定时器的时候,对应的GPIO是不一样的,这点要注意
// 我们这里默认使用TIM3

#define GENERAL_TIM TIM3
#define GENERAL_TIM_APBxClock_FUN RCC_APB1PeriphClockCmd
#define GENERAL_TIM_CLK RCC_APB1Periph_TIM3
#define GENERAL_TIM_Period 9
#define GENERAL_TIM_Prescaler 71
// TIM3 输出比较通道1
#define GENERAL_TIM_CH1_GPIO_CLK RCC_APB2Periph_GPIOA
#define GENERAL_TIM_CH1_PORT GPIOA
#define GENERAL_TIM_CH1_PIN GPIO_Pin_6

// TIM3 输出比较通道2
#define GENERAL_TIM_CH2_GPIO_CLK RCC_APB2Periph_GPIOA
#define GENERAL_TIM_CH2_PORT GPIOA
#define GENERAL_TIM_CH2_PIN GPIO_Pin_7

/函数声明******/

void GENERAL_TIM_Init(void);

#endif /* __BSP_GENERALTIME_H */

#include “bsp_GeneralTim.h”
__IO u16 ChannelPulse =1920;
static void GENERAL_TIM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

// 输出比较通道1 GPIO 初始化
RCC_APB2PeriphClockCmd(GENERAL_TIM_CH1_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = GENERAL_TIM_CH1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GENERAL_TIM_CH1_PORT, &GPIO_InitStructure);

	// 输出比较通道2 GPIO 初始化
RCC_APB2PeriphClockCmd(GENERAL_TIM_CH2_GPIO_CLK, ENABLE);

GPIO_InitStructure.GPIO_Pin = GENERAL_TIM_CH2_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GENERAL_TIM_CH2_PORT, &GPIO_InitStructure);
}

/* ---------------- PWM信号 周期和占空比的计算--------------- /
// ARR :自动重装载寄存器的值
// CLK_cnt:计数器的时钟,等于 Fck_int / (psc+1) = 72M/(psc+1)
// PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR
(PSC+1) / 72M
// 占空比P=CCR/(ARR+1)

static void GENERAL_TIM_Mode_Config(void)
{
// 开启定时器时钟,即内部时钟CK_INT=72M
GENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK,ENABLE);

/--------------------时基结构体初始化-------------------------/
// 配置周期,这里配置为100K

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 自动重装载寄存器的值,累计TIM_200个频率后产生一个更新或者中断
TIM_TimeBaseStructure.TIM_Period=20000-1;
// 驱动CNT计数器的时钟 = Fck_int/(psc+1) 720
TIM_TimeBaseStructure.TIM_Prescaler= 72-1; //0.01ms
// 时钟分频因子 ,配置死区时间时需要用到
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
// 计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
// 重复计数器的值,没用到不用管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// 初始化定时器
TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);

/*--------------------输出比较结构体初始化-------------------*/	

TIM_OCInitTypeDef  TIM_OCInitStructure;
// 配置为PWM模式1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
// 输出使能
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
// 输出通道电平极性配置	
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

// 输出比较通道 1
TIM_OCInitStructure.TIM_Pulse = ChannelPulse;  //占空比的值
TIM_OC1Init(GENERAL_TIM, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);//预加载寄存器。

	// 输出比较通道 2
TIM_OCInitStructure.TIM_Pulse = 1050;
TIM_OC2Init(GENERAL_TIM, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);

// 使能计数器
TIM_Cmd(GENERAL_TIM, ENABLE);

}

void GENERAL_TIM_Init(void)
{
GENERAL_TIM_GPIO_Config();
GENERAL_TIM_Mode_Config();
}

/***********************END OF FILE/

最后

以上就是落寞大白为你收集整理的stm32f103控制舵机(数字舵机和模拟舵机都一样)双通道(代码改与官方文档)的全部内容,希望文章能够帮你解决stm32f103控制舵机(数字舵机和模拟舵机都一样)双通道(代码改与官方文档)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部