吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32的IO端口高8位或低8位單獨操作方法

2oON_changxuemc ? 來源:工程師曾玲 ? 2019-02-02 16:42 ? 次閱讀

幾天前剛接觸stm32的時候, 被單獨操作IO口給弄糊涂了, 現記錄下, 現在發現其實蠻簡單的, 只是剛開始的時候~~~

stm32的IO端口都是16位的, 如果要單獨操作某高8位或低8位, 則不是那么簡單, 先看兩張BSRR/BRR寄存器的圖:

STM32的IO端口高8位或低8位單獨操作方法

STM32的IO端口高8位或低8位單獨操作方法

據官方數據手冊上面說, 這兩個寄存器用于專門對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 的形式, 所以擔心是多余的

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121158
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357559

原文標題:STM32中單獨設置GPIO端口高8位/低8位的方法

文章出處:【微信號:changxuemcu,微信公眾號:暢學單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    請問stm8s IO操作如何實現?

    請教各位了,stm8s IO操作如何實現像stm32類似的
    發表于 05-09 07:10

    STM32學習筆記-GPIO做為輸出時操作方法

    操作方法。GPIOx_ODR: 端口輸出數據寄存器,它的31:16保留不用,15:0對應x的相應引腳,他只能以16方式操作。GPIOx
    發表于 10-07 15:51

    STM32單獨設置IO端口88方法

    幾天前剛接觸stm32的時候, 被單獨操作IO口給弄糊涂了, 現記錄下, 現在發現其實蠻簡單的, 只是剛開始的時候~~~stm32
    發表于 05-26 08:00

    stm32IO端口如何單獨操作88

    STM32單獨設置GPIO端口8
    發表于 02-23 06:08

    AVR單片機的端口操作方法

    一、常規方法AVR單片機的各類教材編程應用參考資料,對介紹的端口操作方法不外乎宏定義及整體和某個常量相
    發表于 07-13 08:11

    AVR單片機的端口操作方法解析

    AVR單片機的端口操作方法解析來源:未知?作者:工程師周亮?2018年11月22日 16:07?3708次閱讀正在上傳…重新上傳取消?0一、常規方法AVR單片機的各類教材
    發表于 11-23 08:35

    STM32操作方法

    前言這篇文章主要用來講解STM32中的操作,學習過51單片機的應改了解,在控制51單片機IO引腳時,只需要向某一個IO口賦值就可以實現,
    發表于 01-17 06:27

    8端口檢測8獨立按鍵

    8端口檢測8獨立按鍵 C51單片機源碼,KEIL源文件,C語言編寫
    發表于 06-20 16:36 ?17次下載

    詳解STM32操作

    51單片機相信各位都用過,假設P1.1的IO口上掛了一個LED,那么你單獨對LED的操作就是P1.1 = 0P1.1 = 1,注意,是你可以單獨
    發表于 06-01 09:54 ?6474次閱讀
    詳解<b class='flag-5'>STM32</b>的<b class='flag-5'>位</b>帶<b class='flag-5'>操作</b>

    STM32單獨設置GPIO端口8/8方法資料下載

    電子發燒友網為你提供STM32單獨設置GPIO端口8/
    發表于 04-21 08:49 ?10次下載
    <b class='flag-5'>STM32</b>中<b class='flag-5'>單獨</b>設置GPIO<b class='flag-5'>端口</b><b class='flag-5'>高</b><b class='flag-5'>8</b><b class='flag-5'>位</b>/<b class='flag-5'>低</b><b class='flag-5'>8</b><b class='flag-5'>位</b>的<b class='flag-5'>方法</b>資料下載

    "AVR單片機的端口操作方法解析:域bit field(和STM32帶bit-band不同,帶是利用域的功能做成的)方

    AVR單片機的端口操作方法解析來源:未知?作者:工程師周亮?2018年11月22日 16:07?3708次閱讀正在上傳…重新上傳取消?0一、常規方法AVR單片機的各類教材
    發表于 11-15 09:21 ?21次下載
    "AVR單片機的<b class='flag-5'>端口</b><b class='flag-5'>位</b><b class='flag-5'>操作方法</b>解析:<b class='flag-5'>位</b>域bit field(和<b class='flag-5'>STM32</b><b class='flag-5'>位</b>帶bit-band不同,<b class='flag-5'>位</b>帶是利用<b class='flag-5'>位</b>域的功能做成的)方

    《嵌入式 - 深入剖析STM32》詳解STM32操作

    的第一個IO口進行上下拉操作,然而對于STM32,是沒有這種操作的,那么為了像51單片機一樣能夠單獨的對某個端的某一個
    發表于 11-26 09:51 ?37次下載
    《嵌入式 - 深入剖析<b class='flag-5'>STM32</b>》詳解<b class='flag-5'>STM32</b><b class='flag-5'>位</b>帶<b class='flag-5'>操作</b>

    STM32端口IO方向設置問題

    STM32端口IO方向設置問題STM32端口寄存器配置STM32
    發表于 11-29 13:36 ?28次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>端口</b><b class='flag-5'>IO</b>方向設置問題

    STM32F429入門(十一):操作

    操作P0^0 = 0; //設置單個io口,這種叫做操作//stm32單片機GPIOH_ODR &= ~(1
    發表于 12-31 19:56 ?13次下載
    <b class='flag-5'>STM32</b>F429入門(十一):<b class='flag-5'>位</b>帶<b class='flag-5'>操作</b>

    用于Arduino的8IO端口

    電子發燒友網站提供《用于Arduino的8IO端口庫.zip》資料免費下載
    發表于 12-14 10:52 ?8次下載
    用于Arduino的<b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>IO</b><b class='flag-5'>端口</b>庫
    揭秘百家乐官网百分之50| 网上百家乐官网投注技巧| 百家乐官网补牌规律| 百家乐官网游戏平台架设| 百家乐官网游戏大厅下| 百家乐五局八星| 百家乐娱乐真人娱乐| 大发888娱乐场骗局| 宝胜娱乐| 百家乐官网摇色子网站| 香港百家乐官网娱乐场开户注册 | 百家乐园zyylc| 澳门百家乐下路写法| 免费百家乐计划工具| 88娱乐城| 缅甸百家乐官网赌博有假吗| 定制百家乐官网桌子| 菲律宾百家乐娱乐| 三易博娱乐城| 百家乐官网记牌器| 澳门博彩网站| 免佣百家乐官网规则| 新葡京百家乐娱乐城| 百家乐官网比较好的网站| 百家乐网页游戏网址| 大发888娱乐城好吗| 百家乐官网塑料扑克牌盒| 大发888游戏平台46| 浦城县| 都坊百家乐官网的玩法技巧和规则 | 百家乐官网投注网出租| 百家乐职业打| 百家乐官网游戏百家乐官网| 百家乐路的看法| 大发888作弊| 百家乐官网高命中打法| 澳门百家乐怎玩| 皇冠赌球网| 百家乐官网群详解包杀| 大发888娱乐城ipad| 网络百家乐官网公式打法|