中级会员
 
- 积分
- 207
- 金钱
- 207
- 注册时间
- 2018-2-11
- 在线时间
- 24 小时
|

楼主 |
发表于 2018-8-1 20:42:26
|
显示全部楼层
各位大佬,又来麻烦大家了。因为,这个gpio点亮led灯,是点亮了,可是驱动电机电机不动啊
用了l298,但是l298一开始电源的led灯是亮的,后来就不亮了。
代码我是这么写的,想请教大佬们,这样写能驱动吗?
motor.c函数:
#ifndef __MOTOR_H_
#define __MOTOR_H_
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
void gpio_motor_config(void);
void left_wheels_foward(void);
void right_wheels_foward(void);
void left_wheels_back(void);
void right_wheels_back(void);
void gpio_go_straight(void);
void gpio_turn_left(void);
void gpio_turn_right(void);
void gpio_back(void);
#endif
motor.h函数:
#include "motor.h"
void gpio_motor_config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | \
RCC_APB2Periph_GPIOC, ENABLE);
/*配置PA5-7*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
/*配置PB5-7*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
/*配置PC7-9*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
/*配置PC7-9*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
}
void left_wheels_foward(void)
{
/*左前轮使能,正转*/
GPIO_SetBits(GPIOA, GPIO_Pin_5);
GPIO_SetBits(GPIOA, GPIO_Pin_6);
GPIO_ResetBits(GPIOA, GPIO_Pin_7);
/*左后轮使能,正转*/
GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_SetBits(GPIOB, GPIO_Pin_6);
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
}
void right_wheels_foward(void)
{
/*右前轮使能,正转*/
GPIO_SetBits(GPIOC, GPIO_Pin_7);
GPIO_SetBits(GPIOC, GPIO_Pin_8);
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
/*右后轮使能,正转*/
GPIO_SetBits(GPIOC, GPIO_Pin_0);
GPIO_SetBits(GPIOC, GPIO_Pin_2);
GPIO_ResetBits(GPIOC, GPIO_Pin_3);
}
void left_wheels_back(void)
{
/*左前轮使能,反转*/
GPIO_SetBits(GPIOA, GPIO_Pin_5);
GPIO_ResetBits(GPIOA, GPIO_Pin_6);
GPIO_SetBits(GPIOA, GPIO_Pin_7);
/*左后轮使能,反转*/
GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOB, GPIO_Pin_6);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
}
void right_wheels_back(void)
{
/*右前轮使能,反转*/
GPIO_SetBits(GPIOC, GPIO_Pin_7);
GPIO_ResetBits(GPIOC, GPIO_Pin_8);
GPIO_SetBits(GPIOC, GPIO_Pin_9);
/*右后轮使能,反转*/
GPIO_SetBits(GPIOC, GPIO_Pin_0);
GPIO_ResetBits(GPIOC, GPIO_Pin_2);
GPIO_SetBits(GPIOC, GPIO_Pin_3);
}
void gpio_go_straight(void)
{
void left_wheels_foward();
void right_wheels_foward();
}
void gpio_turn_left(void)
{
void left_wheels_back();
void right_wheels_foward();
}
void gpio_turn_right(void)
{
void left_wheels_foward();
void right_wheels_back();
}
void gpio_back(void)
{
void left_wheels_back();
void right_wheels_back();
}
trail.h函数
#ifndef __TRAIL_H_
#define __TTAIL_H_
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
void gpio_trail_config(void);
#endif
trail.c函数
#include "trail.h"
void gpio_trail_config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/*配置PA5-7*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
main.c函数:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "motor.h"
#include "trail.h"
u8 left_tcrt_state;
u8 right_tcrt_state;
int main()
{
gpio_trail_config();
gpio_motor_config();
while(1)
{
left_tcrt_state = 0;
right_tcrt_state = 0;
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 1) //反射足够,输出为1
{
left_tcrt_state = 1;
}
else if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1)
{
right_tcrt_state = 1;
}
else
{
;
}
if(left_tcrt_state == 0 && right_tcrt_state == 0)
{
gpio_go_straight();
}
else if(left_tcrt_state == 1 && right_tcrt_state == 0)
{
gpio_turn_left();
}
else if(left_tcrt_state == 0 && right_tcrt_state == 1)
{
gpio_turn_right();
}
else if(left_tcrt_state == 1 && right_tcrt_state == 1)
{
gpio_back();
}
else
{
;
}
}
}
全部是用gpio的,传感器试过了,传感器应该没问题,能返回信号,就是电机不动,为什么啊
|
|