[STM32F7] STM32F767ZI 开发板更新 CubeIDE 后无法工作

[复制链接]
409|8
lvluoo 发表于 2025-11-16 19:23 | 显示全部楼层 |阅读模式
STM32F767ZI 开发板搭配 FreeRTOS + USB_OTG MSC(USB 大容量存储类),更新 CubeIDE 后无法工作!
我有一段非常简单的代码,在 CubeIDE V1.8.0 中能正常运行,但同样的代码在 CubeIDE V1.11.2 中完全无法使用。
void Start_USB_Task(void const *argument) {
        /* USER CODE BEGIN Start_USB_Task */
        uint8_t sflag = 1;
        uint8_t rflag = 1;
        uint8_t dflag = 1;
        uint8_t iflag = 1;
        /* Infinite loop */
        for (;;) {

//                      MX_USB_HOST_Process();

                switch (Appli_state) {
                case APPLICATION_IDLE:
                        HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, RESET);  // Blue
                        HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin); // Green
                        if (iflag == 1) {
                                printf("Removed a USB from STM32. \r\n");
                                iflag = 0;
                        }
                        osDelay(100);
                        break;
                case APPLICATION_START:
                        dflag = 1;
                        rflag = 1;
                        iflag = 1;
                        if (f_mount(&USBHFatFS, (const TCHAR*) USBHPath, 0) == FR_OK) {
                                HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, RESET);
                                HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, RESET);
                                if (sflag == 1) {
                                        printf("APPLICATION is START. \r\n");
                                        sflag = 0;
                                }
                        }
                        break;
                case APPLICATION_READY:
                        dflag = 1;
                        sflag = 1;
                        iflag = 1;
                        if (rflag == 1) {
                                printf("APPLICATION is READY. \r\n");
                                rflag = 0;
                                HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, SET);  // Blue
                                if (f_mount(&USBHFatFS, (const TCHAR*) USBHPath, 0) == FR_OK) {
                                        printf("USB is mounted success! \r\n");
                                }
                                if (f_mkdir((const TCHAR*) "ADC") == FR_OK) {
//                                if (f_chdir("ADC") == FR_OK) {
                                        printf("Falder 'ADC' is CREATED! \r\n");
//                                }
                                }else{
                                        printf("Falder 'ADC' is NOT created! \r\n");
                                }
                                if (f_open(&USBHFile, (const TCHAR*) "ADC.TXT",
                                FA_WRITE | FA_OPEN_APPEND) == FR_OK) {
                                        sprintf(hold, "%s", "ADC VALUES NOT PRESENT! \r\n");
                                        RES = f_write(&USBHFile, (const void*) hold, strlen(hold),
                                                        &Byteswritten);
                                        if (RES != FR_OK || Byteswritten == 0) {
//                                        return 0;
                                        } else {
                                                for (int n = 0; n < 3; n++) {
                                                        HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin); // Red
                                                        osDelay(250);
                                                }
                                        }
                                }else{
                                        printf("File is NOT created! \r\n");
                                }
                                f_close(&USBHFile);
                        }
                        break;
                case APPLICATION_DISCONNECT:
                        sflag = 1;
                        rflag = 1;
                        iflag = 1;
                        if (dflag == 1) {
                                f_mount(NULL, (TCHAR const*) "", 0); // Then flash is removed
                                printf("APPLICATION is DISCONNECT. \r\n");
                                dflag = 0;
                        }
                        HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, RESET);  // Blue
                        HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin); // Red
                        osDelay(100);
                        break;
                default:
                        printf("Error! operator is not correct \r\n");
                }

        }
        /* USER CODE END Start_USB_Task */
}

USBH_USERPROCESS[color=rgba(0, 0, 0, 0.85)] 函数无法获取状态
"Case host_user_class_active:  Appli_state = Application_Rready;

如果插入 U 盘,该函数就能获取到状态。
case HOST_USER_CONNECTION:
  Appli_state = APPLICATION_START;
  break;
如果拔掉 U 盘,该函数也能获取到状态。
CASE HOST_USER_DISCONNECTION:
  Appli_state = Application_disConnect;
  Break;
但正如我上面所写的,USBH_USERPROCESS 函数始终无法获取到状态。
"Case host_user_class_active:
Appli_state = Application_Rriedy;
Break;

jcky001 发表于 2025-11-17 19:10 | 显示全部楼层
检查库更新日志
jcky001 发表于 2025-11-17 19:45 | 显示全部楼层
新版 IDE可能升级了USB Host 库,导致回调机制变化。
onlycook 发表于 2025-11-17 21:11 | 显示全部楼层
重新初始化USB Host 堆栈
powerantone 发表于 2025-11-17 22:11 | 显示全部楼层
提高USB 任务优先级,缩短任务延迟
probedog 发表于 2025-11-17 20:45 | 显示全部楼层
USB Host 库版本是不是不兼容
spicy 发表于 2025-11-17 22:06 | 显示全部楼层
中断优先级冲突?新版本IDE可能调整了中断优先级分配,导致USB中断被屏蔽。
solty 发表于 2025-11-17 22:57 | 显示全部楼层
在CubeMX中重新配置时钟
stormwind123 发表于 2025-11-17 19:17 | 显示全部楼层
更新回调函数注册方式,适配新版本库的 API。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

102

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部