OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2925|回复: 1

STM32F103控制舵机,现在不知道不能用啊

[复制链接]

16

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2018-4-9
在线时间
111 小时
发表于 2018-4-14 09:32:05 | 显示全部楼层 |阅读模式
5金钱
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "PWM.h"

/***************************************************************************
*名   称:TIM3_PWM_Init()    2018.4.14
*功   能:初始化定时器3
*输   入:无
*输   出:无
*说   明:使用TIM3   CH输出PWM波
**************************************************************************/
void TIM3_PWM_Init(u16 arr,u16 psc)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure;
       
//使能初始化
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);        //使能PA7
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
  RCC_APB2Periph_AFIO, ENABLE);                               //使能 GPIO 和 AFIO 复用功能时钟
       
//GPIO口初始化                                                      //设置该引脚为复用输出功能,输出 TIM3 CH2 的 PWM 脉冲波形
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;             //复用推挽输出
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                   //TIM_CH2
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //GPIO速率50Hz
  GPIO_Init(GPIOA, &GPIO_InitStructure);                      //①初始化 GPIO
       
//初始化 TIM3
  RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        //①使能定时器 3 时钟
  GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);        //
  TIM_TimeBaseStructure.TIM_Period = arr;                     //设置在自动重装载周期值
  TIM_TimeBaseStructure.TIM_Prescaler =psc;                   //设置预分频值
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;                //设置时钟分割:TDTS = Tck_tim
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);             //③初始化 TIM3
       
//初始化 TIM3 Channel2 PWM 模式
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;           //选择 PWM 模式 1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
  TIM_OCInitStructure.TIM_Pulse = 145;                         //设置跳变值,当计数器计数到这个值时,电平发生跳变
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   //输出极性高
  TIM_OC2Init(TIM1, &TIM_OCInitStructure);                    //④初始化外设 TIM3 OC2
  TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);           //使能预装载寄存器
  TIM_ARRPreloadConfig(TIM1, ENABLE);                         // 使能 TIM3 重载寄存器 ARR
  TIM_Cmd(TIM1, ENABLE);                                      //⑤使能 TIM3
}


void RCC_Configuration(void)
{
   ErrorStatus HSEStartUpStatus;
   RCC_DeInit();
   RCC_HSEConfig(RCC_HSE_ON);
   HSEStartUpStatus = RCC_WaitForHSEStartUp();
     if(HSEStartUpStatus == SUCCESS)
       {

           FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
           FLASH_SetLatency(FLASH_Latency_2);
           RCC_HCLKConfig(RCC_SYSCLK_Div1);
           RCC_PCLK1Config(RCC_HCLK_Div2);
           RCC_PCLK2Config(RCC_HCLK_Div1);
           RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
           RCC_PLLCmd(ENABLE);
             while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
               RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
             while(RCC_GetSYSCLKSource() != 0x08);      
        }
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE);
}

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "PWM.h"


int main(void)
{
         
         u16 pwmval=0;
         u8  dir=1;
         delay_init();
         RCC_Configuration();
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置 NVIC 中断分组 2
         TIM3_PWM_Init(899,1430);
             
  while(1)
        {
                delay_ms(100);
       if(dir)
                   pwmval++;
       else
                   pwmval--;
         if(pwmval>949)
                         dir=0;
         if(pwmval==899)
                         dir=1;
      TIM_SetCompare2(TIM3,100);
               
     }

}

请问大佬为啥不能用啊

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-16 01:44:25 | 显示全部楼层
参考我们例程,慢慢找问题。的对比寄存器值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 19:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表