0.png (57.34 KB, 下載次數: 94)
下載附件
2017-5-8 23:31 上傳
stm32單片機源程序:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "mmc_sd.h"
- #include "ff.h"
- #include "flash.h"
- #include "exfuns.h"
- #include "fattester.h"
- #include "mass_mal.h"
- #include "usb_lib.h"
- #include "hw_config.h"
- #include "usb_pwr.h"
- #include "memory.h"
- #include "usb_bot.h"
- //ALIENTEK戰艦STM32開發板實驗50
- //USB讀卡器 實驗
- //設置USB 連接/斷線
- //enable:0,斷開
- // 1,允許連接
- void usb_port_set(u8 enable)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PORTA時鐘
- if(enable)_SetCNTR(_GetCNTR()&(~(1<<1)));//退出斷電模式
- else
- {
- _SetCNTR(_GetCNTR()|(1<<1)); // 斷電模式
- GPIOA->CRH&=0XFFF00FFF;
- GPIOA->CRH|=0X00033000;
- PAout(12)=0;
- }
- }
- int main(void)
- {
- u8 offline_cnt=0;
- u8 tct=0;
- u8 USB_STA;
- u8 Divece_STA;
- delay_init(); //延時函數初始化
- NVIC_Configuration(); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- uart_init(9600); //串口初始化為9600
- LED_Init(); //LED端口初始化
- LCD_Init(); //初始化液晶
- KEY_Init(); //按鍵初始化
- POINT_COLOR=RED;//設置字體為藍色
- LCD_ShowString(60,50,200,16,16,"WarShip STM32");
- LCD_ShowString(60,70,200,16,16,"USB Card Reader TEST");
- LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
- LCD_ShowString(60,110,200,16,16,"2012/9/25");
- SPI_Flash_Init();
- if(SD_Initialize())LCD_ShowString(60,130,200,16,16,"SD Card Error!"); //檢測SD卡錯誤
- else //SD 卡正常
- {
- LCD_ShowString(60,130,200,16,16,"SD Card Size: MB");
- Mass_Memory_Size[0]=(long long)SD_GetSectorCount()*512;//得到SD卡容量(字節),當SD卡容量超過4G的時候,需要用到兩個u32來表示
- Mass_Block_Size[0] =512;//因為我們在Init里面設置了SD卡的操作字節為512個,所以這里一定是512個字節.
- Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
- LCD_ShowNum(164,130,Mass_Memory_Size[0]>>20,5,16); //顯示SD卡容量
- }
- if(SPI_FLASH_TYPE!=W25Q64)LCD_ShowString(60,130,200,16,16,"W25Q64 Error!"); //檢測SD卡錯誤
- else //SPI FLASH 正常
- {
- Mass_Memory_Size[1]=1024*1024*6;//前6M字節
- Mass_Block_Size[1] =512;//因為我們在Init里面設置了SD卡的操作字節為512個,所以這里一定是512個字節.
- Mass_Block_Count[1]=Mass_Memory_Size[1]/Mass_Block_Size[1];
- LCD_ShowString(60,150,200,16,16,"SPI FLASH Size:6144KB");
- }
- delay_ms(1800);
- usb_port_set(0); //USB先斷開
- delay_ms(300);
- usb_port_set(1); //USB再次連接
- LCD_ShowString(60,170,200,16,16,"USB Connecting...");//提示SD卡已經準備了
- //USB配置
- USB_Interrupts_Config();
- Set_USBClock();
- USB_Init();
- delay_ms(1800);
- while(1)
- {
- delay_ms(1);
- if(USB_STA!=USB_STATUS_REG)//狀態改變了
- {
- LCD_Fill(60,190,240,190+16,WHITE);//清除顯示
- if(USB_STATUS_REG&0x01)//正在寫
- {
- LCD_ShowString(60,190,200,16,16,"USB Writing...");//提示USB正在寫入數據
- }
- if(USB_STATUS_REG&0x02)//正在讀
- {
- LCD_ShowString(60,190,200,16,16,"USB Reading...");//提示USB正在讀出數據
- }
- if(USB_STATUS_REG&0x04)LCD_ShowString(60,210,200,16,16,"USB Write Err ");//提示寫入錯誤
- else LCD_Fill(60,210,240,210+16,WHITE);//清除顯示
- if(USB_STATUS_REG&0x08)LCD_ShowString(60,230,200,16,16,"USB Read Err ");//提示讀出錯誤
- else LCD_Fill(60,230,240,230+16,WHITE);//清除顯示
- USB_STA=USB_STATUS_REG;//記錄最后的狀態
- }
- if(Divece_STA!=bDeviceState)
- {
- if(bDeviceState==CONFIGURED)LCD_ShowString(60,170,200,16,16,"USB Connected ");//提示USB連接已經建立
- else LCD_ShowString(60,170,200,16,16,"USB DisConnected ");//提示USB被拔出了
- Divece_STA=bDeviceState;
- }
- tct++;
- if(tct==200)
- {
- tct=0;
- LED0=!LED0;//提示系統在運行
- if(USB_STATUS_REG&0x10)
- {
- offline_cnt=0;//USB連接了,則清除offline計數器
- bDeviceState=CONFIGURED;
- }else//沒有得到輪詢
- {
- offline_cnt++;
- if(offline_cnt>10)bDeviceState=UNCONNECTED;//2s內沒收到在線標記,代表USB被拔出了
- }
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整代碼下載:
實驗50 USB讀卡器實驗.zip
(1.13 MB, 下載次數: 58)
2017-5-8 23:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|