新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2020-4-30
- 在线时间
- 5 小时
|
我设计了一个SMT32f429的串口的接收数据并重新打印数据在屏幕上的程序,不定长型,用的是单链表解决。但不知道为什么,数据发送超过31之后,会接受到null值,现在不知道是什么原因,请大佬们帮助解答下.
这个是接受不定长的17个数据的图像
这个是接受不定长数据21个的图像
这个是31个
到这里都很完美,单链表数据存储也没有出错,内存这么数据也不可能爆表。
但就是发送超过31后的数据,只能输出打印31个,不知道问题出在哪里,查过串口接受部分的确接受了41个,但在串口回调函数处却表明有接受过一次null值,输出表明第31个后有null值,实在不知道怎么解决。复位重启后直接输出41个也是这样,求大佬帮忙解答下。
。
串口回调函数部分:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
if(huart->Instance == USART1){
numss++;
creatPointer(BuffPtr);//创建单链表,添加数据
if(BuffPtr == 0x0a){
overFalg = 1;
BuffPtr = 0;
}
if(BuffPtr == NULL){
HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n====\r\n",8,100);
}
HAL_UART_Receive_IT(&huart1, &BuffPtr, 1);
}
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback could be implemented in the user file
*/
}
单链表添加:
void creatPointer(uint8_t data){
struct Pointer* pointer = (struct Pointer*)malloc(sizeof(struct Pointer));;
pointer->data = data;
pointer->next = NULL;
if(head == NULL){
head = pointer;
}else
end->next = pointer;
end = pointer;
}
单链表输出:
void outPointer(){
struct Pointer *temp = head;
while (temp !=NULL){
nums2++;
HAL_UART_Transmit(&huart1,&(temp->data),1,1000);
while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC)!=SET);
temp = temp->next;
}
}
2_UART_Chain.rar
(19.26 MB, 下载次数: 12)
|
|