-----------------------------------動機-----------------------------------
寫在前面的話:最近逛淘寶無意間發現RC522居然只要10元左右就可以包郵買到,真是太便宜了,就忍不住買了個回來玩玩。到貨移植到我的板子上OK 后突然發現我的USB口緊張了,一個用來給板子供電一個插jlink 一個插入usb轉串口給RC522下命令。就想著將板子供電和RC522傳輸用一個USB接口來實現。這就是這次折騰USB的來由~-~
----------------------------------開始折騰USB-----------------------------
首先我想拿來主義,百度一個完整的USB范例就完事。以上就百度了下STM32 USB HID
那就一個多啊,已是我就下一個看一個看是否適合我用。很快我就發現了兩個問題不能說所有至少我百度到到都是這樣:
1. 這些范例大都是在官方USB范例上修改得來,工程名都沒做修改。
2. 這些范例大都是用的3.x的USB FW,官網上我搜到的已是4.0了
3. 這些范例中STM中為了兼容他的N個板子做了很多通用性的處理。這些對于初學者來說不夠清晰明了。
所以我決定從0開始構建一個方便移植的模塊,移植他的JoyStickMouse。在我的項目中用到時加入這個模塊即可。
首先從官網下載最新的USB庫得到的是一個壓縮包stsw-stm32081.zip解壓后如圖:
Projects 是官方的范例,Libraries 是USB的4.0驅動
接下來用MDK建立一個工程我用的MDK是4.12 STM的固件庫是3.5的 USB庫就是4.0的了,芯片用的是STM32F103VC 建立以下文件夾
在USBFW 下建立兩個文件夾分別存放USB的底層驅動文件和中間層接口文件并把STM32_USB-FS-Device_Lib_V4.0.0LibrariesSTM32_USB-FS-Device_Driver中的inc和src復制到DRIVER文件夾內,把STM32_USB-FS-Device_Lib_V4.0.0ProjectsJoyStickMouse中的inc和src復制到MID文件夾內。一般我們只要修改MID層的文件而DRIVER是不用修改的。
建好后的工程截圖:
這個時候編譯下可能出來一大堆的錯誤。這個USB的源碼分析百度有很多很好的文章講解的非常詳細大家可以自行百度。
接下來說說我的修改----------------------------------------
首先在usb_conf中定義了Buffer Description Table
這個0x18意味著留24字節給table 只用到3個端點了,一般我們用端點0枚舉,端點1輸入,端點2輸出這個定義是夠用了,如果你的端點應用大于3 就要修改這個表的大小了。
-------------------------------------------修改硬件抽象---------------------------------------------------------
在有3個文件相關:
1. platform_config.h STM官方板子的資源平臺配置文件。
2. hw_config.c hw_config.h USB的硬件相關配置
首先我用的不是官方板子,把#include "platform_config.h"注釋掉只保留其中的ID和USB接入檢測機制的上拉控制IO宏定義(我的板子是PC6,這個根據實際情況修改即可)
官方范例中在main 用
USB_Interrupts_Config();
Set_USBClock();
USB_Init();
完成了USB的初始化工作,
Set_System();
這個名字太大了,很顯然用在我的項目中太大好聽,修改hw_config.c
voidUSB_Configurage(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
/*enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
//USB用的IO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//USB時鐘
Set_USBClock();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_OD;
GPIO_Init(GPIOC,&GPIO_InitStructure);
/*C6-USB接入控制口 */
/* Enable the USB disconnect GPIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT,ENABLE);
/* USB_DISCONNECT used as USB pull-up */
GPIO_InitStructure.GPIO_Pin =USB_DISCONNECT_PIN;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(USB_DISCONNECT,&GPIO_InitStructure);
USB_Cable_Config(DISABLE);
USB_Cable_Config(ENABLE);
USB_Interrupts_Config();
USB_Init();
}
最后在usb_pwr.c 做些小改動,因為不知道他那個板子是怎么喚醒的,所以把那些都屏蔽掉了。具體見代碼咯
這樣在main.c中只要USB_Configurage(); 就搞定USB初始化了,當然還要在h文件中做些接口聲明和去掉一些和我的板子硬件關系不大的函數,目的只有一個簡單明了。
編譯一下,通過。這樣以后在任何一個項目中要用到USB時只要復制USBFW中的文件,然后小改下MID層的文件就可以用上USB了,在main.c中只要
#include"usb_lib.h"
#include"hw_config.h"
#include"usb_pwr.h"
在任何需要發送數據的地方將數據寫入buff就完成了,當然不同的應用可能還要修改端點初始化和描述符等等,但這些應該都是大把的例子可以參照復制的了。具體看代碼咯個人覺得st的c應用還是很好的特別是指針函數數組這塊 ~-~
我的板子用了4個按鍵(PD3:6)來控制PC的光標4個方向的移動,將代碼下到板子上的結果就是按下相應的按鍵光標就移動咯
至此就移植完了
上一篇:STM32f103USB移植之USB鼠標
下一篇:STM32F103RCT6移植到STM32F103C8T6注意事項
推薦閱讀
史海拾趣
Connect-Tech Products Corp公司自成立以來,一直致力于電子技術的研發與創新。某年,公司研發團隊成功突破了一項關鍵技術,開發出了一款具有高效能、低功耗特點的電子連接器。這一創新不僅提升了產品的競爭力,還為公司贏得了市場的廣泛認可。隨著該產品的推廣和應用,Connect-Tech Products Corp公司的業績逐年攀升,逐漸在電子行業中嶄露頭角。
Connect-Tech Products Corp公司始終將產品質量視為企業發展的生命線。公司建立了嚴格的質量管理體系,從原材料采購、生產加工到產品出廠,每一個環節都嚴格把控。此外,公司還注重持續改進,不斷優化生產流程和技術創新,確保產品質量的穩定性和可靠性。這些措施使得Connect-Tech Products Corp公司的產品在市場上贏得了良好的口碑和信譽。
隨著國內市場的不斷飽和,Connect-Tech Products Corp公司開始尋求海外市場的發展機會。公司通過參加國際電子展、建立海外銷售網絡等方式,積極開拓國際市場。同時,公司還與國際知名企業展開合作,共同研發新產品,進一步提升了公司的技術水平和市場影響力。這些舉措不僅為公司帶來了更廣闊的市場空間,也為其未來的發展奠定了堅實基礎。
Connect-Tech Products Corp公司深知人才是企業發展的核心力量。因此,公司注重人才培養和團隊建設,通過定期舉辦培訓、組織技術交流活動等方式,提升員工的專業技能和綜合素質。同時,公司還建立了完善的激勵機制,鼓勵員工創新創造,為公司的發展貢獻智慧和力量。這些舉措不僅增強了公司的凝聚力和向心力,也為企業的發展提供了有力的人才保障。
面對日益激烈的國際競爭,BREL International Components公司開始實施全球化戰略。公司首先在亞洲設立生產基地,利用當地的低成本優勢提高生產效率。隨后,BREL在歐洲和北美設立研發中心,吸納全球頂尖的技術人才,推動技術創新和產品升級。通過全球化的戰略布局,BREL不僅降低了生產成本,還拓寬了市場渠道,實現了業務的快速增長。
隨著全球電子產業的快速發展和市場競爭的加劇,ECT不斷加快全球化戰略的實施。公司在全球范圍內設立分支機構,積極拓展海外市場,加強與國際知名企業的合作與交流。同時,ECT也注重培養本土人才和創新能力,不斷提升公司的核心競爭力。展望未來,ECT將繼續秉承“創新、質量、服務”的理念,致力于成為全球領先的電子測試系統供應商和服務商。
以上五個故事概述了Everett Charles Technologies (ECT) 公司的發展歷程和關鍵節點,每個故事都體現了公司在技術創新、市場拓展和全球化戰略方面的努力和成果。這些故事不僅展現了ECT的輝煌過去,也預示著其更加美好的未來。
wince上電自啟動,如何不出現桌面,直接出現我的程序界面? 我現在用注冊表的方式,讓我的程序(窗口程序)在gwes,explore之后啟動。這樣會先出現桌面2,3秒再出現我的程序。 如果希望不出現桌面,要怎么做。… 查看全部問答∨ |
|
先詳細解釋一下標題的意思。 我的播放器運行在wince5.0中,我編寫了各種各樣的播放器,有使用WMP的,有使用TCPMP的,有使用用DSHOW的,都會有這么個情況: 我要跳轉到視頻的某個位置,比如說10s,不能準確的設置到10s,而 ...… 查看全部問答∨ |
|
【連載】【ALIENTEK MiniSTM32 開發板】STM32不完全手冊--PWM輸出實驗(實驗八) ALIENTEK開發板購買地址:http://shop62103354.taobao.com/ [ 本帖最后由 正點原子 于 2010-8-30 09:37 編輯 ]… 查看全部問答∨ |
MDK 3.80 STM32F107 調試時,外設沒有CAN部分,我在網上聽說別人的有,我估計是不是安裝了什么插件。請教!上圖求真相! 下載 (31.08 KB) 2009-12-22 17:33 … 查看全部問答∨ |
各位大俠,幫小弟看看這個問題: 我想用430做數據采集,雙通道數據采集,每個通道采集64個點之后,通過IO口來發送,現在是ADC這塊都有問題。采樣頻率為20KHz以上,使用TIMERA.OUT1為觸發源。 問題是:我單步運行運行到ADCTL0 |= ADC12SC;這條語句 ...… 查看全部問答∨ |
在百度百科中看到 電壓跟隨器的其中一個好處是,提高了輸入阻抗,這樣,輸入電容的容量可以大幅度減小,為應用高品質的電容提供了前提保證。 為什么可以說:輸入電容的容量可以大幅度減小? 小弟初入模擬電子的世界,還請各位幫忙解釋一下,非 ...… 查看全部問答∨ |
求c2000 renewable energy developer skit電路圖n 按理說在官網和controlSUITE上應該有的,但是我就是找不到,求個位大哥指點。具體實物為下圖: … 查看全部問答∨ |
Getting Started with the Stellaris LaunchPad- Chapter 6 $(\'flv_rZr\').innerHTML=(AC_FL_RunContent(\'width\', \'600\', \'height\', \'475\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \'http://www.tudou.com/v/coqQl5OqhHw/&rpid=106547959&resourceId=1065 ...… 查看全部問答∨ |