久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6810|回復: 4
打印 上一主題 下一主題
收起左側

stm32的USB讀卡器實驗源碼

[復制鏈接]
跳轉到指定樓層
樓主


stm32單片機源程序:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "mmc_sd.h"
  8. #include "ff.h"
  9. #include "flash.h"
  10. #include "exfuns.h"
  11. #include "fattester.h"
  12. #include "mass_mal.h"
  13. #include "usb_lib.h"
  14. #include "hw_config.h"
  15. #include "usb_pwr.h"
  16. #include "memory.h"            
  17. #include "usb_bot.h"         
  18. //ALIENTEK戰艦STM32開發板實驗50
  19. //USB讀卡器 實驗  

  20. //設置USB 連接/斷線
  21. //enable:0,斷開
  22. //       1,允許連接          
  23. void usb_port_set(u8 enable)
  24. {
  25.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //使能PORTA時鐘                    
  26.         if(enable)_SetCNTR(_GetCNTR()&(~(1<<1)));//退出斷電模式
  27.         else
  28.         {          
  29.                 _SetCNTR(_GetCNTR()|(1<<1));  // 斷電模式
  30.                 GPIOA->CRH&=0XFFF00FFF;
  31.                 GPIOA->CRH|=0X00033000;
  32.                 PAout(12)=0;                              
  33.         }
  34. }  
  35. int main(void)
  36. {         
  37.         u8 offline_cnt=0;
  38.         u8 tct=0;
  39.         u8 USB_STA;
  40.         u8 Divece_STA;

  41.         delay_init();                     //延時函數初始化          
  42.         NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  43.         uart_init(9600);                 //串口初始化為9600
  44.         LED_Init();                             //LED端口初始化
  45.         LCD_Init();                  //初始化液晶
  46.         KEY_Init();                 //按鍵初始化
  47.           POINT_COLOR=RED;//設置字體為藍色          
  48.         LCD_ShowString(60,50,200,16,16,"WarShip STM32");       
  49.         LCD_ShowString(60,70,200,16,16,"USB Card Reader TEST");       
  50.         LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
  51.         LCD_ShowString(60,110,200,16,16,"2012/9/25");       
  52.         SPI_Flash_Init();
  53.         if(SD_Initialize())LCD_ShowString(60,130,200,16,16,"SD Card Error!");        //檢測SD卡錯誤
  54.         else //SD 卡正常
  55.         {                                                                                                                             
  56.                 LCD_ShowString(60,130,200,16,16,"SD Card Size:     MB");
  57.             Mass_Memory_Size[0]=(long long)SD_GetSectorCount()*512;//得到SD卡容量(字節),當SD卡容量超過4G的時候,需要用到兩個u32來表示
  58.             Mass_Block_Size[0] =512;//因為我們在Init里面設置了SD卡的操作字節為512個,所以這里一定是512個字節.
  59.             Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
  60.                 LCD_ShowNum(164,130,Mass_Memory_Size[0]>>20,5,16);        //顯示SD卡容量
  61.         }
  62.         if(SPI_FLASH_TYPE!=W25Q64)LCD_ShowString(60,130,200,16,16,"W25Q64 Error!");        //檢測SD卡錯誤
  63.         else //SPI FLASH 正常
  64.         {                                                                                                                             
  65.                    Mass_Memory_Size[1]=1024*1024*6;//前6M字節
  66.             Mass_Block_Size[1] =512;//因為我們在Init里面設置了SD卡的操作字節為512個,所以這里一定是512個字節.
  67.             Mass_Block_Count[1]=Mass_Memory_Size[1]/Mass_Block_Size[1];
  68.                 LCD_ShowString(60,150,200,16,16,"SPI FLASH Size:6144KB");         
  69.         }
  70.         delay_ms(1800);
  71.         usb_port_set(0);         //USB先斷開
  72.         delay_ms(300);
  73.            usb_port_set(1);        //USB再次連接          
  74.         LCD_ShowString(60,170,200,16,16,"USB Connecting...");//提示SD卡已經準備了         
  75.            //USB配置
  76.         USB_Interrupts_Config();   
  77.         Set_USBClock();   
  78.         USB_Init();            
  79.         delay_ms(1800);                       
  80.         while(1)
  81.         {       
  82.                 delay_ms(1);                                  
  83.                 if(USB_STA!=USB_STATUS_REG)//狀態改變了
  84.                 {                                                           
  85.                         LCD_Fill(60,190,240,190+16,WHITE);//清除顯示                                    
  86.                         if(USB_STATUS_REG&0x01)//正在寫                  
  87.                         {
  88.                                 LCD_ShowString(60,190,200,16,16,"USB Writing...");//提示USB正在寫入數據         
  89.                         }
  90.                         if(USB_STATUS_REG&0x02)//正在讀
  91.                         {
  92.                                 LCD_ShowString(60,190,200,16,16,"USB Reading...");//提示USB正在讀出數據                   
  93.                         }                                                                                           
  94.                         if(USB_STATUS_REG&0x04)LCD_ShowString(60,210,200,16,16,"USB Write Err ");//提示寫入錯誤
  95.                         else LCD_Fill(60,210,240,210+16,WHITE);//清除顯示          
  96.                         if(USB_STATUS_REG&0x08)LCD_ShowString(60,230,200,16,16,"USB Read  Err ");//提示讀出錯誤
  97.                         else LCD_Fill(60,230,240,230+16,WHITE);//清除顯示   
  98.                         USB_STA=USB_STATUS_REG;//記錄最后的狀態
  99.                 }
  100.                 if(Divece_STA!=bDeviceState)
  101.                 {
  102.                         if(bDeviceState==CONFIGURED)LCD_ShowString(60,170,200,16,16,"USB Connected    ");//提示USB連接已經建立
  103.                         else LCD_ShowString(60,170,200,16,16,"USB DisConnected ");//提示USB被拔出了
  104.                         Divece_STA=bDeviceState;
  105.                 }
  106.                 tct++;
  107.                 if(tct==200)
  108.                 {
  109.                         tct=0;
  110.                         LED0=!LED0;//提示系統在運行
  111.                         if(USB_STATUS_REG&0x10)
  112.                         {
  113.                                 offline_cnt=0;//USB連接了,則清除offline計數器
  114.                                 bDeviceState=CONFIGURED;
  115.                         }else//沒有得到輪詢
  116.                         {
  117.                                 offline_cnt++;  
  118.                                 if(offline_cnt>10)bDeviceState=UNCONNECTED;//2s內沒收到在線標記,代表USB被拔出了
  119.                         }


  120. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整代碼下載:
實驗50 USB讀卡器實驗.zip (1.13 MB, 下載次數: 58)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:257422 發表于 2017-12-4 21:32 | 只看該作者
謝謝分享
回復

使用道具 舉報

板凳
ID:257640 發表于 2017-12-5 12:48 | 只看該作者
好資料,謝謝。
回復

使用道具 舉報

地板
ID:608397 發表于 2019-9-6 12:33 | 只看該作者
好資料,謝謝。
回復

使用道具 舉報

5#
ID:470070 發表于 2019-11-6 22:47 | 只看該作者
有沒有設計的原理圖,基于STM32的USB讀卡器設計方法?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一二三| 日本激情一区二区 | 欧美一级二级视频 | 欧洲一级毛片 | www.日韩系列| 国产免费一区二区三区网站免费 | 黄色一级片在线播放 | 成人看片在线观看 | 超碰97人人人人人蜜桃 | 日韩一区二区福利 | 欧美久久一区二区 | 亚洲精品久久久一区二区三区 | 国产日韩久久 | 色综合一区二区三区 | 国产一区在线免费观看视频 | 老司机久久 | 中文字幕av在线 | 噜久寡妇噜噜久久寡妇 | 91视频网 | 麻豆一区一区三区四区 | 欧美成人免费在线视频 | 黄色免费av | 精品欧美一区二区精品久久久 | 91黄色片免费看 | 日韩在线不卡视频 | 天天草视频 | 丁香综合 | 欧美成年人视频在线观看 | 国产精品免费一区二区三区 | 精品国产91 | 久久不卡 | 黄色大片免费观看 | 国产精品久久久久久久久久久久 | 一区二区三区免费 | 青青草视频网 | 91视频在线看 | 国产日产精品一区二区三区四区 | 亚洲国产一区二区在线 | 国产亚洲成av人在线观看导航 | 中文字幕日韩欧美一区二区三区 | 国产精品99久久久久 |