兄弟们,帮忙看下这个主程序应该写点啥,我正在学习这个,希望早点让电机动起来

2019-07-21 03:46发布

#include "main.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"     //touwenjian
void SystemInit (void)
{
  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
  /* Set HSION bit */
  RCC->CR |= (unsigned int)0x00000001;    //时钟控制寄存器  开启内部8MHz时钟

  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
}
void MiniBalance_Motor_Init(void)
{
        RCC->APB2ENR|=1<<3;       //位2使能,GPIOB
        GPIOB->CRH&=0X0000FFFF;   //GPIOB->CRH采用浮空输入模式(复位后的状态)
        GPIOB->CRH|=0X22220000;   //GPIOB.12|GPIOB.13|GPIOB.14|GPIOB.15
}
void MiniBalance_PWM_Init(u16 arr,u16 psc)      //脉冲宽度调制
{                                                         
        MiniBalance_Motor_Init();
        RCC->APB1ENR|=1<<1;                     //使能TIM3   
        RCC->APB2ENR|=1<<3;                     //位2使能,GPIOB      
        GPIOB->CRL&=0XFFFFFF00;                 //GPIOB.0|GPIOB.1采用复用功能推挽输出模式最大速度=50MHz
        GPIOB->CRL|=0X000000BB;
        TIM3->ARR=arr;                          //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
        TIM3->PSC=psc;                          //设置用来作为TIMx时钟频率除数的预分频值
        TIM3->CCMR2|=6<<12;                     //CH4 PWM模式1   先有效电平后无效电平  有效电平、无效电平是高还是低,由CCER的CCxP位决定
        TIM3->CCMR2|=6<<4;                      //CH3 PWM模式1   先有效电平后无效电平  有效电平、无效电平是高还是低,由CCER的CCxP位决定
        TIM3->CCMR2|=1<<11;                     //CH4 预装载使能
        TIM3->CCMR2|=1<<3;                      //CH3预装载使能
        TIM3->CCER|=1<<12;                      //OC4输出使能
        TIM3->CCER|=1<<8;                       //OC3 输出使能
        TIM3->CR1=0x8000;  
        TIM3->CR1|=0x01;                                                                                   
}   
int main(void)   
{
        SysTick->CTRL&=0xfffffffb;
        SystemInit();
        MiniBalance_PWM_Init(3599,0);
        while(1)

{
        GPIOB->ODR &= ~(1<<8);                   //PB7输出低电平
        PWMA = 3000;
        PWMB = 3000;
        GPIO_ResetBits(GPIOB,GPIO_Pin_15);       //AIN2=0
        GPIO_SetBits(GPIOB,GPIO_Pin_14);         //AIN1=1   
        GPIO_ResetBits(GPIOB,GPIO_Pin_13);       //BIN1=0
        GPIO_SetBits(GPIOB,GPIO_Pin_12);         //BIN2=1   
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。