亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 基于CH376的U盤讀寫例子
?? C
字號:
/****************************************************************************
* Copyright (C), 2010 安富萊電子 www.armfly.com
*
* 【本例程在安富萊STM32F103ZE-EK開發板上調試通過             】
* 【QQ: 1295744630, 旺旺:armfly, Email: armfly@qq.com       】
*
* 文件名: main.c
* 內容簡述: 本例程演示如何通過CH376讀寫U盤。
*
*
* 文件歷史:
* 版本號  日期       作者    說明
* v0.1    2010-10-30 armfly  創建該文件
*
*/

#include "stm32f10x.h"
#include <stdio.h>
#include "usart_printf.h"
#include "systick.h"
#include "button.h"
#include "FILE_SYS.H"
#include "string.h"

#define EXAMPLE_NAME	"CH376 USB DISK Demo"
#define EXAMPLE_DATE	"2010-10-30"

static void InitBoard(void);
static void DispLogo(void);
void TestCH376(void);

/*******************************************************************************
*	函數名:main
*	輸  入:
*	輸  出:
*	功能說明:用戶程序入口
*/
int main(void)
{
	InitBoard();	/* 為了是main函數看起來更簡潔些,我們將初始化的代碼封裝到這個函數 */
	DispLogo();		/* 顯示例程Logo */

	mDelaymS(200);
	TestCH376();
}

/*******************************************************************************
*	函數名:mStopIfError
*	輸  入:	iError, 錯誤代碼
*	輸  出:
*	功能說明:檢查操作狀態,如果錯誤則顯示錯誤代碼并停機,
*	應該替換為實際的處理措施,例如顯示錯誤信息,等待用戶確認后重試等
*/
void mStopIfError(uint8_t iError)
{
	if (iError == USB_INT_SUCCESS)
	{
		return;  /* 操作成功 */
	}
	printf("Error: %02X\n", iError );  /* 顯示錯誤 */
	while(1)
	{
		/* LED閃爍 */
		GPIO_ResetBits(GPIOF,  GPIO_Pin_6);
		mDelaymS( 200 );
		GPIO_SetBits(GPIOF,  GPIO_Pin_6);
		mDelaymS( 200 );
	}
}

void TestCH376(void)
{
	uint8_t			i, s;
	P_FAT_DIR_INFO	pDir;
	char	SrcName[64];
	char	TarName[64];
	char	buf[64];

	printf( "Start\n\r" );

	s = mInitCH376Host( );  /* 初始化CH376 */
	mStopIfError( s );

	while(1) 
	{
		printf( "Wait Udisk\n\r" );
		while (CH376DiskConnect() != USB_INT_SUCCESS)
		{  /* 檢查U盤是否連接,等待U盤插入,對于SD卡,可以由單片機直接查詢SD卡座的插拔狀態引腳 */
			mDelaymS(100 );
		}
		mDelaymS(250);  /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */
		mDelaymS(250); 

		/* 對于檢測到USB設備的,最多等待100*50mS,主要針對有些MP3太慢,對于檢測到USB設備并且連接DISK_MOUNTED的,最多等待5*50mS,主要針對DiskReady不過的 */
		for (i = 0; i < 100; i ++ )
		{  /* 最長等待時間,100*50mS */
			mDelaymS(50);
			printf( "Ready ?\n\r" );
			s = CH376DiskMount();  /* 初始化磁盤并測試磁盤是否就緒 */
			if (s == USB_INT_SUCCESS)
			{
				break;  /* 準備好 */
			}
			else if (s == ERR_DISK_DISCON)
			{
				break;  /* 檢測到斷開,重新檢測并計時 */
			}
			if (CH376GetDiskStatus() >= DEF_DISK_MOUNTED && i >= 5)
			{
				break;  /* 有的U盤總是返回未準備好,不過可以忽略,只要其建立連接MOUNTED且嘗試5*50mS */
			}
		}
		if (s == ERR_DISK_DISCON)
		{  /* 檢測到斷開,重新檢測并計時 */
			printf("Device gone\n\r");
			continue;
		}
		if (CH376GetDiskStatus( ) < DEF_DISK_MOUNTED)
		{  /* 未知USB設備,例如USB鍵盤、打印機等 */
			printf("Unknown device\n\r");
			goto UnknownUsbDevice;
		}
		i = CH376ReadBlock((uint8_t *)buf );  /* 如果需要,可以讀取數據塊CH376_CMD_DATA.DiskMountInq,返回長度 */
		if (i == sizeof( INQUIRY_DATA))
		{	/* U盤的廠商和產品信息 */
			buf[i] = 0;
			printf("UdiskInfo: %s\n\r", ((P_INQUIRY_DATA)buf) -> VendorIdStr);
		}

		/* 讀取原文件 */
		strcpy(SrcName, "\\C51\\CH376HFT.C");  /* 源文件名,多級目錄下的文件名和路徑名必須復制到RAM中再處理,而根目錄或者當前目錄下的文件名可以在RAM或者ROM中 */
		strcpy(TarName, "\\NEWFILE.TXT" );  /* 目標文件名 */
		printf("Open\n\r");
		mDelaymS(80);
		s = CH376FileOpenPath((uint8_t *)SrcName );  /* 打開文件,該文件在C51子目錄下 */
		if ((s != ERR_MISS_DIR) && (s != ERR_MISS_FILE))
		{  
			printf("Open Error! Retry\n\r");
			//mStopIfError(s);
			s = CH376FileOpenPath((uint8_t *)SrcName );
		}
		if (s == ERR_MISS_DIR || s == ERR_MISS_FILE)
		{	/* 沒有找到目錄或者沒有找到文件 */
			/* 列出文件,完整枚舉可以參考EXAM13全盤枚舉 */
			if ( s == ERR_MISS_DIR )
			{
				strcpy( buf, "\\*" );  /* C51子目錄不存在則列出根目錄下的文件 */
			}
			else 
			{
				strcpy( buf, "\\C51\\CH376*" );  /* CH376HFT.C文件不存在則列出\C51子目錄下的以CH376開頭的文件 */
			}
			printf("List file %s\n\r", buf);
			s = CH376FileOpenPath((uint8_t *)buf);  /* 枚舉多級目錄下的文件或者目錄,輸入緩沖區必須在RAM中 */
			while (s == USB_INT_DISK_READ)
			{	/* 枚舉到匹配的文件 */
				CH376ReadBlock((uint8_t *)buf);  /* 讀取枚舉到的文件的FAT_DIR_INFO結構,返回長度總是sizeof( FAT_DIR_INFO ) */
				pDir = (P_FAT_DIR_INFO)buf;  /* 當前文件目錄信息 */
				if (pDir -> DIR_Name[0] != '.')
				{  /* 不是本級或者上級目錄名則繼續,否則必須丟棄不處理 */
					if ( pDir -> DIR_Name[0] == 0x05 )
					{
						pDir -> DIR_Name[0] = 0xE5;  /* 特殊字符替換 */
					}
					pDir -> DIR_Attr = 0;  /* 強制文件名字符串結束以便打印輸出 */
					printf( "*** EnumName: %s\n\r", pDir -> DIR_Name );  /* 打印名稱,原始8+3格式,未整理成含小數點分隔符 */
				}
				xWriteCH376Cmd( CMD0H_FILE_ENUM_GO );  /* 繼續枚舉文件和目錄 */
				xEndCH376Cmd( );
				s = Wait376Interrupt( );
			}
			if (s != ERR_MISS_FILE )
			{
				mStopIfError( s );  /* 操作出錯 */
			}

			mDelaymS(80);

			printf( "Create\n\r" );
			s = CH376FileCreatePath((uint8_t *)TarName );  /* 新建多級目錄下的文件,支持多級目錄路徑,輸入緩沖區必須在RAM中 */
			mStopIfError( s );

			printf( "Write\n\r" );
			strcpy( buf, "找不到/C51/CH376HFT.C文件\xd\n\r" );
			s = CH376ByteWrite((uint8_t *)buf, strlen(buf), NULL );  /* 以字節為單位向當前位置寫入數據塊 */
			mStopIfError( s );

			printf( "Close\n\r" );
			s = CH376FileClose( TRUE );  /* 關閉文件,對于字節讀寫建議自動更新文件長度 */
			mStopIfError( s );
		}


/* 刪除某文件 */
/*		printf( "Erase\n" );
		s = CH376FileErase( "/OLD" );  刪除文件
		if ( s != USB_INT_SUCCESS ) printf( "Error: %02X\n", (UINT16)s );  顯示錯誤
*/

/* 檢查U盤或者SD卡的剩余空間 */
/*		printf( "DiskQuery: " );
		s = CH376DiskQuery( (PUINT32)buf );  查詢磁盤剩余空間信息,扇區數
		mStopIfError( s );
//		printf( "free cap = %ld MB\n", *(PUINT32)buf * DEF_SECTOR_SIZE / 1000000 );  未用扇區數乘以扇區大小后,除以1M換算為兆字節單位
		printf( "free cap = %ld MB\n", *(PUINT32)buf / ( 1000000 / DEF_SECTOR_SIZE ) );  上面一行的計算可能會溢出,換個順序計算 */

UnknownUsbDevice:
		printf( "Take out\n\r" );
		while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) {  /* 檢查U盤是否連接,等待U盤拔出 */
			mDelaymS( 100 );
		}
		mDelaymS(200 );
	}
}

/*******************************************************************************
	函數名:GPIO_Configuration
	輸  入:
	輸  出:
	功能說明:配置4個LED為輸出口線

	LED口線分配:
	LED1 : PF6  (輸出0點亮)
	LED2 : PF7  (輸出0點亮)
	LED3 : PF8  (輸出0點亮)
	LED4 : PF9  (輸出0點亮)

*/
void GPIO_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	/* 第1步:打開GPIOA GPIOC GPIOD GPIOF GPIOG的時鐘
	   注意:這個地方可以一次性全打開
	*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC
			| RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG,
				ENABLE);

	/* 第2步:配置所有的按鍵GPIO為浮動輸入模式(實際上CPUf復位后就是輸入狀態) */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);	/* PA0 */

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_Init(GPIOC, &GPIO_InitStructure);	/* PC13 */

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
	GPIO_Init(GPIOD, &GPIO_InitStructure);	/* PD3 */

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_13
					  | GPIO_Pin_14 | GPIO_Pin_15;
	GPIO_Init(GPIOG, &GPIO_InitStructure);	/* PG7,8,13,14,15 */

	/* 第3步:配置所有的LED指示燈GPIO為推挽輸出模式 */
	/* 由于將GPIO設置為輸出時,GPIO輸出寄存器的值缺省是0,因此會驅動LED點亮
		這是我不希望的,因此在改變GPIO為輸出前,先修改輸出寄存器的值為1 */
	GPIO_SetBits(GPIOF,  GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOF, &GPIO_InitStructure);
}

/*******************************************************************************
	函數名:InitBoard
	輸  入:
	輸  出:
	功能說明:初始化硬件設備
*/
static void InitBoard(void)
{
	/*
		這個函數是ST庫中的函數,函數實體在
		Libraries\CMSIS\Core\CM3\system_stm32f10x.c

		配置內部Flash接口,初始化PLL,配置系統頻率
		系統時鐘缺省配置為72MHz,你如果需要更改,則需要去修改相關的頭文件中的宏定義
	 */
	SystemInit();

	/* 配置按鍵GPIO和LED GPIO */
	GPIO_Configuration();

	/* 配置串口 */
	USART_Configuration();

	/* 在 SysTick_Config()前,必須先調用 */
	InitButtonVar();

	/* 配置systic作為1ms中斷,這個函數在
	\Libraries\CMSIS\Core\CM3\core_cm3.c */
	SysTick_Config(SystemFrequency / 1000);
}

/*******************************************************************************
	函數名: DispLogo
	輸  入:
	輸  出:
	功能說明:顯示例程Logo (通過串口打印到PC機的超級終端顯示)
*/
static void DispLogo(void)
{
	/* 通過串口輸出例程名和更新日期 */
	PrintfLogo(EXAMPLE_NAME, EXAMPLE_DATE);
}

#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/**
  * @}
  */

/**
  * @}
  */

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品热久久久久夜色精品三区 | 亚洲欧美日韩电影| 日韩国产欧美在线视频| 成人短视频下载| 4438亚洲最大| 亚洲色图在线播放| 国产一区二三区好的| 欧美系列亚洲系列| 国产精品国产三级国产普通话三级 | 国产露脸91国语对白| 欧美日韩黄色一区二区| 国产精品久久国产精麻豆99网站| 青青草伊人久久| 欧美视频在线一区二区三区| 国产精品电影一区二区三区| 国产精品1024| 精品理论电影在线| 日本视频一区二区| 欧美精品少妇一区二区三区| 亚洲黄色片在线观看| 成人美女在线视频| 久久久久国产一区二区三区四区| 免费亚洲电影在线| 7777精品久久久大香线蕉| 一区二区三区在线免费观看| av资源网一区| 国产精品久久免费看| 国产成人精品一区二| 精品av久久707| 国产精品一级在线| 久久精品人人做人人综合 | 亚洲mv在线观看| 欧美三级午夜理伦三级中视频| 亚洲欧洲精品一区二区三区不卡| 成人黄色av电影| 亚洲视频图片小说| 91视频精品在这里| 伊人一区二区三区| 在线观看国产日韩| 日韩中文字幕不卡| 欧美大片一区二区三区| 激情av综合网| 国产女人18毛片水真多成人如厕 | 色婷婷精品久久二区二区蜜臀av | 中文字幕一区av| 91亚洲国产成人精品一区二三| 成人免费一区二区三区在线观看| 99天天综合性| 亚洲一区二区精品3399| 91精品国产综合久久久久久漫画 | 婷婷国产在线综合| 日韩欧美一区二区久久婷婷| 国产综合成人久久大片91| 中文字幕精品—区二区四季| 日本精品视频一区二区| 天堂在线亚洲视频| 久久精品水蜜桃av综合天堂| 成人久久18免费网站麻豆| 亚洲欧美乱综合| 91精品婷婷国产综合久久性色| 麻豆精品一区二区综合av| 国产女人18水真多18精品一级做| 91免费视频网| 狠狠色狠狠色综合| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美亚洲一区三区| 国产一区三区三区| 亚洲综合在线电影| 久久久综合九色合综国产精品| av午夜精品一区二区三区| 亚洲成va人在线观看| 欧美精品一区二区三区四区 | 国产一区二区不卡在线| 亚洲人成影院在线观看| 欧美变态tickling挠脚心| 成人av电影在线播放| 毛片av一区二区三区| 亚洲人成影院在线观看| 久久男人中文字幕资源站| 欧美在线免费观看亚洲| 国产不卡视频在线观看| 日韩高清一级片| 亚洲色图欧洲色图婷婷| 精品1区2区在线观看| 欧美高清你懂得| 99国产精品久久久久| 极品少妇xxxx精品少妇| 亚洲mv大片欧洲mv大片精品| 最新中文字幕一区二区三区| 欧美变态口味重另类| 欧美情侣在线播放| 色婷婷精品大视频在线蜜桃视频| 国产成人免费视频一区| 久久精品国产亚洲5555| 亚洲图片欧美色图| 国产精品日日摸夜夜摸av| 2023国产精品| 欧美刺激午夜性久久久久久久| 欧洲精品中文字幕| 色婷婷综合久久久中文字幕| 成人午夜电影小说| 久久福利资源站| 美女在线一区二区| 日本午夜一本久久久综合| 午夜激情一区二区三区| 夜夜精品视频一区二区| 亚洲男同性视频| 亚洲色图色小说| 亚洲精品视频在线观看网站| 综合在线观看色| 最近中文字幕一区二区三区| 国产精品理论片在线观看| 中文子幕无线码一区tr| 久久精品水蜜桃av综合天堂| 国产网红主播福利一区二区| 国产午夜精品一区二区三区四区 | 91精品婷婷国产综合久久竹菊| 欧美日韩亚洲综合一区二区三区| 一本大道久久a久久综合婷婷| 成人av网站在线观看免费| 成人一区二区视频| 99国产精品久久久久久久久久| 色天天综合久久久久综合片| 色丁香久综合在线久综合在线观看| 色综合网站在线| 精品国产91久久久久久久妲己| 7777精品伊人久久久大香线蕉超级流畅 | 日韩午夜激情视频| 日韩欧美中文一区二区| 日韩欧美在线影院| 久久久精品蜜桃| 亚洲色图欧美偷拍| 亚洲成人av电影在线| 久久国产乱子精品免费女| 国产乱理伦片在线观看夜一区 | 最新中文字幕一区二区三区 | 亚洲欧美综合色| 亚洲一区二区综合| 久久99精品久久只有精品| 懂色av噜噜一区二区三区av | 成人福利视频在线| 欧美亚洲愉拍一区二区| 欧美www视频| 最近日韩中文字幕| 日韩不卡手机在线v区| 成人免费视频网站在线观看| 欧美视频在线播放| www欧美成人18+| 亚洲精品成人少妇| 久久成人免费电影| 99久久久久久| 日韩欧美中文一区| 国产精品乱码一区二三区小蝌蚪| 亚洲一区在线观看网站| 国产一区二区在线免费观看| 波多野结衣欧美| 欧美喷水一区二区| 国产精品美女一区二区三区 | 日韩欧美在线不卡| 综合色中文字幕| 韩国av一区二区三区在线观看| 色综合天天综合网国产成人综合天| 91精品国产欧美一区二区成人| 国产女同互慰高潮91漫画| 午夜视频久久久久久| 99精品国产热久久91蜜凸| 日韩亚洲欧美一区二区三区| 亚洲男帅同性gay1069| 国模大尺度一区二区三区| 欧美日韩视频在线观看一区二区三区| 久久精品亚洲国产奇米99| 青青国产91久久久久久| 在线观看成人免费视频| 国产精品久久夜| 国产精品自产自拍| 日韩欧美久久久| 亚洲18色成人| 一本大道久久精品懂色aⅴ| 国产欧美精品一区aⅴ影院| 麻豆91精品视频| 欧美二区在线观看| 一区二区三区在线播放| 成人免费黄色在线| 久久精品欧美日韩精品| 麻豆高清免费国产一区| 日韩午夜激情av| 肉色丝袜一区二区| 欧美三级视频在线| 亚洲在线视频免费观看| 一本大道久久精品懂色aⅴ| 中文字幕一区免费在线观看| 国产精品一区二区男女羞羞无遮挡| 欧美一区二视频| 日韩av一二三| 7777女厕盗摄久久久| 亚洲v精品v日韩v欧美v专区 | 亚洲不卡在线观看| 欧美日韩一区二区三区高清| 亚洲综合丝袜美腿| 欧美网站一区二区|