请教下 关于stm32f407的串口发送问题

2019-07-20 13:44发布

程序是这样的

unsigned char ChrToHex(unsigned char uc_val) //字符转字节
{
    if ((uc_val >= 0x30) && (uc_val <= 0x39))
    {
        return (uc_val - 0x30);
    }
    if ((uc_val == 'A') || (uc_val == 'a'))
    {
        return 10;
    }
    if ((uc_val == 'B') || (uc_val == 'b'))
    {
        return 11;
    }
    if ((uc_val == 'C') || (uc_val == 'c'))
    {
        return 12;
    }
    if ((uc_val == 'D') || (uc_val == 'd'))
    {
        return 13;
    }
    if ((uc_val == 'E') || (uc_val == 'e'))
    {
        return 14;
    }
    if ((uc_val == 'F') || (uc_val == 'f'))
    {
        return 15;
    }
    return 0;
}

void StrToHex(unsigned char *p_dest, unsigned char *p_src, unsigned char uc_base, unsigned char uc_size)//字符串数组转换字节数组
{
    unsigned char tmp[2];
    unsigned char i;
    for (i = 0; i < uc_size; i++)
    {
        tmp[0] = p_src[uc_base + i * 2];
        tmp[1] = p_src[uc_base + i * 2 + 1];
        p_dest[i] = ChrToHex(tmp[0]) * 0x10 + ChrToHex(tmp[1]);
    }
}

void USART1_SCAN()
{
    u16  len;
    u16 i;
    if(USART_RX_STA&0x8000)
    {
        len=USART_RX_STA&0x3fff;

        StrToHex(str,USART_RX_BUF,0,20);

        ctrl=str[0];
        func=str[1];
        arg1=str[2];
        arg2=str[3];
        arg3=str[4];
        arg4=str[5];

        USART_SendData(USART1,ctrl);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        USART_SendData(USART1,func);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        USART_SendData(USART1,arg1);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        USART_SendData(USART1,arg2);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        USART_SendData(USART1,arg3);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        USART_SendData(USART1,arg4);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        printf(" ");

        for(i=0; i<len; i++)
        {
            USART_RX_BUF[i]=0;
        }
        len=0;
        USART_RX_STA=0;
    }
}


那么USART_SendData(USART1,arg4);是库函数 发送单字节
但是如果不加上后面的判断发送完成的一句
为什么只能发送最后一个数据
看了他原函数 也是只有一句将数据写入数据寄存器的
还是说要像51的一样再写一个发送函数 在这段程序中 如果我用循环发送的话是没有问题的



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。