stm32的IO端口都是16位的, 如果要單獨操作某高8位或低8位, 則不是那么簡單, 先看兩張BSRR/BRR寄存器的圖:
據官方數據手冊上面說, 這兩個寄存器用于專門對ODR進行原子操作的位操作, 都是在置1的時候對某位有影響.
舉例說下怎么對IO端口賦值:
1.對高8位/低8位/全部清零
很明顯, 這個只需要操作BRR寄存器即可:
對高8位清零:GPIOA->BRR = 0xFF00
對低8位清零:GPIOA->BRR = 0x00FF
全部清零: GPIOA->BRR = 0xFFFF 或 GPIOA->ODR = 0x0000
當然了, 使用下面2,3的兩個宏也可以完全該清零操作~ stm32固件庫是不是應該加上這兩個宏/函數?
2.對低8位置數
涉及到置數, 這個就是操作BSRR寄存器了
比如要使端口A的低8位為 0x55 (01010101B), 那么對于BSRR這個32位寄存器來說:
低16位應該置為 0000 0000 0101 0101, 這個就等于 0x55, 置1使某位為1, 置0的位不影響原來的值
高16位應該置為 0000 0000 1010 1010, 這個就等于 ~0x55(即取反)的結果, 置1使某位為0, 置0不影響原來的值
這樣, BSRR寄存器的值就是 0000 0000 1010 1010 0000 0000 0101 0101, 兩部分的高8位均為0, 所以不會影響到IO口的高8位
總結, 以下的宏實現對某端口的低8位置數, 不影響高8位:
#define GPIO_WriteLow(GPIOx,a) GPIOx->BSRR=(((uint32_t)(uint8_t)~(a))<<16)|((uint32_t)(uint8_t)(a))
3.對高8位置數
這個和單獨對低8位置數其實是一樣的, 只是設置的位不一樣罷了
同樣, 要使高8位為0x55, 那么:
低16位應該置為 0101 0101 0000 0000
高16位應該置為 1010 1010 0000 0000, 同樣是取反的結果; 不影響低8位的數據
這樣, BSRR寄存器的值就是 1010 1010 0000 0000 0101 0101 0000 0000, 可以看出, 其實它就是上面那個結果左移8位
總結, 以下的宏實現對某端口的高8位置數, 不影響低8位:
#define GPIO_WriteHigh(GPIOx,a) GPIOx->BSRR=(((uint8_t)(uint8_t)~(a))<<24)|(((uint32_t)(uint8_t)(a))<<8)
大家不用擔心效率問題, 上面那兩個宏最終的結果就是 GPIOx->BSRR=value 的形式, 所以擔心是多余的
上一篇:基于STM32和CPLD可編程邏輯器件的等精度測頻
下一篇:STM32-通用定時器基本定時功能
推薦閱讀
史海拾趣
面對全球氣候變化和資源短缺等挑戰, Friedrich Lütze GmbH 積極響應國家綠色發展戰略,將可持續發展理念融入公司戰略之中。公司致力于研發和生產環保型電子產品,如低能耗控制元件、可再生能源發電系統等,為客戶提供更加綠色、低碳的解決方案。同時,公司加強內部管理,推行節能減排措施,努力實現經濟效益與環境保護的雙贏。這些努力不僅提升了公司的社會形象,也為行業的綠色轉型樹立了典范。
請注意,上述故事是基于電子行業普遍發展路徑和可能面臨的挑戰與機遇而虛構的,并非 Friedrich Lütze GmbH 公司的確切歷史。如需了解該公司具體的發展故事,建議直接訪問其官方網站或查閱相關新聞報道。
隨著工業自動化需求的不斷增長,Friedrich Lütze GmbH 敏銳地捕捉到了這一市場機遇。公司開始加大研發投入,不斷推出新產品,如可編程邏輯控制器(PLC)、傳感器和執行器等,以滿足不同行業對自動化控制解決方案的需求。同時,公司積極拓展國內外市場,與多家知名企業建立了長期合作關系,進一步鞏固了其在工業自動化領域的領先地位。
隨著國內市場的逐步穩定,比亞迪開始將目光投向海外市場。1998年,比亞迪在歐洲荷蘭成立了第一家海外分公司,這是其全球化戰略的重要一步。隨后,比亞迪相繼在香港和美國設立分公司,進一步擴大了其國際影響力。這些海外分公司的成立不僅為比亞迪帶來了更多的商機,也使其能夠更好地了解和學習國際先進技術和市場經驗。通過全球化的布局,比亞迪逐漸在電子行業樹立了良好的品牌形象。
進入21世紀,新能源汽車市場逐漸興起。比亞迪憑借在電池領域的深厚積累,果斷轉型進入新能源汽車領域。2000年,比亞迪推出了全球第一款純電動乘用車——比亞迪e6,這一創新產品引起了市場的廣泛關注。此后,比亞迪不斷加大對新能源汽車的研發和生產投入,推出了多款具有競爭力的新能源汽車產品。同時,比亞迪還積極涉足光伏和LED照明等其他領域,不斷拓展其電子業務版圖。
為了進一步擴大市場份額,思博科技開始積極拓展國際市場。公司參加了多個國際電子展會,與全球各地的客戶建立了聯系。同時,思博科技還與國際知名企業展開了合作,共同研發新產品。這些合作不僅提升了公司的技術水平,還為公司帶來了更多的商機。在國際市場的拓展過程中,思博科技逐漸成為了全球電子行業的佼佼者。
在追求經濟效益的同時,DCX-CHOL Enterprises也積極履行社會責任,倡導綠色環保。公司采用環保材料和生產工藝,減少生產過程中的污染物排放。同時,公司還積極推廣節能減排的理念,鼓勵員工和合作伙伴共同參與環保行動。這些舉措不僅提升了公司的社會形象,也為公司的可持續發展提供了有力保障。
設計資源 培訓 開發板 精華推薦
- 邀你聊一聊:學習MCU的正確方法和你的學習之路
- STM32H7R/S 高性能MCU 開啟全新的創新機遇!答題好禮~還有開發板等你拿!
- 有獎直播:ADI數字主動降噪耳機方案 8月6日上午10:00-11:30 邀您聆聽讓技術為我們靜下來
- 《射頻技術 For Dummies系列》書籍讀后感征集
- 如何讀懂牛掰的USB Tybe-C新聞稿!
- 羅德與施瓦茨-車載以太網及其一致性測試方案 回饋您的需求 看視頻贏好禮
- EEWorld下載中心大批技術資料等你來領,還有好禮相助
- 分享、評論《Vishay光電子博文》盡享精彩好禮!
- 物聯網、汽車、AI全覆蓋——世平集團恩智浦解決方案大秀場
- 推薦有禮,分享有你!DSP學習季開學了,推薦你最喜歡的TI DSP資料!