怎麼看待今年出現了很多非專業但是需要干嵌入式或單片機工程的人

2022-05-12     大方老師單片機

原標題:怎麼看待今年出現了很多非專業但是需要干嵌入式或單片機工程的人

怎麼看待今年出現了很多非專業但是需要干嵌入式或單片機工程的人

///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比///

0.緒論

對於經過系統培訓的開發.單片機SoC的驅動開,不管是使用各種庫還是直接上寄存,都不成問.

可很多非專業但是需要干嵌入式或單片機工程的,比如機,車輛工,,或是其他的一些專.有時候這些學生需要搞比,做項,不可避免的要用到一些單片(由於種種原,現在幾乎都會首STM32).但是缺乏系統訓練的學生往往無法看懂寄存器版本的例,或是別人的開源項.自己寫的話更是不知道如何開.或者編譯完成後總是出現莫名的問.這給大家帶來了極大的困.

同時網際網路上大部分教程都是轉載來轉載,各種差異和版本都.很多人即使看過了也是一頭霧.所以應一個同學要,大概寫一下寄存器的一些操.

本教程將會使"學生用戶體量龐"STM32F1xx系列的單片機作為例.但是不必擔.所有的寄存器操作都是共通.並不會有本質的差.希望你能快速閱讀完並且理解,然後查閱自己需要的資.不管是什麼東西,這種方式都是通用.

嵌入式軟體開發具有一個比較龐大的知識體.限於作者的時間和水,本文不可能講太多東西.但是如果你只是因為不會寄存器開發而陷入瓶,那麼本文將會有較大幫助(畢竟這個是寫文章的目).

理解本文需要一些基,大概包: c/c++,一些數,計算機基礎知.大多數理工類專業都會有相關的課程.如果確實存疑可以即時搜.

讓我們先記住開發的正確方: 摘抄借,修改糅,以實現功能為目,以別人的代碼為基.

只要不涉及什麼智慧財產權的,這樣做是完全沒有問題.畢竟不需要把很多基礎性的東西寫來寫.所以請大膽的找開源項,儘可能在基礎上,而不是從零開.不廢話,開始正.

1.:,進位換算

數制也稱計數,是用一組固定的符號和統一的規則來表示數值的方法。任何一個數制都包含兩個基本要素:基數和位. [1]任何一個數字都能這樣表示

計算機常2.就是只10的數.1一般認為是高電平表true,邏輯真, 0一般是低電, false,邏輯假.

:在任意進位,不一定所有的有理數都可以使用有限位數的小數形式表.

比如十進位下0.1就是二進位的無限不循環小.上面那個例子也.

著名 IEEE754 float浮點數標準導致bug:在很多語言, 0.1+0.20.3

就是因0.1是二進位無限循環小數的原.但是存儲器位寬不能是無窮.所以產生捨入誤.

在瀏覽器中按F12進入開發者模,JavaScript下的浮點數精bug

所以在很多項目,為了實現當兩個值相等時觸發什麼函,往往不會直接寫相,而是兩者的差值小於多少時即生效

floata,b;........if(a==b){

//這種寫法不建議}........if(abs(a-b)0.00001){

//一般這麼寫}

二進位與/十六進位的轉換

剛才那個方法就可以直接.還有其他算法這裡不.先讓我貼一個表:

BIN

DEC

HEX

0000

0

0

0001

1

1

0010

2

2

0011

3

3

0100

4

4

0101

5

5

0110

6

6

0111

7

7

1000

8

8

1001

9

9

1010

10

A

1011

11

B

1100

12

C

1101

13

D

1110

14

E

1111

15

F

BIN是二進, DEC是十進, HEX是十六進.都是英語簡.

十六進位和二進位可以直接換.方法是每四位二進位看作一個十六進位

比如

0110 1101 1011 1001

6 D B 9

轉換表背過的話讀代碼快.因為一般情況,為了讓一行代碼看的不至於太,人們會用十六進位代表二進.尤其是對於擁32cortex-M3內核STM32F1系列單片,一次寫一個三十二位數屬實太冗.

c/c++,默認寫的數字都是十進.二進位應該0b,0b00101100,而十六進位0x,0x3C.

//一般這麼寫GPIOB->CRL&=0x00440000;//這麼寫就不太美觀了GPIOB->CRL&=0b00000000010001000000000000000000;

數學差不多.開始正.

2. c/c++語言基礎

a+b; //加法

a-b; //減法

a*b; //乘法

a/b; //,所有計算需要注意整()和浮點()的運算區.如有疑問自行搜索

a%b; //.就是小學學的余. 14÷4=3 ... 2 14mod4=2, 14/4=3. float(14)/4=3.5f

a</.a看為二進位,整個向左移b. 00000110< 00011000.當溢出的時候會發生什麼?

a>>b; //.和上面一樣的功.

a&b; //按位求(AND), 11010010

// & 01010011

// ------------

// 01010010

a|b; //按位取(OR)

~a; //按位取(NOT)

!a; //邏輯(注意和上面的區)

c+=a; //相當 c=c+a;其他算符同.

重點看左右移和位操(,,).

3.我們配寄存(register)到底是在配置什麼

,你的最終目的都是使用單片機GPIO(general pin input & output)/輸出一個高電平還是低電.不管是諸I2C, SPI的通,還是按鍵讀,亮燈報,說到底都是高低電平的控制或探.

ADC輸入的是模(Analog),但是會被轉化為數(Digital),一樣是高低電.這裡暫且不談

,,或者一些功能的使能及配置一樣是通過寄存器.原理相.畢竟晶片集成電路也是電,而且是數字電.暫時不深.

,為了讓某一Pin輸出電,或者使能一個通,我們可以01.

但是代碼終歸是代,不是魔.為了使需求生,單片機將每一個需要控制的,賦予一個地址.在電路層面上實現相關的功能綁.用戶只需通過給這個地址去寫一個,就相當於控制了需要控制的東西.易於計,我們32位處理器最大可以尋4GB的內存空.

庫函數和寄存器可以混著用?

當然可.本身使用庫函數的項目里可以直接引入寄存器的代.因為庫函數本身也用到了寄存.但是寄存器要使用庫函,需要先將庫函數導入到工程才(編譯鏈makefile文件).當然都可以混著.

7.這些沒問題,但是那OD開漏輸,推輓輸,浮空輸,上拉輸,都是什麼意......

文章來源: https://twgreatdaily.com/zh-cn/7760f81fd84e6689cd21d9e33e68965a.html