modu8888 发表于 2016-9-27 12:12:55

STM32CubeMX 105芯片 USB Host 读写U盘!

问题描述:      本人的项目中要将一次不过100字节的少量数据存入U盘。最初用的是CH376芯片,后来发现STM32中有USB host资源的芯片比如105/107等都可以直接读写U盘,因此买来105的开发模块琢磨。
      该开发模块比较简练(后面会附上原理图),附送的代码可以正常使用。

      我找来微雪电子的例程,依样画葫芦,但出不来。
      下面附上原理图,我的STM32CubeMX配置过程及源代码,请朋友们支招。


105芯片的PA11、PA12分别接USB口的USB D-和USB D+.

J1正是U盘插口,+5V供电是由连接计算机USB口的J2提供的。105的PC9控制J1的+5V供电与否。









STM32CubeMX配置如上面的图。


modu8888 发表于 2016-9-27 12:14:14

/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
#include "fatfs.h"
#include "usb_host.h"

/* USER CODE BEGIN Includes */
#include "ff.h"
//#include "oled.h"
extern ApplicationTypeDef Appli_state;

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
void MX_USB_HOST_Process(void);

/* USER CODE BEGIN PFP */

int main(void)
{

/* USER CODE BEGIN 1 */
static ApplicationTypeDef pre_state = APPLICATION_IDLE;
volatile FRESULT fr;
FATFS fs;
FIL fil;
UINT off = 0;
uint8_t buff;
/* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* Configure the system clock */
SystemClock_Config();

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_FATFS_Init();
MX_USB_HOST_Init();

/* USER CODE BEGIN 2 */

// Enable USB Power
HAL_GPIO_WritePin(USB_POWER_GPIO_Port, USB_POWER_Pin, GPIO_PIN_RESET);

// Init OLED
//OLED_Init();
//OLED_Clear();
//OLED_ShowString(0,0,"Pls Insert Udisk!");
//HAL_Delay(2000);

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
    MX_USB_HOST_Process();

/* USER CODE BEGIN 3 */
    if (pre_state != Appli_state) {
               
                switch(Appli_state)
                {
                case APPLICATION_DISCONNECT:
                        /* Register the file system object to the FatFs module */
                        if(f_mount(NULL, "", 0) != FR_OK)
                        {
                                printf("ERROR : Cannot exit FatFs! \n");
                        }
//                        OLED_Clear();
//                        OLED_ShowString(0,0,"Disconnect!");
                break;

                case APPLICATION_READY:
//                        OLED_Clear();
//                        OLED_ShowString(0,0,"Connected!");
                        /* Open or create a log file and ready to append */
                        if(f_mount(&fs, "", 0) != FR_OK) {
                                break;
                        }

                        HAL_Delay(2000);
//                OLED_ShowString(0,2,"Open file!");

                        /* Opens an existing file. If not exist, creates a new file. */
                        fr = f_open(&fil, "0:LOG.TXT", FA_READ | FA_WRITE | FA_CREATE_ALWAYS);
                        if (fr != FR_OK)
                                break;

                        /* Append a line */
                        f_printf(&fil, "%s\n", "uDisk OK!0123456789");

                        HAL_Delay(2000);
//                        OLED_ShowString(0,4,"Write OK!");

                        fr = f_lseek(&fil, 0);
                        if (fr != FR_OK) {
                          f_close(&fil);
                          break;
                        }
                       
                        f_read(&fil, buff, 16, &off);
                        buff = 0;

                        HAL_Delay(2000);
//                        OLED_ShowString(0,6,buff);

                        /* Close the file */
                        f_close(&fil);
                        HAL_Delay(2000);
//                OLED_Clear();
//                OLED_ShowString(0,0,"Close file!");

                break;

                default:
                        break;
                }
        }
        pre_state = Appli_state;
}
/* USER CODE END 3 */

}


modu8888 发表于 2016-9-27 12:15:59

ynwscfsfi 发表于 2016-9-27 12:23:45

感谢分享!

stary666 发表于 2016-9-27 12:38:58

顶一下,,,,,,

zfz9232 发表于 2016-9-27 14:44:46

楼主用的是什么开发环境啊,有没有安装教程和使用教程?

moyanming2013 发表于 2016-9-27 14:55:43

看了下,微雪只有107的没有105的评估板

modu8888 发表于 2016-9-27 15:03:15

moyanming2013 发表于 2016-9-27 14:55
看了下,微雪只有107的没有105的评估板

嗯,是的!
我买的105的评估板 不是微雪的.

高二毛 发表于 2016-9-27 15:34:01

参考一下官方提供的1系列的例子吧。

czhdpj 发表于 2016-10-3 12:37:27

淘宝看到有USB板子。
1、1个LED指示灯,1个电源指示灯

2、2个用户按键

3、串口ISP下载口(板载BOOT0下载按键)

4、JTAG/SWD仿真下载接口

5、外置FLASH芯片华邦W25Q80(8M-BIT)

6、WIFI接口,适配ESP8266模块

7、OLED显示屏接口,0.96寸

8、RTC时钟电路,含CR1220备用电池(锂锰电池 38mAh)

9、USB-Slave功能,可将STM32模拟成U盘
10、USB-Host功能,STM32读写U盘功能
页: [1] 2
查看完整版本: STM32CubeMX 105芯片 USB Host 读写U盘!