精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

2oON_changxuemc ? 來(lái)源:工程師曾玲 ? 2019-02-02 16:42 ? 次閱讀

幾天前剛接觸stm32的時(shí)候, 被單獨(dú)操作IO口給弄糊涂了, 現(xiàn)記錄下, 現(xiàn)在發(fā)現(xiàn)其實(shí)蠻簡(jiǎn)單的, 只是剛開始的時(shí)候~~~

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

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

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

據(jù)官方數(shù)據(jù)手冊(cè)上面說(shuō), 這兩個(gè)寄存器用于專門對(duì)ODR進(jìn)行原子操作的位操作, 都是在置1的時(shí)候?qū)δ澄挥杏绊?

舉例說(shuō)下怎么對(duì)IO端口賦值:

1.對(duì)高8位/低8位/全部清零

很明顯, 這個(gè)只需要操作BRR寄存器即可:

對(duì)高8位清零:GPIOA->BRR = 0xFF00

對(duì)低8位清零:GPIOA->BRR = 0x00FF

全部清零: GPIOA->BRR = 0xFFFF 或 GPIOA->ODR = 0x0000

當(dāng)然了, 使用下面2,3的兩個(gè)宏也可以完全該清零操作~ stm32固件庫(kù)是不是應(yīng)該加上這兩個(gè)宏/函數(shù)?

2.對(duì)低8位置數(shù)

涉及到置數(shù), 這個(gè)就是操作BSRR寄存器了

比如要使端口A的低8位為 0x55 (01010101B), 那么對(duì)于BSRR這個(gè)32位寄存器來(lái)說(shuō):

低16位應(yīng)該置為 0000 0000 0101 0101, 這個(gè)就等于 0x55, 置1使某位為1, 置0的位不影響原來(lái)的值

高16位應(yīng)該置為 0000 0000 1010 1010, 這個(gè)就等于 ~0x55(即取反)的結(jié)果, 置1使某位為0, 置0不影響原來(lái)的值

這樣, BSRR寄存器的值就是 0000 0000 1010 1010 0000 0000 0101 0101, 兩部分的高8位均為0, 所以不會(huì)影響到IO口的高8位

總結(jié), 以下的宏實(shí)現(xiàn)對(duì)某端口的低8位置數(shù), 不影響高8位:

#define GPIO_WriteLow(GPIOx,a) GPIOx->BSRR=(((uint32_t)(uint8_t)~(a))<<16)|((uint32_t)(uint8_t)(a))

3.對(duì)高8位置數(shù)

這個(gè)和單獨(dú)對(duì)低8位置數(shù)其實(shí)是一樣的, 只是設(shè)置的位不一樣罷了

同樣, 要使高8位為0x55, 那么:

低16位應(yīng)該置為 0101 0101 0000 0000

高16位應(yīng)該置為 1010 1010 0000 0000, 同樣是取反的結(jié)果; 不影響低8位的數(shù)據(jù)

這樣, BSRR寄存器的值就是 1010 1010 0000 0000 0101 0101 0000 0000, 可以看出, 其實(shí)它就是上面那個(gè)結(jié)果左移8位

總結(jié), 以下的宏實(shí)現(xiàn)對(duì)某端口的高8位置數(shù), 不影響低8位:

#define GPIO_WriteHigh(GPIOx,a) GPIOx->BSRR=(((uint8_t)(uint8_t)~(a))<<24)|(((uint32_t)(uint8_t)(a))<<8)

大家不用擔(dān)心效率問(wèn)題, 上面那兩個(gè)宏最終的結(jié)果就是 GPIOx->BSRR=value 的形式, 所以擔(dān)心是多余的

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5317

    瀏覽量

    120007
  • STM32
    +關(guān)注

    關(guān)注

    2266

    文章

    10871

    瀏覽量

    354801

原文標(biāo)題:STM32中單獨(dú)設(shè)置GPIO端口高8位/低8位的方法

文章出處:【微信號(hào):changxuemcu,微信公眾號(hào):暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)stm8s IO操作如何實(shí)現(xiàn)?

    請(qǐng)教各位了,stm8s IO操作如何實(shí)現(xiàn)像stm32類似的
    發(fā)表于 05-09 07:10

    STM32學(xué)習(xí)筆記-GPIO做為輸出時(shí)操作方法

    操作方法。GPIOx_ODR: 端口輸出數(shù)據(jù)寄存器,它的31:16保留不用,15:0對(duì)應(yīng)x的相應(yīng)引腳,他只能以16方式操作。GPIOx
    發(fā)表于 10-07 15:51

    STM32單獨(dú)設(shè)置IO端口88方法

    幾天前剛接觸stm32的時(shí)候, 被單獨(dú)操作IO口給弄糊涂了, 現(xiàn)記錄下, 現(xiàn)在發(fā)現(xiàn)其實(shí)蠻簡(jiǎn)單的, 只是剛開始的時(shí)候~~~stm32
    發(fā)表于 05-26 08:00

    stm32IO端口如何單獨(dú)操作88

    STM32單獨(dú)設(shè)置GPIO端口8
    發(fā)表于 02-23 06:08

    AVR單片機(jī)的端口操作方法

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

    AVR單片機(jī)的端口操作方法解析

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

    STM32操作方法

    前言這篇文章主要用來(lái)講解STM32中的操作,學(xué)習(xí)過(guò)51單片機(jī)的應(yīng)改了解,在控制51單片機(jī)IO引腳時(shí),只需要向某一個(gè)IO口賦值就可以實(shí)現(xiàn),
    發(fā)表于 01-17 06:27

    8端口檢測(cè)8獨(dú)立按鍵

    8端口檢測(cè)8獨(dú)立按鍵 C51單片機(jī)源碼,KEIL源文件,C語(yǔ)言編寫
    發(fā)表于 06-20 16:36 ?17次下載

    詳解STM32操作

    51單片機(jī)相信各位都用過(guò),假設(shè)P1.1的IO口上掛了一個(gè)LED,那么你單獨(dú)對(duì)LED的操作就是P1.1 = 0P1.1 = 1,注意,是你可以單獨(dú)
    發(fā)表于 06-01 09:54 ?6378次閱讀
    詳解<b class='flag-5'>STM32</b>的<b class='flag-5'>位</b>帶<b class='flag-5'>操作</b>

    STM32單獨(dú)設(shè)置GPIO端口8/8方法資料下載

    電子發(fā)燒友網(wǎng)為你提供STM32單獨(dú)設(shè)置GPIO端口8/
    發(fā)表于 04-21 08:49 ?9次下載
    <b class='flag-5'>STM32</b>中<b class='flag-5'>單獨(dú)</b>設(shè)置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單片機(jī)的端口操作方法解析:域bit field(和STM32帶bit-band不同,帶是利用域的功能做成的)方

    AVR單片機(jī)的端口操作方法解析來(lái)源:未知?作者:工程師周亮?2018年11月22日 16:07?3708次閱讀正在上傳…重新上傳取消?0一、常規(guī)方法AVR單片機(jī)的各類教材
    發(fā)表于 11-15 09:21 ?21次下載
    "AVR單片機(jī)的<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操作

    的第一個(gè)IO口進(jìn)行上下拉操作,然而對(duì)于STM32,是沒有這種操作的,那么為了像51單片機(jī)一樣能夠單獨(dú)的對(duì)某個(gè)端的某一個(gè)
    發(fā)表于 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方向設(shè)置問(wèn)題

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

    STM32F429入門(十一):操作

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

    用于Arduino的8IO端口庫(kù)

    電子發(fā)燒友網(wǎng)站提供《用于Arduino的8IO端口庫(kù).zip》資料免費(fèi)下載
    發(fā)表于 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>庫(kù)