概述
基于stm32的硬件平台,在rtthread、HAL库、DFU库(st官方)的软件支撑下,使用RT-Thread Studio 和Cubemx软件, 测试DFU功能。
环境:
-
主控芯片:stm32f407VE
-
操作系统: rt-thread:nano、rt 4.0.3
-
软件库版本:1.26.xx
创建demo工程
rtthread主线版本
1、根据芯片型号,创建一个基础工程;
2、双击RT-Thread Studio 工程中的cubemx settings图标,进入软件驱动配置界面
配置usb驱动,选择配置usb为设备模式,使能中断
在middleware中选择usb_device,选中DFU功能
至于时钟,串口等其他配置,根据自己的板子配置后,生成代码。
3、配置环境
因为RT-Thread Studio自动添加、排除代码,我们上一步选中的dfu库会被排除编译,所以每次重配置工程后,都需要手动操作下面步骤
移除排除编译的DFU库文件
添加头文件路径信息(这一步做过一次,重配置后不需要做了)
到这一步,代码应该可以编译通过了,但是因为初始化代码和中断函数没有实现,所以插入usb还是没有响应。
在usb_device.c中添加初始化函数,并添加自动初始化宏修饰,路径:cubemx/src/
int dfu_init(void)
{
MX_USB_DEVICE_Init();
return 0;
}
INIT_BOARD_EXPORT(dfu_init);
添加中断函数:
新建一个源代码文件,实现usb中断函数
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-05-30 yd the first version
*/
#include <rtthread.h>
#include "board.h"
extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
/**
* @brief This function handles USB On The Go FS global interrupt.
*/
void OTG_FS_IRQHandler(void)
{
/* USER CODE BEGIN OTG_FS_IRQn 0 */
rt_interrupt_enter();
/* USER CODE END OTG_FS_IRQn 0 */
HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
/* USER CODE BEGIN OTG_FS_IRQn 1 */
rt_interrupt_leave();
/* USER CODE END OTG_FS_IRQn 1 */
}
至此,重新编译后,烧写到板子,连接硬件后,PC就会识别到DFU的usb设备:
如果有感叹号,没有安装驱动,需要下载ST提供的DFU上位机软件,DfuSe v3.0.6,更新驱动就Ok,
nano版本
nano版本和主版本一样的操作,也是可以实现功能。