stm32 奇怪的位賦值問題 出錯了

2021-07-27 11:42:50 字數 611 閱讀 7607

1、在51微控制器裡 ,下面這兩種操作方法都是一樣的,沒有什麼問題!

(1) 、   out1_r1 是微控制器的乙個io口 , dat是傳進來的乙個資料

if ( (dat & 0x80) == 0)

out1_r1 = 0;

// 0是不亮,1是亮

else 

out1_r1 = 1;

(2)、

out1_r1 = (dat&0x8000);// stm32裡,這樣操作不行,因為stm32裡沒有bit ; 在51裡會自動把(dat&0x8000)強制轉化為bit 。

2、但是在編譯 stm32的keil 裡編譯上面的兩個程式,就發生了不同。

在stm32裡, (1) 是可以正常的往io裡輸入資料的,但是(2)卻不能!我猜測是stm32裡不支援位操作( 沒有bit )!才導致這種差異!

我在除錯led螢幕的時候,遇到了這個問題,我當時做夢都沒想到,這句話竟然有問題。

在此,強烈建議:遇到問題,多使用**器!(這種神器,也算是除錯必備了!   學生黨太窮了,之前自學stm32也沒捨得花錢買jlink**器!)

再次,感謝鄭老師指導!

本人能力有限,若描述有誤,請指出。

stm32的位操作

位繫結的區域 sram區 0x2000 0000 0x200f ffff 1mstm32的位帶操作簡單的說就是把乙個位址a的8個位,分別單獨的重新定義8個位址,操作乙個位址等同於操作乙個位,形象的理解即為取別名。sram 0x22000000 a 0x20000000 8 n 4 這裡的8表示8個位...

STM32 位帶應用

from cortex m3 支援了位操作後,可以使用普通的載入 儲存指令來對單一的位元進行讀寫。在 cm3 支援的位帶中,有兩個區中實現了位帶。其中乙個是 sram區的最低 1mb 範圍,0x20000000 0x200fffff sram 區中的最低 1mb 第二個則是片內外設區的最低 1mb範...

STM32資料位錯位問題研究

不久前,本人需要用多路stm32adc取樣,用dma傳輸,發現資料錯位問題,真的很惱火。有時候發現adc位錯一位的有,錯兩位的有,也有三位四位的,查查網上大神,一般都是說adc不能在連續轉換模式下工作就ok了,但是我程式的問題依舊。前幾天,不經意間發現,原來我程式的adc轉換是先早開於dma轉換的。...