OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2661|回复: 3

STM32F429 cubeMX单链表串口问题

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-4-30
在线时间
5 小时
发表于 2020-6-23 22:21:57 | 显示全部楼层 |阅读模式
1金钱
我设计了一个SMT32f429的串口的接收数据并重新打印数据在屏幕上的程序,不定长型,用的是单链表解决。但不知道为什么,数据发送超过31之后,会接受到null值,现在不知道是什么原因,请大佬们帮助解答下.
这个是接受不定长的17个数据的图像



这个是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;
  }

}[url=] 2_UART_Chain.rar (19.26 MB, 下载次数: 4)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-6-25 00:56:48 | 显示全部楼层
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-4-30
在线时间
5 小时
 楼主| 发表于 2020-6-25 20:14:13 | 显示全部楼层
本帖最后由 zhiweizhang 于 2020-6-26 10:44 编辑

我看过原子哥写的malloc,该不会是因为这个函数的问题吧?是不是要像原子哥你一样去重写,不然动态分配就会出问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-6-27 22:09:58 | 显示全部楼层
zhiweizhang 发表于 2020-6-25 20:14
我看过原子哥写的malloc,该不会是因为这个函数的问题吧?是不是要像原子哥你一样去重写,不然动态分配就 ...

系统自带的也没有问题,只是不支持多块内存管理。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 05:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表