初级会员

- 积分
- 139
- 金钱
- 139
- 注册时间
- 2019-4-8
- 在线时间
- 76 小时
|

楼主 |
发表于 2019-12-18 14:31:19
|
显示全部楼层
感谢 抽空回复 我是个菜鸟现在只能实现简单的串口控制正反转 能麻烦您帮忙改改嘛
电机
#include "motor.h"
#include "delay.h"
#include "usart.h"
uint16_t phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A
uint16_t phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D
void Delay_xms(u16 x)
{
u16 i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
void Moto_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );
}
void Motorcw(u16 speed)
{
uint8_t i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOC,phasecw);
delay_ms(speed);
}
}
void Motorccw(u16 speed)
{
uint8_t i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOC,phaseccw);
delay_ms(speed);
}
}
void MotorStop(void)
{
GPIO_Write(GPIOC,0x0000);
}
主函数
#include "sys.h"
#include "delay.h"
#include "motor.h"
#include "usart.h"
u16 len;
u16 t;
u8 data=0;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为115200
delay_init(); //延时函数初始化
Moto_Init();
while(1)
{
// Motorcw_angle(180,8);
// MotorStop();
// delay_ms(1000);
// Motorccw_angle(180,8);
// MotorStop();
// delay_ms(1000);
if(USART_RX_STA&0x8000)
{
data=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
data=USART_RX_BUF[0];
switch(data)
{
case 'L':printf("\r\n反转\r\n");Motorcw(10);data=0;break;
case 'R':printf("\r\n正转\r\n");Motorccw(10);data=0;break;
case 'S':printf("\r\n暂停\r\n");MotorStop();data=0;break;
default : break;
}
// printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}
}
} |
|