最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

單片機(jī)到底是怎么跑程序的(1)

2023-08-10 23:58 作者:mymymind  | 我要投稿

????????學(xué)習(xí)了一段時(shí)間的單片機(jī),相信很多人和UP一樣都想知道一堆MOS管的單片機(jī)到底是如何跑程序的,這個(gè)系列專欄就來詳細(xì)說一下這個(gè)問題,最最重要的是多說人話,因?yàn)榫W(wǎng)上99.9%的所謂技術(shù)文章是個(gè)人復(fù)制粘貼都能寫,然而沒幾個(gè)人說人話,都是復(fù)制粘貼我憑什么要看你復(fù)制的,帶點(diǎn)腦子寫東西。

????????言歸正傳,從一開始的編譯環(huán)境安裝,工程的創(chuàng)建和編譯,以及最終通過仿真器或者軟件下載到單片機(jī),通過真真正正的點(diǎn)了一個(gè)燈,到逐漸慢慢理解main函數(shù)的語句,修改一下延時(shí)函數(shù)的參數(shù)大小讓燈閃的速度不一樣,之后再改一下IO連接,再學(xué)會(huì)按鍵輸入、串口printf,再到定時(shí)器閃燈、點(diǎn)1602和12864、PWM改改占空比,IO模擬IIC和SPI讀一下傳感器,基本上51學(xué)到這里就差不多了。之后就是學(xué)例程的方式寫一寫萬年歷跟各種測量顯示,因?yàn)槟菚r(shí)候的51也就有那些例程,實(shí)際上51也是能做不少東西的,讀個(gè)SD卡放音樂什么的都不是問題,我記得我51就學(xué)了半年最后做了個(gè)平衡車就不再學(xué)了,那時(shí)候新東西很多,還買了一個(gè)ArduinoUNO跟STM32F030F4P6和STM32F103C8T6小藍(lán)板。

????????初次學(xué)習(xí)STM32這種32位的MCU一開始很不習(xí)慣固件庫的方式,就是很多基本的操作比如讀取IO輸入輸出都需要調(diào)用一個(gè)函數(shù),而函數(shù)又需要調(diào)用大量的代碼,每一句代碼都涉及到好函數(shù)和很多變量或者宏,總之初次見就感覺太復(fù)雜太高深,難以理解,不就是一個(gè)IO翻轉(zhuǎn)的事情嘛,至于搞這么復(fù)雜嘛,確實(shí)是沒有51直接賦值和讀取簡單。

????????51基本上只要知道IO是怎么連的,并且順著那么大的DIP40封裝就能找到,學(xué)會(huì)抄著模擬IIC和SPI時(shí)序控制IO,學(xué)會(huì)抄各種IC的初始化和讀寫函數(shù),最后main函數(shù)調(diào)用就OK,所以學(xué)51的那么長時(shí)間我基本上沒有看過寄存器,甚至不知道寄存器怎么看,涉及到定時(shí)器和串口的初始化也有的抄或者直接STC-ISP軟件直接抄參考代碼。

????????因此后來學(xué)32的過程我也想著嘗試這種方法快速用起來,但是似乎不太一樣,51的寄存器基本上只需要一次性寫幾個(gè)寄存器就完成了配置,而對(duì)于32,任何一個(gè)外設(shè)甚至IO都需要配置一個(gè)結(jié)構(gòu)體的N多成員,每一個(gè)成員到底選啥也是看不大懂。51上做過平衡車,學(xué)32我甚至就用小藍(lán)板點(diǎn)了個(gè)燈學(xué)會(huì)下載就買了個(gè)32平衡車,記得那時(shí)候還很神奇為啥32非得是PA9和PA10下載,跟P3.0跟3.1不太一樣,然后還得先斷電把BOOT0接3.3再上電,下載完之后還得換回來。后來就買了個(gè)普中開發(fā)板,一鍵下載就是方便一點(diǎn)。買的平衡車跑得一直比較歪,就退貨了,然后我又用小藍(lán)板焊了一個(gè)跟平衡車一樣的電路,也做成了一個(gè)平衡車。

????????學(xué)32發(fā)現(xiàn)學(xué)的還是那些模塊,于是就開始研究32里比較好玩的一些程序,各種在屏幕上寫的小游戲,以至于到后來我自己寫了很多好玩的例程跟小游戲,但是我依舊沒有學(xué)過寄存器,連IO口的寄存器都沒有看過,只會(huì)寫邏輯和調(diào)用、修改,沒錯(cuò)我專業(yè)就是軟件。

????????很多人覺得我很厲害,只有我自己知道自己菜的一批,直到我開始自己設(shè)計(jì)硬件,自己學(xué)著抄電源和最小系統(tǒng)、連線。但是很多個(gè)照著抄或者拿別人板子改的板子都沒有做出來,就是閑著連線玩玩,還挺有意思的,原因老粉絲都知道了,那時(shí)候一個(gè)視覺大佬說我一個(gè)學(xué)軟件的怎么不會(huì)畫板子,正好也是看別人畫的板子難看得一批,就開始自己畫板子了,并且第一塊板子就做的32全面屏開發(fā)板,因?yàn)長QFP封裝我在寢室用黃花尖頭烙鐵就焊得很OK了。

????????熟悉51的思路就會(huì)有一種感覺,反正什么器件不都是IO驅(qū)動(dòng),隨便連就是了,所以相對(duì)抄的開發(fā)板,IO我改了一點(diǎn)點(diǎn),但是基本上是一樣的,然后還是一樣的思路跟著初始化驅(qū)動(dòng)學(xué)者改了適配自己的板子,對(duì)于點(diǎn)燈還是很OK的。

????????畫了三個(gè)月的板子,陸陸續(xù)續(xù)打板了好幾次,修改各種問題,最后終于算是跑起來了,還是很有成就感的。之后就趕上嘉立創(chuàng)5元打板每月2次,于是乎各種模塊我?guī)缀醵籍嬃艘槐?,?yàn)證了很多的電源、顯示、音頻、開發(fā)板方案,累計(jì)做了近百個(gè)不同的板子,80%都是沒做完或者沒完善的,剩下的基本上都開源了,抄得多了自然就比較熟悉如何設(shè)計(jì)一個(gè)具有什么功能的板子。

????????這時(shí)候最大的問題就是底層驅(qū)動(dòng)調(diào)試經(jīng)驗(yàn)的不足。于是后來又測試了各種外設(shè)的程序的現(xiàn)象,嘗試修改參數(shù)做對(duì)比,修改到不同的映射IO,大量的閱讀固件庫源碼,最后是能發(fā)現(xiàn),其實(shí)固件庫還是對(duì)定義在一個(gè)地址的寄存器寫上一個(gè)值,只不過通過這個(gè)復(fù)雜的初始化過程能讓我們給它一個(gè)我們能理解的參數(shù),也就是外設(shè)不同屬性的取值。

????????再到后來嘗試寫最怕的東西,定時(shí)器和ADC,以及寫一個(gè)同時(shí)擁有低功耗、USB Bootloader、文件系統(tǒng)、菜單UI、按鍵交互、不斷電RTC的實(shí)用程序。再到寫一個(gè)多段自由跳轉(zhuǎn)的Bootloader、基于SD卡的Bootloader、FreeRTOS程序等等。

????????接觸底層深入到一定程度,就會(huì)發(fā)現(xiàn)其魅力,以及從硬件、底層到應(yīng)用和上位機(jī)都能做的那種自由感。也不免會(huì)想問一個(gè)問題,學(xué)了這么久單片機(jī),誰都知道里面是個(gè)arm的M核,硬件上就是一堆MOS管,慢慢組成的CPU,是個(gè)人都這么告訴你。那么到底這一堆MOS是怎么跑程序的?(最重要的是講人話)

????????下期繼續(xù)講,這期做個(gè)鋪墊,拜拜

單片機(jī)到底是怎么跑程序的(1)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
垫江县| 饶河县| 延吉市| 那曲县| 甘泉县| 习水县| 隆昌县| 长乐市| 丰镇市| 卫辉市| 金川县| 郸城县| 简阳市| 鱼台县| 茶陵县| 汉寿县| 四川省| 深泽县| 迭部县| 县级市| 布尔津县| 梓潼县| 珲春市| 成武县| 富源县| 昆山市| 南昌县| 文成县| 清镇市| 五原县| 土默特右旗| 尼玛县| 兰西县| 南雄市| 长顺县| 陵水| 石台县| 柳江县| 公主岭市| 重庆市| 临西县|