国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種用于嵌入式系統(tǒng)的USB鍵盤控制接口電路設計

2015-10-08 14:57:41劉海艷等
科技視界 2015年27期

劉海艷等

【摘 要】本文介紹了一種基于STM32的可定制的USB鍵盤控制接口電路,與傳統(tǒng)鍵盤方案進行了比較,介紹了電源部分、USB接口部分的設計,針對矩陣鍵盤多按鍵的特殊需求,對基本按鍵提出了改進思路及軟件識別方法,在嵌入式系操作系統(tǒng)如WINCE、LINUX上有較高的通用性和靈活性。

【關(guān)鍵詞】STM32;USB接口;矩陣鍵盤;多按鍵

0 引言

隨著科技的不斷進度與發(fā)展,嵌入式系統(tǒng)無疑是當前最熱門最有發(fā)展前途的IT應用領域之一,像常見到的手機、PDA、機頂盒、高清電視(HDTV)、路由器、汽車電子、智能家電、醫(yī)療儀器、航天航空設備等都是典型的嵌入式系統(tǒng)。

嵌入式系統(tǒng)中人機交互技術(shù)最為重要,WINCE和LINUX系統(tǒng)比較流行,然而這兩種系統(tǒng)的驅(qū)動開發(fā)門檻較高,尤其對于特殊的矩陣鍵盤而言,實現(xiàn)基于USB接口的控制電路具有一定的難度。本文設計了一種基于STM32的可定制的USB鍵盤控制電路,比一般的專用的USB鍵盤接口芯片更加簡單方便,利用軟件的可以進行靈活的修改,大大的提高矩陣鍵盤的通用性。

1 方案比較

傳統(tǒng)方案:標準的PC104鍵盤大多采用專用的USB鍵盤芯片(如MC178-04B),其價格便宜而被廣泛運用,但是其接口比較固定,不利于開發(fā)者自己定制,例如按鍵連發(fā)、多鍵識別(A,E同時按下)等特定的功能需求,傳統(tǒng)方案的缺陷就慢慢的凸顯出來了。

本文設計的方案:運用帶USB接口功能的MCU(STM32F103ZET芯片)制作USB HID設備,根據(jù)矩陣鍵盤設計鍵碼掃描程序,可以完美的解決類似于上面的需求,同時STM32的芯片的性價比高、開發(fā)簡單,適合一般的嵌入式開發(fā)工程師。

2 系統(tǒng)的硬件設計(圖1)

系統(tǒng)總共分為5部分:系統(tǒng)供電部分,JTAG調(diào)試接口,矩陣鍵盤模塊,USB從設備接口,STM32F103ZET芯片內(nèi)部包含AD模塊,為了能夠使系統(tǒng)能夠正常運行,盡管AD模塊未使用,設計時應給予相應正常供電,使引腳VREF+、VDDA接VCC,引腳VREF-、VSSA接GND,否則系統(tǒng)不能正常運行。

2.1 電源部分

系統(tǒng)供電部分采用LT1117三端可調(diào)線性穩(wěn)壓芯片,輸出電流可達800mA,采用SOT-223封裝以減小空間,輸入端和輸出端分別接入100nF和10uF電容進行濾波降低電壓紋波,最終使電壓穩(wěn)定到3.3V。

2.2 USB 模塊接口電路設計(圖2)

根據(jù)USB1.1官方協(xié)議可知,USB為主從設備區(qū)分是有硬件電路實現(xiàn)的,USB HID設備屬于從設備,USB上拉電壓接在D+線上,所以本設計USB實現(xiàn)全速通訊。當開關(guān)開啟時,嵌入式系統(tǒng)就能自動開始枚舉該USB設備。

2.3 矩陣鍵盤接口設計

傳統(tǒng)的矩陣的鍵盤識別方法為掃描法和線反轉(zhuǎn)法,只能識別單個按鍵,硬件電路設計如圖3所示:

由上圖可知當雙按鍵按下時產(chǎn)生了線與邏輯沖突,對該設計進行改進,采用行線為開漏輸出,列線上有10K的上拉電阻,當雙按鍵按下時1和0線與產(chǎn)生0,這樣有效的識別了雙按鍵,如圖4所示:

3 軟件設計要點

3.1 USB鍵盤配置

USB通信協(xié)議中涉及了大量的描述符等相關(guān)信息其中包括設備描述符,配置描述符,接口描述符,HID描述符等,在STM32的庫文件中給出了相關(guān)的框架hw_config.c usb_desc.c usb_istr.c usb_prop.c usb_pwr.c嵌入式開發(fā)者進行相關(guān)的框架填寫便可進行正確的USB通信,USB鍵盤相關(guān)配置如下:

//開啟相關(guān)時鐘

/* Select USBCLK source */

RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);

/* Enable USB clock */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);

//開啟相關(guān)USB通信中斷

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel =

USB_LP_CAN_RX0_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

//USB發(fā)送緩存

u8 Key_Buffer[8] = {0,0,0,0,0,0,0,0};

Key_Buffer[0] = cmd;

Key_Buffer[2] = Keys;

/*copy mouse position info in ENDP1 Tx Packet Memory Area*/

UserToPMABufferCopy(Key_Buffer, GetEPTxAddr(ENDP1),8);

SetEPTxValid(ENDP1)。

3.2 多按鍵鍵盤識別

由于需要多按鍵識別處理,使用全鍵盤掃描另外再添加了橫向多按鍵處理,縱向多按鍵處理,處理步驟如下所示:

(1)行循環(huán)輸出senCode[RSIZE] =

{0X00FE,0X00FD,0X00FB,0X00F7,0X00EF,0X00DF,0X00BF,0X007F};

(2)列循環(huán)讀入getColDate();

(3)全掃描完畢后分別對獲取的列數(shù)據(jù)進行解析:

如果數(shù)據(jù)為下列之一

{0XFE00,0XFD00,0XFB00,0XF700,0XEF00,0XDF00,0XBF00,0X7F00};

則說明為單按鍵按下直接發(fā)送相關(guān)字符;

否則,dat & 0XFF00 != 0XFF00 則說明為雙按鍵按下,分別對數(shù)據(jù)的每一位進行處理判斷在哪一位為0說明在那一列當中有按鍵按下,同時與行輸出相結(jié)合從而有效的識別出了相關(guān)多按鍵按下;

(4)從按鍵映射表中找到相關(guān)的字符鍵碼,利用USB_SendChar()接口函數(shù)與主機設備進行通信。

4 結(jié)論

本文提出的基于USB接口的矩陣鍵盤控制接口電路,與傳統(tǒng)鍵盤方案進行了比較,其可定制的特點具有更大的靈活性。針對矩陣鍵盤多按鍵的特殊需求,對基本按鍵提出了改進的方法,對應多按鍵的識別上,提出了合理的解決步驟。在嵌入式系操作系統(tǒng)如WINCE、LINUX上有較高的通用性和靈活性,對于有外接4X4、8X8等矩陣鍵盤,手機鍵盤等,具有一定的實用價值。

【參考文獻】

[1]李小琦,汪紅.基于嵌入式Linux的USB鍵盤驅(qū)動設計[J].科技資訊,2009(19):97-98.

[2]李麗宏, 郝志剛. 嵌入式Linux的USB驅(qū)動設計[J]. 電子設計工程.2011(11): 170173.

[3]張淼,趙冒童.基于STM32F103RBT6芯片的USB鍵盤設計與實現(xiàn)[J]..福建電腦.2014.

[4]12:122-125[Z].

[責任編輯:鄧麗麗]

府谷县| 霞浦县| 吴忠市| 平和县| 天台县| 平原县| 彰化县| 呈贡县| 富阳市| 永登县| 靖宇县| 都匀市| 宽城| 娄烦县| 明水县| 铁力市| 揭东县| 东兴市| 确山县| 益阳市| 许昌市| 奉贤区| 娱乐| 宣威市| 天等县| 湖州市| 金昌市| 凤阳县| 年辖:市辖区| 平武县| 驻马店市| 黄龙县| 黄冈市| 秦安县| 安阳市| 台湾省| 万盛区| 察隅县| 昭通市| 慈利县| 乐山市|