请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

串口连续接收同时写入FLASH数据不全

[复制链接]
Neo2023 提问时间:2024-6-22 16:48 / 未解决
在学习写一个Bootloader的过程中,想要通过串口助手直接把bin文件发到STM32并写入到APP_FLASH。

35kB的bin文件,只能成功写入十几个字节,还每次都不一样多。
把波特率从115200降低到9600时能写入6kB数据,继续降低到2400时能写入7kB数据到Flash。
还请大佬指教~

                    userapplen =0;
                    timeout = HAL_MAX_DELAY;
                    /* Clean the input path */
                    __HAL_UART_FLUSH_DRREGISTER(&huart1);
                uint32_t data32[UART_BUF_SIZE / 4];
                HAL_StatusTypeDef state;
                HAL_FLASH_Unlock();
                    while(1)
                    {
                            state = HAL_UART_Receive(&huart1, uart_buf, 4, 5000);
                            memcpy(data32, uart_buf, 4);
                            // 关闭总中断
                            __disable_irq();
                            // 写Flash
                            HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, APPLICATION_ADDRESS + userapplen, data32[0]);
                            printf("Programming\r\n");
                            // 开启总中断
                            __enable_irq();
                            if(state != HAL_OK)
                            {
                                    HAL_FLASH_Lock();
                                    printf("Programming completed Successfully! %ldBtye\r\n", userapplen += huart1.RxXferCount);
                                    break;
                            }
                            userapplen += 4;
                    }



收藏 评论2 发布时间:2024-6-22 16:48

举报

2个回答
wtliu 回答时间:2024-6-23 17:48:33

好!!!!

xmshao 回答时间:2024-6-24 11:45:05
你现在的state值 来自于HAL_UART_Receive()函数的返回,它如果不OK的话,原因可能很多。


简单地将!HAL_OK做完结束标志来判断似乎不太合理。因为可能是出错、可能是busy、可能是超时。


另外,RxXferCount应该是 还没有接收到的数据个数,并非已收到的数据个数。


基本操作流程及做法可以参考下其它系列的IAP例程。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版