高中生
最后登录1970-1-1
在线时间 小时
注册时间2021-9-25
|
3火花
不知道这部分代码为什么一直没有反应,还请各位大佬帮帮忙,实在找不到为什么没反应,去用l298n驱动一个接pa6一个接地连接普通的直流减速电机也没反应
使用的芯片是stm32f103c8t6,各位大佬帮帮孩子吧
#include "bsp_moto.h"
#include "systick.h"
//定义为脉冲宽度的比较
uint16_t CCR1_Val;
uint16_t CCR2_Val;
//对TIM3定时器的嵌套向量中断控制寄存器进行调配
static void NVIC_Configuration()
{
//定义NVIC初始化结构体
NVIC_InitTypeDef NVIC_InitStructer;
//设置中断优先级分组
NVIC_PriorityGroupConfig (NVIC_PriorityGroup_1);
//配置中断源,中断的抢占优先级子优先级和使能中断
NVIC_InitStructer .NVIC_IRQChannel =TIM3_IRQn ;
NVIC_InitStructer .NVIC_IRQChannelPreemptionPriority =1;
NVIC_InitStructer .NVIC_IRQChannelSubPriority =2;
NVIC_InitStructer .NVIC_IRQChannelCmd =ENABLE;
//NVIC初始化
NVIC_Init (&NVIC_InitStructer );
}
void TIM3_PWM_Init(uint16_t arr)
{
GPIO_InitTypeDef GPIO_InitStructer;//pwm输出相关GPIO口的初始化结构体
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructer;//定时器时钟基初始化结构体
TIM_OCInitTypeDef TIM_OCInitStructer;//定时器输出比较初始化结构体
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE);//打开定时器TIM3的时钟
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE);//打开PWM输出相关的GPIO口的时钟
//TIM3输出比较通道1的GPIO口初始化
GPIO_InitStructer .GPIO_Pin = GPIO_Pin_6 ;
GPIO_InitStructer .GPIO_Mode = GPIO_Mode_AF_PP ;//我们使用的是GPIO口的默认复用功能
GPIO_InitStructer .GPIO_Speed =GPIO_Speed_50MHz ;
GPIO_Init (GPIOA ,&GPIO_InitStructer);
//TIM3输出比较通道2的GPIO口初始化
GPIO_InitStructer .GPIO_Pin = GPIO_Pin_7 ;
GPIO_InitStructer .GPIO_Mode = GPIO_Mode_AF_PP ;
GPIO_InitStructer .GPIO_Speed =GPIO_Speed_50MHz ;
GPIO_Init (GPIOA ,&GPIO_InitStructer);
//配置定时器3时钟基的成员
TIM_TimeBaseStructer .TIM_Prescaler =71;//预分频系数为71
TIM_TimeBaseStructer .TIM_Period =arr ;//我们要设置的自动重装载寄存器的值,相当于PWM周期
TIM_TimeBaseStructer .TIM_CounterMode =TIM_CounterMode_Up ;//向上计数模式
TIM_TimeBaseStructer .TIM_ClockDivision =0;//不对时钟进行分频
//TIM_TimeBaseStructer .TIM_RepetitionCounter =0; 高级定时器的功能,用于控制PWM个数
TIM_TimeBaseInit(TIM3 ,&TIM_TimeBaseStructer );//对时钟基进行初始化
TIM_ITConfig (TIM3 ,TIM_IT_Update ,ENABLE );//使能TIM3的定时器中断
//配置定时器3输出比较控制寄存器1初始化结构体的成员
TIM_OCInitStructer.TIM_OCMode = TIM_OCMode_PWM1 ; // 配置为PWM模式1
TIM_OCInitStructer.TIM_OutputState = TIM_OutputState_Enable; // 输出使能
TIM_OCInitStructer.TIM_OCPolarity = TIM_OCPolarity_High; // 输出通道电平极性配置
// 输出比较通道 1
TIM_OCInitStructer.TIM_Pulse = CCR1_Val;
TIM_OC1Init(TIM3, &TIM_OCInitStructer);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
// 输出比较通道 2
TIM_OCInitStructer.TIM_Pulse = CCR2_Val;
TIM_OC2Init(TIM3, &TIM_OCInitStructer);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
NVIC_Configuration();//嵌套向量中断控制寄存器配置
//使能定时器3时钟
TIM_Cmd(TIM3 ,ENABLE);
}
void forward()
{
CCR1_Val=50;
CCR2_Val =50;
}
void left()
{
CCR1_Val =40;
CCR2_Val =50;
}
void right()
{
CCR1_Val =50;
CCR2_Val =40;
}
void stop()
{
CCR1_Val =0;
CCR2_Val =0;
}
void start()
{
uint8_t i;
for(i=0;i<60;i++)
{
CCR1_Val =i;
CCR2_Val =i;
SysTick_Delay_Us(50);
}
}
|
|