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