|
@@ -1,24 +1,23 @@
|
|
#include "main.h"
|
|
#include "main.h"
|
|
|
|
|
|
-static void TIM3_Init(u16 arr,u16 psc);
|
|
|
|
-static void setMG90S_close(void);
|
|
|
|
-static void setMG90S_open(void);
|
|
|
|
|
|
+static void SG90_TIM3_Init(u16 arr,u16 psc);
|
|
|
|
+static void SG90_Angle(float angle);
|
|
|
|
|
|
-MG90SClassStruct MG90SClass = {
|
|
|
|
- TIM3_Init,
|
|
|
|
- setMG90S_open,
|
|
|
|
- setMG90S_close
|
|
|
|
|
|
+SG90ClassStruct SG90Class = {
|
|
|
|
+ SG90_TIM3_Init,
|
|
|
|
+ SG90_Angle
|
|
};
|
|
};
|
|
|
|
|
|
-// PWM初始化
|
|
|
|
-static void TIM3_Init(u16 arr,u16 psc)
|
|
|
|
|
|
+// PWM初始化 1000-1,1440-1
|
|
|
|
+static void SG90_TIM3_Init(u16 arr,u16 psc)
|
|
{
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
|
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
|
TIM_OCInitTypeDef TIM_OCInitStructure;
|
|
TIM_OCInitTypeDef TIM_OCInitStructure;
|
|
|
|
|
|
|
|
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO外设时钟使能
|
|
|
|
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
|
|
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能GPIO外设时钟使能
|
|
|
|
|
|
|
|
//设置该引脚为复用输出功能,输出TIM3 CH1的PWM脉冲波形
|
|
//设置该引脚为复用输出功能,输出TIM3 CH1的PWM脉冲波形
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM3_CH1
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM3_CH1
|
|
@@ -31,12 +30,13 @@ static void TIM3_Init(u16 arr,u16 psc)
|
|
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
|
|
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
|
|
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
|
|
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
|
|
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
|
|
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
|
|
|
|
+ TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
|
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
|
|
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
|
|
|
|
|
|
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
|
|
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
|
|
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
|
|
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
|
|
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
|
|
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
|
|
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
|
|
|
|
|
|
+ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
|
|
TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
|
|
TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
|
|
|
|
|
|
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //CH1预装载使能
|
|
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //CH1预装载使能
|
|
@@ -44,15 +44,9 @@ static void TIM3_Init(u16 arr,u16 psc)
|
|
TIM_Cmd(TIM3, ENABLE); //使能TIMx
|
|
TIM_Cmd(TIM3, ENABLE); //使能TIMx
|
|
TIM_CtrlPWMOutputs(TIM3,ENABLE); //MOE 主输出使能
|
|
TIM_CtrlPWMOutputs(TIM3,ENABLE); //MOE 主输出使能
|
|
}
|
|
}
|
|
-// 关闭
|
|
|
|
-static void setMG90S_close(void)
|
|
|
|
-{
|
|
|
|
- TIM_SetCompare1(TIM3, 970);
|
|
|
|
- AllFlag.MG90S_ONOFF_flag = 0;
|
|
|
|
-}
|
|
|
|
-// 开启
|
|
|
|
-static void setMG90S_open(void)
|
|
|
|
|
|
+
|
|
|
|
+static void SG90_Angle(float angle)
|
|
{
|
|
{
|
|
- TIM_SetCompare1(TIM3, 900);
|
|
|
|
- AllFlag.MG90S_ONOFF_flag = 1;
|
|
|
|
|
|
+ angle = (uint16_t)(50.0 * angle / 9.0 + 250.0);
|
|
|
|
+ TIM_SetCompare1(TIM3, angle);
|
|
}
|
|
}
|