一、接口函數
對于linux驅動來說,基本的操作函數有Open、Close、Read、Write、Ioctrl,這是在OS的驅動層對外設進行操作的一套規范化的接口。對于更底層的硬件抽象層來說,上層的Open和Close意味著對外設的初始化設置和反初始化設置(回復到未被使用前的狀態)。如果外設的作用是實現一個通訊傳輸,那么上層的Read、Write也要同樣對應外設的發送和接收。若外設不是一個傳輸設備,那么就要有對應的I/O control函數來控制它。同時HAL還要提供取得外設狀態的接口,以及外設的中斷處理函數。所以一個HAL模塊的函數結構基本上是這樣的:
通訊外設的接口函數
在TRANSFER這里,大部分實現通信協議的外設都可以由普通方式、中斷方式、DMA方式來進行收發。普通方式和中斷方式有相應的callback函數和中斷處理函數,DMA方式也有相應的DMA控制函數。依據不同的通訊協議,不同的通訊外設的傳輸函數也會有許多區別。
CAN模塊里有sleep和wakeup函數。
I2C模塊分了Master、Slave和Mem三種模式,每種模式都由對應的讀寫函數。
SPI模塊里有全雙工模式下用的同時讀寫的函數。
非通訊外設的接口函數
非通訊外設的CONTROL部分中,不同的外設有不同的操作函數。比如 對于Rtc來說,需要能夠取得當前的時間的操作函數。對于看門狗來說,要有喂狗的操作函數。
二、數據結構
Init結構體
每個外設都有相應的Init結構體類型,如ADC_InitTypeDef、CAN_InitTypeDef、DMA_InitTypeDef等等,結構體里的每個成員都代表要初始化的外設的屬性。我找一個最簡單的來說明:
/**
* @brief IWDG Init structure definition
*/
typedef struct
{
uint32_t Prescaler; /*!< Select the prescaler of the IWDG.
This parameter can be a value of @ref IWDG_Prescaler */
uint32_t Reload; /*!< Specifies the IWDG down-counter reload value.
This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */
}IWDG_InitTypeDef;
IWDG_InitTypeDef里包含看門狗時鐘的預分頻量和喂狗時送的基礎數值。
Handle結構體
之前有說過,Handle結構體相當于一個外設類的實例。
/**
* @brief IWDG Handle Structure definition
*/
typedef struct
{
IWDG_TypeDef *Instance; /*!< Register base address */
IWDG_InitTypeDef Init; /*!< IWDG required parameters */
HAL_LockTypeDef Lock; /*!< IWDG Locking object */
__IO HAL_IWDG_StateTypeDef State; /*!< IWDG communication state */
}IWDG_HandleTypeDef;
這個結構體通常包含一個Init結構體,指向寄存器地址的指針,一個HAL鎖和一個標記狀態的變量。由于IWDG模塊相對簡單,所以沒有函數指針表,也沒有標記錯誤的變量。
幾乎所有的模塊里的函數都會以指向這個結構體的指針作為參數。
三、小結
stm32cube里的HAL層在接口函數的設計上趨向于簡單和標準化。只要理解外設的工作原理,使用對應模塊的接口函數將不會付出很多學習成本。
當我們使用任意外設的時候,要提前創建一個該外設的Handle結構體,然后將Handle結構體里的Init結構體的成員都按照需要進行賦值。在調用該模塊的Init()函數進行初始化之后,就可以使用控制函數來對外設進行行為級的操作了。
上一篇:stm32.cube(九)——HAL.DMA
下一篇:stm32.cube(八)——HAL的配置文件
推薦閱讀
史海拾趣
為了進一步擴大市場份額,Catalyst公司積極實施國際化戰略。公司通過與國外知名企業的合作與交流,引進先進的技術和管理經驗,不斷提升自身的競爭力。同時,Catalyst還積極參加國際電子展會和論壇,展示公司的最新產品和技術成果,吸引了眾多國際客戶的關注。通過國際化戰略的拓展,Catalyst成功打開了海外市場的大門,為公司的長遠發展奠定了堅實的基礎。
B+B SmartWorx一直致力于產品創新,不斷推出符合市場需求的新產品。其中,光纖轉換器、3G/4G無線路由器以及Wzzard系列無線感測裝置等產品受到了市場的廣泛認可。這些產品不僅填補了研華在某些領域的空白,也展示了B+B SmartWorx在物聯網和工業網通領域的強大實力。此外,公司還積極開發風扇配件、AC插座等電力元件產品線,進一步豐富了其產品體系。
AVAGO公司(現更名為Broadcom)的創業故事始于上世紀八十年代。當時,幾位工程師看到半導體行業的巨大潛力,決定創立一家公司來專注于高性能模擬半導體的研發。初始階段,公司面臨著資金短缺、市場競爭激烈等挑戰,但憑借團隊的技術實力和對市場的敏銳洞察,他們成功開發出了幾款性能卓越的半導體產品,并逐漸在市場上獲得了認可。
作為一家有著高度社會責任感的企業,DeLorme公司始終關注環境保護和社會公益事業。他們積極參與各種環保活動和社會公益活動,通過捐贈物資、提供技術支持等方式為社會做出貢獻。此外,他們還致力于推動公司的可持續發展戰略,通過優化生產工藝、降低能耗和減少廢棄物排放等措施降低對環境的影響。這些舉措不僅體現了公司的社會責任感也提高了公司的品牌形象和市場競爭力。
請注意,以上故事均為虛構內容,旨在為你提供一個關于DeLorme公司發展起來的可能故事框架。在實際情況中,DeLorme公司的發展歷程和具體故事可能會有所不同。
Heyco非常重視與合作伙伴的關系建設。2021年,Heyco將年度全球最佳分銷商稱號授予了電子元器件分銷商貿澤電子,以表彰其在過去一年中不懈的努力和出色的銷售業績。這一獎項的頒發不僅體現了Heyco對貿澤電子的高度認可,也展示了雙方之間深入、愉快的合作關系。通過與貿澤電子等優秀分銷商的緊密合作,Heyco能夠更好地服務全球客戶,滿足其多樣化的需求。
在國內市場取得一定成績后,Fairview Microwave開始將目光投向國際市場。他們積極參加國際電子展會和技術交流活動,與全球各地的客戶建立聯系。同時,公司還積極開拓海外市場,通過設立分支機構和代理商等方式,將產品銷售到全球各地。這些舉措不僅為公司帶來了更多的商機,也進一步提升了Fairview Microwave的品牌知名度和影響力。
本帖所述的操作系統源代碼和《都江堰操作系統與嵌入式系統設計》一書,均可以在 www.djyos.com 中免費下載。 都江堰操作系統(簡稱djyos)是一個操作系統,但不是“又一個操作系統”,它是一個全新思路的操作系統。 &nbs ...… 查看全部問答∨ |
|
各位: 硬件是通過無線網卡連接到網絡上的,軟件上要求時刻檢測網絡連接狀態,當網絡斷的時候給出提示 可是我發現手動的將無線AP的電源關掉,無線網卡(VT6656)顯示還是連接,而且信號顯示very good,即不能 立刻刷新當前的狀態, ...… 查看全部問答∨ |
賣一塊二手gec 2440開發板,價錢1100,可砍價.帶觸摸屏.僅限蘇州地區當面交易,可以先試用.資料齊全.聯系請加msn:guyuguang8628391@ GEC2440開發板硬件構成 硬件功能介紹: ◆ 采用三星公司的 S3C2440,系統穩定運行在405MHz,最高可達530MHz; ◆ 64M 字節的 SDRAM,由兩片 K4S561632 組成,工作在 32 位模式下; ◆ 64M 字節 NAND Flash,采用的是 K9F1208,可以兼容 16M,32 ...… 查看全部問答∨ |
看到一段代碼,不明白 PBYTE pRes; pRes = (PBYTE)LoadString (hInst, IDS_DOITEXT , NULL, 0) // Get the length of the string resource int nLen = *(PWORD)(pRes-2) * sizeof (TCHAR); MSDN上面說,字符串資源的字符長度在字符串起始 ...… 查看全部問答∨ |
今天想把2.6.22內核替換以前的2.4內核 但是編譯后燒錄上去就在這個地方掛了! vivi> boot Copy linux kernel from 0x00030000 to 0x30008000, size = 0x002d0000 ... done zImage magic = 0x016f2818 Setup linux parameters at 0x3000010 ...… 查看全部問答∨ |
我用的是430中的f135單片機。每次掉電后再次上電單片機都不工作,必須復位一次才能正常工作。我不能理解這到底是什么原因。復位電路是完全正確的,而且電容足夠大、晶振是4兆的。我用msp430f1222單片機就不會有這樣的問題。 請斑竹和高手們幫 ...… 查看全部問答∨ |
|
今天幾乎就糾結在這TA0和TA1的設置中了。手冊上對TA1根本就沒有任何提及。可是在仿真的時候,TA1擁有和TA0完全一樣的寄存器,而且頭文件里對它們都有定義。可是這兩個卻總是不能同時運行。同樣的程序,TA0能用,修改成TA1就不行了。下面這個程序就 ...… 查看全部問答∨ |
好東東!《android應用程序開發與典型案例》完整版PDF! 《android應用程序開發與典型案例》圖書簡介: 共23章,內容包含兩大部分。第一部分是android程序設計基礎,在介紹android環境搭建以及android系統基本控件和組件后,詳細介紹了android系統應用編程中典型的技術,比如,android中的圖形圖像、多媒 ...… 查看全部問答∨ |