求助F4探索者板子的串口的两个接口函数

2019-07-20 02:47发布

本人在调试语音模块时候,串口接收这块一直有问题,都调了两个星期了,要哭了,,请大家帮我写两个函数,,中断函数就是原子给的没动,图片给出,然后就是两个函数,一个是接口为uint16_t  UART_Get_char(void);的接收一个字节字符的方法,,,还有一个是void UART_Get_String(unsigned char *Pst,uint16_t Length);这个接收几个字节接口的函数,我自己写的,已经贴出来,希望大佬们帮我写两个函数,,,实在没办法了,如果接收正常了,十分感谢,并且回馈100元现金。本人也是劳累,希望大神完成我给出的两个函数

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
HCHDaLeiGe
2019-07-20 14:03
zzhdbd159 发表于 2019-4-2 18:29
。。能具体的说下怎么处理么,小白不懂,

//数据处理线程
unsigned char rcvbuffer[8*1024] = {0};
unsigned char tempbuffer[8*1024] = {0};
int rcvnum = 0;
int handlenum = 0;
_Bool rcvflg = true;

void UsartRx_TaskEntry(ULONG ulPara)
{
        int tempnum = 0;
               
        while(1)
        {
                if(rcvflg == false)
                {
                        if (rcvnum < handlenum)
                        {
                                tempnum = rcvnum;
                                memcpy(tempbuffer,rcvbuffer+handlenum,sizeof(rcvbuffer)-handlenum);
                                memcpy(tempbuffer+sizeof(rcvbuffer)-handlenum,rcvbuffer,tempnum);
                                //数据处理函数
                                if(tempnum == rcvnum)
                                {
                                        rcvnum = 0;
                                        handlenum = 0;
                                }
                                else
                                {
                                        handlenum = tempnum;
                                }
                        }
                        else
                        {
                                if(rcvnum > 0)
                                {
                                        tempnum = rcvnum;
                                        memcpy(tempbuffer,rcvbuffer+handlenum,tempnum-handlenum);
                                        //数据处理函数
                                        if(tempnum == rcvnum)
                                        {
                                                rcvnum = 0;
                                                handlenum = 0;
                                        }
                                        else
                                        {
                                                handlenum = tempnum;
                                        }
                                }
                        }
                }
                vTaskDelay(10);
        }
}


//接收中断函数
extern unsigned char rcvbuffer[8*1024];
extern int rcvnum;
extern _Bool rcvflg;

void USART1_IRQHandler(void)
{
        u8 Res;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
                rcvflg = 1;
                Res =USART_ReceiveData(USART1);
                rcvbuffer[rcvnum] = Res;
                rcvnum++;
                if(rcvnum == sizeof(rcvbuffer))
                {
                        rcvnum = 0;
                }
                rcvflg = 0;                  
        }
}

一周热门 更多>