📄 lm3s_uart.c
字号:
参数:无
返回:接收到的字符
***************************************************************************************************/
char UART1_Getc(void)//没有调用
{
char c;
c = UARTCharGet(UART1_BASE);
return(c);
}
/***************************************************************************************************
功能:通过UART1接收字符串(要求输入的字符串以"\r\n"结尾)
参数:s 保存接收数据的缓冲区(只接收可打印字符,即ASCII码32~127)
size 接收缓冲区限制长度
返回:实际接收到的有效字符数量(字符串长度)
***************************************************************************************************/
int UART1_Gets(char *s , const int size)//没有调用
{
char c;
int n = 0;
for (;;)
{
c = UART1_Getc(); // 接收1个字符
if ( c == '\r' ) // 如果遇到回车符,则跳出
{
break;
}
if ( n < size ) // 如果小于长度限制
{
if ( isprint(c) ) // 如果接收到的是可打印字符
{
*(s++) = c; // 保存接收到的字符到缓冲区
n++;
}
}
}
*s = '\0'; // 添加字符串结束标志
return(n); // 返回有效的字符数
}
/***************************************************
函数名:SendData_USART0()
功能: Hengyi_En为数据是否被改变 Hengyi_user发送用户模式 Hengyi_Dir电机方向 Hengyi_Drv电机驱动 Hengyi_Speed电机速度 Hengyi_Dis距离
参数:
说明: Hengyi_Dir=0为向上移和左移 Hengyi_Dir=1为下移和右移
返回值: Hengyi_Drv = 0时停止电机 Hengyi_Drv = 1时开启电机
****************************************************/
void SendData_USART0(bool Hengyi_En,unsigned char Hengyi_us,bool Hengyi_Dir,bool Hengyi_Drv,unsigned char Hengyi_Speed,unsigned int Hengyi_Dis,
bool Shengjiang_En,unsigned char Shengjiang_us,bool Shengjiang_Dir,bool Shengjiang_Drv,unsigned char Shengjiang_Speed,unsigned int Shengjiang_Dis,
bool Lasi_En,unsigned char Lasi_us,bool Lasi_Dir,bool Lasi_Drv,unsigned char Lasi_Speed,unsigned int Lasi_Dis
)
{
unsigned char Hengyi_Dir_Drv,Shengjiang_Dir_Drv,Lasi_Dir_Drv;
unsigned char Hengyi_Dis_uBuf[2]={0,0},Shengjiang_Dis_uBuf[2]={0,0},Lasi_Dis_uBuf[2]={0,0};
unsigned char Sum = 0;
//各台电机用户模式判断
if(Hengyi_Drv == 0&&Hengyi_Dis == 0XFFFF&&Hengyi_Speed == 0XFF)
Hengyi_us = 0X00; //清坐标零
else if(Hengyi_Drv == 1&&Hengyi_Dis == 0x00)
Hengyi_us = 0X01; //指定速度不指定距离模式
else if(Hengyi_Drv == 1&&Hengyi_Dis > 0x00)
Hengyi_us = 0X02; //速度距离都指定模式
else
Hengyi_us = 0X03; //停止电机
if(Shengjiang_Drv == 0&&Shengjiang_Dis == 0XFFFF&&Shengjiang_Speed == 0XFF)
Shengjiang_us = 0X00; //清坐标零
else if(Shengjiang_Drv == 1&&Shengjiang_Dis == 0x00)
Shengjiang_us = 0X01; //指定速度不指定距离模式
else if(Shengjiang_Drv == 1&&Shengjiang_Dis > 0x00)
Shengjiang_us = 0X02; //速度距离都指定模式
else
Shengjiang_us = 0X03; //停止电机
if(Lasi_Drv == 0&&Lasi_Dis == 0XFFFF&&Lasi_Speed == 0XFF)
Lasi_us = 0X00; //清坐标零
else if(Lasi_Drv == 1&&Lasi_Dis == 0x00)
Lasi_us = 0X01; //指定速度不指定距离模式
else if(Lasi_Drv == 1&&Lasi_Dis > 0x00)
Lasi_us = 0X02; //速度距离都指定模式
else
Lasi_us = 0X03; //停止电机
Hengyi_Dir_Drv = (Hengyi_En<<4) | (Hengyi_us<<2) | (Hengyi_Drv<< 1) | Hengyi_Dir; //得到发送数据的横移电机编号/驱动/方向
Shengjiang_Dir_Drv = (Shengjiang_En<<4) | (Shengjiang_us<<2) | (Shengjiang_Drv<< 1) | Shengjiang_Dir;
Lasi_Dir_Drv = (Lasi_En<<4) | (Lasi_us<<2) | (Lasi_Drv<< 1) | Lasi_Dir;
Hengyi_Dis_uBuf[0] = (Hengyi_Dis >> 8) &(0XFF); //得到最高8位
Hengyi_Dis_uBuf[1] = Hengyi_Dis & 0XFF; //得到最低8位
Shengjiang_Dis_uBuf[0] = (Shengjiang_Dis >> 8) &(0XFF); //得到最高8位
Shengjiang_Dis_uBuf[1] = Shengjiang_Dis & 0XFF; //得到最低8位
Lasi_Dis_uBuf[0] = (Lasi_Dis >> 8) &(0XFF); //得到最高8位
Lasi_Dis_uBuf[1] = Lasi_Dis & 0XFF; //得到最低8位
Sum = (Hengyi_Dir_Drv+Hengyi_Speed+Hengyi_Dis+
Shengjiang_Dir_Drv+Shengjiang_Speed+Shengjiang_Dis+
Lasi_Dir_Drv+Lasi_Speed+Lasi_Dis)%255; //得到和值
UART1_Putc(0XA1); //发送给PWM板 引导码
UART1_Putc(Hengyi_Dir_Drv); //发送横移电机机编号/方向/驱动
UART1_Putc(Hengyi_Speed); //发送横移速度
UART1_Putc(Hengyi_Dis_uBuf[0]); //发送距离高位
UART1_Putc(Hengyi_Dis_uBuf[1]); //发送距离低位
UART1_Putc(Shengjiang_Dir_Drv); //发送升降电机编号/方向/驱动
UART1_Putc(Shengjiang_Speed); //发送升降降速度
UART1_Putc(Shengjiang_Dis_uBuf[0]);//发送距离高位
UART1_Putc(Shengjiang_Dis_uBuf[1]);//发送距离低位
UART1_Putc(Lasi_Dir_Drv); //发送拉丝电机编号/方向/驱动
UART1_Putc(Lasi_Speed); //发送拉丝速度
UART1_Putc(Lasi_Dis_uBuf[0]); //发送距离高位
UART1_Putc(Lasi_Dis_uBuf[1]); //发送距离低位
UART1_Putc(Sum); //发送和值
UART0_Putc(0XA1); //发送给PWM板 引导码
UART0_Putc(Hengyi_Dir_Drv); //发送横移电机机编号/方向/驱动
UART0_Putc(Hengyi_Speed); //发送横移速度
UART0_Putc(Hengyi_Dis_uBuf[0]); //发送距离高位
UART0_Putc(Hengyi_Dis_uBuf[1]); //发送距离低位
UART0_Putc(Shengjiang_Dir_Drv); //发送升降电机编号/方向/驱动
UART0_Putc(Shengjiang_Speed); //发送升降降速度
UART0_Putc(Shengjiang_Dis_uBuf[0]);//发送距离高位
UART0_Putc(Shengjiang_Dis_uBuf[1]);//发送距离低位
UART0_Putc(Lasi_Dir_Drv); //发送拉丝电机编号/方向/驱动
UART0_Putc(Lasi_Speed); //发送拉丝速度
UART0_Putc(Lasi_Dis_uBuf[0]); //发送距离高位
UART0_Putc(Lasi_Dis_uBuf[1]); //发送距离低位
UART0_Putc(Sum); //发送和值
}
/***************************************************
函数名:Getdata_Command()
功能:
参数: 发送取数命令 0xA2 0XAA 0X55 和11个0x00 构成14个字节
说明:
返回值:
****************************************************/
void Getdata_Command(void)
{
unsigned char i = 0;
UART1_Putc(0xA2);
UART1_Putc(0xAA);
UART1_Putc(0X55);
for(i=0;i<11;i++)
{
UART1_Putc(0X00);
}
}
/***************************************************
函数名:Response_Command()
功能:
参数: 发送取数命令 0x77 0X99 0X33或者0xAA 和11个0x00 构成14个字节
说明:
返回值:
****************************************************/
void Response_Command(unsigned char stype)
{
unsigned char i = 0;
if(stype==Correct_Stype)//发送应答正确命令
{
UART1_Putc(0xA3);
UART1_Putc(0x55);
UART1_Putc(0XAA);
}
if(stype==Error_Stype)
{
UART1_Putc(0xA3);
UART1_Putc(0x55);
UART1_Putc(0X55);
}
for(i=0;i<11;i++)
{
UART1_Putc(0X00);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -