新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 2019-3-24
- 在线时间
- 3 小时
|
#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
}
|
|