⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lm3s_uart.c

📁 基于Cortex-M3的全自动焊接机
💻 C
📖 第 1 页 / 共 2 页
字号:
参数:无
返回:接收到的字符
***************************************************************************************************/
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 + -