
發(fā)布
注冊
/
登錄單片機程序的案例
單片機程序又跑飛?! 三種跑飛現象分析
在編寫單片機程序的時候,由于中斷服務程序寫的不好,導致單片機程序總是跑飛,最后費了好長時間,花了很大功夫才找到問題原因,由此總結了單片機程序跑飛的三種現象、原因及解決方法。
0
1
數組越界/溢出
現象:
單片機程序在函數中運行時,總是在運行到函數末尾,要跳出函數時,程序跑飛。
原因:
數組越界(數組溢出),函數中定義的數組元素的個數小于程序中實際使用的數組元素的個數,例如在函數中定義了一個數組ucDataBuff[10],這個數組只有10個元素,但是在函數中卻有這樣的語句ucDataBuff[10]=0x1a,這個語句是給數組的第11個元素賦值,:由于定義的數組只有10個元素,從而導致賦值語句中不知道把0x1a放到什么地方,從而導致程序跑飛。
解決方法:
如果在調試程序時,發(fā)現程序總是在函數執(zhí)行完畢時跑飛,多數情況是發(fā)生了數組越界(數組溢出)的錯誤,仔細檢查函數中調用的數組是否存在越界(溢出)的情況。
0
2
中斷服務程序缺失
現象:
程序運行過程中總是跑飛。
原因:
程序中打開了某個中斷,但是卻沒有相應的中斷服務程序,從而導致在中斷發(fā)生后,找不到中斷服務程序入口,從而導致程序跑飛。
展開 如何獲取單片機程序運行時間?
單片機編程者需要知道自己的程序需要花費多長時間、while周期是多少、delay延時是否真如函數功能描述那樣精確延時。
測試代碼的運行時間的兩種方法
使用單片機內部定時器,在待測程序段的開始啟動定時器,在待測程序段的結尾關閉定時器。為了測量的準確性,要進行多次測量,并進行平均取值。
借助示波器的方法是:在待測程序段的開始階段使單片機的一個GPIO輸出高電平,在待測程序段的結尾階段再令這個GPIO輸出低電平。用示波器通過檢查高電平的時間長度,就知道了這段代碼的運行時間。顯然,借助于示波器的方法更為簡便。
以下內容為這兩種方案的實例,以STM32為測試平臺。如果讀者是在另外的硬件平臺上測試,實際也不難,思路都是一樣的,自己可以編寫對應的測試代碼。
展開 單片機固件又被人破解怎么辦?
01
什么是單片機解密?
單片機(MCU)一般都有內部程序區(qū)和數據區(qū)(或者其一)供用戶存放程序和工作數據(或者其一)。為了防止未經授訪問或拷貝單片機的機內程序,大部分單片機都帶有加密鎖定位或者加密字節(jié),以保護片內程序。
如果在編程時加密鎖定位被使能(鎖定),就無法用普通編程器直接讀取單片機內的程序,這就叫單片機加密。
(PS:單片機程序基本上都存在于Flash中,大部分能夠讀取或者識別Flash上的數據就能夠獲得Firmware文件,從而給復制產品帶來了機會)
單片機攻擊者借助專用設備或者自制設備,利用單片機芯片設計上的漏洞或軟件缺陷,通過多種技術手段,就可以從芯片中提取關鍵信息,獲取單片機內程序這就叫單片機解密。
單片機解密又叫單片機破解、芯片解密、IC解密,但是嚴格說來這幾種稱呼都不科學,但已經成了習慣叫法,我們把CPLD解密、DSP解密都習慣稱為單片機解密。單片機只是能裝載程序芯片的其中一個類。
能燒錄程序并能加密的芯片還有 DSP、CPLD、PLD、AVR、ARM等。當然具有存儲功能的存儲器芯片也能加密,比如DS2401、DS2501、AT88S0104、DM2602、AT88SC0104D等,當中也有專門設計有加密算法用于專業(yè)加密的芯片或設計驗證廠家代碼工作等功能芯片,該類芯片也能實現防止電子產品復制的目的。
展開 單片機固件又被人破解怎么辦?
01
什么是單片機解密?
單片機(MCU)一般都有內部程序區(qū)和數據區(qū)(或者其一)供用戶存放程序和工作數據(或者其一)。為了防止未經授訪問或拷貝單片機的機內程序,大部分單片機都帶有加密鎖定位或者加密字節(jié),以保護片內程序。
如果在編程時加密鎖定位被使能(鎖定),就無法用普通編程器直接讀取單片機內的程序,這就叫單片機加密。
(PS:單片機程序基本上都存在于Flash中,大部分能夠讀取或者識別Flash上的數據就能夠獲得Firmware文件,從而給復制產品帶來了機會)
單片機攻擊者借助專用設備或者自制設備,利用單片機芯片設計上的漏洞或軟件缺陷,通過多種技術手段,就可以從芯片中提取關鍵信息,獲取單片機內程序這就叫單片機解密。
單片機解密又叫單片機破解、芯片解密、IC解密,但是嚴格說來這幾種稱呼都不科學,但已經成了習慣叫法,我們把CPLD解密、DSP解密都習慣稱為單片機解密。單片機只是能裝載程序芯片的其中一個類。
能燒錄程序并能加密的芯片還有 DSP、CPLD、PLD、AVR、ARM等。當然具有存儲功能的存儲器芯片也能加密,比如DS2401、DS2501、AT88S0104、DM2602、AT88SC0104D等,當中也有專門設計有加密算法用于專業(yè)加密的芯片或設計驗證廠家代碼工作等功能芯片,該類芯片也能實現防止電子產品復制的目的。
展開 
單片機固件又被人破解了~~
01
什么是單片機解密?
單片機(MCU)一般都有內部程序區(qū)和數據區(qū)(或者其一)供用戶存放程序和工作數據(或者其一)。為了防止未經授訪問或拷貝單片機的機內程序,大部分單片機都帶有加密鎖定位或者加密字節(jié),以保護片內程序。
如果在編程時加密鎖定位被使能(鎖定),就無法用普通編程器直接讀取單片機內的程序,這就叫單片機加密。
(PS:單片機程序基本上都存在于Flash中,大部分能夠讀取或者識別Flash上的數據就能夠獲得Firmware文件,從而給復制產品帶來了機會)
單片機攻擊者借助專用設備或者自制設備,利用單片機芯片設計上的漏洞或軟件缺陷,通過多種技術手段,就可以從芯片中提取關鍵信息,獲取單片機內程序這就叫單片機解密。
單片機解密又叫單片機破解、芯片解密、IC解密,但是嚴格說來這幾種稱呼都不科學,但已經成了習慣叫法,我們把CPLD解密、DSP解密都習慣稱為單片機解密。單片機只是能裝載程序芯片的其中一個類。
能燒錄程序并能加密的芯片還有 DSP、CPLD、PLD、AVR、ARM等。
展開 單片機程序 | 如何用一個按鍵實現單擊\雙擊\長按?
本文提供了一個按鍵實現【單擊\雙擊\長按】的單片機demo程序。
芯片采用新唐的N76E003,但理論上可以改成其它MCU。
一文讀懂單片機里的“中斷”優(yōu)先級
比如我們設置了 PT0位為 1 后,當單片機在主循環(huán)或者任何其它中斷程序中執(zhí)行時,一旦定時器 T0 發(fā)生中斷,作為更高的優(yōu)先級,程序馬上就會跑到 T0 的中斷程序中來執(zhí)行。
反過來,當單片機正在 T0中斷程序中執(zhí)行時,如果有其它中斷發(fā)生了,還是會繼續(xù)執(zhí)行 T0 中斷程序,直到把 T0 中的中斷程序執(zhí)行完畢以后,才會去執(zhí)行其它中斷程序。
“
當進入低優(yōu)先級中斷中執(zhí)行時,如又發(fā)生了高優(yōu)先級的中斷,則立刻進入高優(yōu)先級中斷執(zhí)行,處理完高優(yōu)先級級中斷后,再返回處理低優(yōu)先級中斷,這個過程就叫做中斷嵌套,也稱為搶占。
”
所以搶占優(yōu)先級的概念就是,優(yōu)先級高的中斷可以打斷優(yōu)先級低的中斷的執(zhí)行,從而形成嵌套。當然反過來,優(yōu)先級低的中斷是不能打斷優(yōu)先級高的中斷的。
表3:中斷查詢序列
那么既然有搶占優(yōu)先級,自然就也有非搶占優(yōu)先級了,也稱為固有優(yōu)先級。在表3中的最后一列給出的就是固有優(yōu)先級,請注意,在中斷優(yōu)先級的編號中,一般都是數字越小優(yōu)先級越高。
展開 干貨分享 | 超詳細的單片機科普!
對于初學者或初次使用此款MCU的設計者來說,可能會遇到很多對MCU的功能描述不明確的地方,對于此類問題,可以通過兩種方法來解決,一種是編寫特別的驗證程序來理解資料所述的功能;另一種則可以暫時忽略,單片機程序設計中則按照自己目前的理解來編寫,留到調試時去修改和完善。前一種方法適用于時間較寬松的項目和初學者,而后一種方法則適合于具有一定單片機開發(fā)經驗的人或項目進度較緊迫的情況。
指令系統(tǒng)千萬不要特別花時間去理解。指令系統(tǒng)只是一種邏輯描述的符號,只有在編程時根據自己的邏輯和程序的邏輯要求來查看相關的指令即可,而且隨著編程的進行,對指令系統(tǒng)也會越來越熟練,甚至可以不自覺地記憶下來。
05
單片機的程序編寫
MCU的程序的編寫與PC下的程序的編寫存在很大的區(qū)別,雖然現在基于C的MCU開發(fā)工具越來越流行,但對于一個高效的程序代碼和喜歡使用匯編的設計者來講,匯編語言仍然是最簡潔、最有效的編程語言。
展開 如何學習單片機
其實就是在上面的操作上做一些改進.做這個實驗是為了熟悉一下單片機的io口操作.另外,可以給自己一個感性上的認識,到底單片機執(zhí)行程序的速度有多快.
2.行列鍵盤. 這是使用單片機做為輸入用的一個典型程序.雖然有很多通用的鍵盤掃描程序,但如果自己能設計出一個完美的程序來,則說明自己具有了一定的編程功底.
3.秒表. 這個是利用單片機定時器的一個實驗.做這個實驗是為了熟悉單片機的內部功能單元以及單片機的寄存器.
4.串口通訊. 這個是一個擴展的實驗,用這個實驗可以完成單片機和電腦通訊的操作,很值得練一練.同時,也能反映出你搭建的平臺是否夠穩(wěn)定.
做完上面的實驗后,自己就會具有一定的開發(fā)能力了.接下來根據的實際做些小東西,多練練就好了
七、如何學好單片機
也許,學單片機學久后,就會發(fā)現,自己有很長一段時間沒有任何長進了,甚至發(fā)現自己好象已經無法提高了,好象碰到什么問題拿單片機都能解決,但實際做的時候卻有做不出來。如果碰到這樣的情況,你就要稍微注意了。你需要提高自己了。
單片機是一門很廣的學問,用佛教的一句話就是“ 至簡至深 ”。 單片機很簡單,總共才40個引腳,程序也好寫。但單片機也很復雜,通過單片機可以做無限的擴展。現代的任何一種微處理器,都會有51單片機的思路。
想學好單片機,我覺得至少要做到以下幾點
1、養(yǎng)成一個好的心態(tài)。解決了難題不要驕傲,遇到困難不能放棄;不去求人要程序,也不要自己炫耀自己的技術,等等
2、多看書,多動手。 書要廣泛的看,不要只看和單片機相關的書,而是和電子相關的書都要看,比如c++ ,vc,vb,TCPIP, Internet, 數據結構,模擬電路,數字電路,english 等等。。因為這些東西都是和你所學的東西相關的,看的書越多,你解決問題的思路就會越廣。
展開 實例講解單片機模擬量采集: 從硬件到程序, 從濾波到實際值轉換
來源 | 頭條號
作者 | 電鹵藥丸
在單片機系統(tǒng)里對模擬量的處理要比數字量稍顯復雜,但是只要掌握了使用技巧,使用起來也很簡單,很多朋友一開始比較糾結于單片機的底層語言,非要先弄個明白才罷休,其實大可不必,重要的是我們要先學會怎么應用。
現以鉛酸電池電壓檢測及充電電流檢測為例講解模擬量的硬件和程序的設計。
如圖1為28節(jié)鉛酸電池的電壓檢測電路,1--14節(jié)組成電池組1,15--28節(jié)組成電池組2;第1節(jié)正極為BAT+,14與15節(jié)之間為BATM,第28節(jié)負極為BAT-。輸入端的8個二極管的作用是鉗位作用;電路計算如圖所示。
圖1 電池組電壓檢測電路
如圖2為鉛酸電池的充電電流檢測電路,TA1為工頻電流互感器,輸入的4個二極管為整流二極管,電流流過R37(510Ω)形成壓差△V。電路計算如圖所示。
圖2 電池組充電電流檢測電路
如圖3為單片機STM32F103CBT6,圖1和圖2的模擬信號輸入至單片機的PA5、PA6、PA7。
圖3 STM32F103CBT6單片機
由于代碼較多,為便于瀏覽,我就把其中一部分以截圖的形式展示,敬請諒解。
如圖4為單片機adc.c文件的底層配置,把PA5、PA6、PA7端口配置成模擬輸入模式。
圖4 配置端口模式
如圖5對以上三個模擬量進行模數轉換并緩存入數組ADC_ConvertedValue[3],得到的AD值的范圍是0~4096。
圖5 模數轉換并緩存
如圖6把以上兩個配置函數整合在一起,定義成模擬量的初始化函數void ADC1_Init(void)。
展開 基于51單片機的風速測量儀設計
因此整個系統(tǒng)的軟件程序分為系統(tǒng)初始化子程序模塊、ADC 轉換子程序模塊、液晶顯示控制模塊,整個系統(tǒng)上電之后,單片機先調用初始化函數,完成對液晶屏和 ADC0832 的硬件初始化,讓液晶顯示器顯示出相應數據,初始化完畢后,控制 ADC0832 完成 ADC 轉換并計算出速度,并對風速進行分級,傳送數據到 LCD1602 顯示出來,主程序流程見圖 5。
圖5 主程序流程圖
3.系統(tǒng)調試
系統(tǒng)組裝完畢后,需要對軟硬件的各項功能進行調試。先進行硬件調試,硬件調試完畢后再進行軟件調試。
3.1 硬件測試
首先分別對各電路模塊做功能性驗證,第一步是進行單片機最小系統(tǒng)的功能調試,硬件焊接完成之后,通過下載一個 LCD1602 的初始化顯示程序到單片機中觀察液晶顯示器是否正常顯示字符。燒錄程序后能夠正常顯示字符,說明單片機最小系統(tǒng)及液晶顯示模塊能夠正常運行。隨后測量三杯風速傳感器的信號輸出,通過測試,傳感器能正常輸出 0~+5 V 模擬信號。之后測試 ADC0832 的功能,ADC0832 功能測試是利用一個電位器產生模擬量輸入,把 ADC0832 的驅動程序燒錄進去,能夠正常讀取電壓值,再將傳感器輸出信號作為ADC083 的輸入,綜合測試能夠采集風速傳感器的電壓值并通過液晶顯示出來。因此整個硬件測試基本通過,圖 6 是整個硬件系統(tǒng)組裝完成的電路實物圖。
圖6 硬件成品圖
3.2 軟件調試
因為系統(tǒng)不涉及到精確的時序控制,且無需實現比較復雜的數學運算,所以使用 C 語言編寫程序,開發(fā)環(huán)境采用 Keil。
展開 
單片機畢業(yè)設計、單片機課程設計-820套,等你來獲取! ¥88.8
單片機畢業(yè)設計、單片機課程設計-820套,幫你輕松搞定畢業(yè)設計、課程設計。(設計論文+原理圖+開題報告+文獻翻譯,均可編輯)是學習參考的優(yōu)秀模板!!!。資料全部適用于單片機學習,單片機畢業(yè)設計及課程設計,事半功倍。購買后即可獲取下載鏈接。
具體查找、搜索設計的名稱目錄可查看【騰訊文檔】
https://docs.qq.com/sheet/DTmFhRHpTQWhlc1hk。
一共820套,很多,很全,還很好,大家看看目錄吧,不可多得的資料!
因篇幅原因,只選取820套中幾個設計題目文件夾的內容進行展示如下。均是論文,原理圖,開題報告樣樣齊全啊!因為網站原因,照片上傳后稍微有點糊,請大家不要介意,資料都是很好的資料:
展開 學習STM32單片機,繞不開的串口
剛開始學單片機的你,是不是會因用程序把LED點亮而感到高興,會因用程序把數碼管點亮而感到高興。這是好事,這也是想繼續(xù)學習下去的動力。
但是數據相關的實驗是學習單片機和STM32的一道坎,此時就需要用好本文要說的串口這個調試工具。
串口通信介紹
關于串口通信的介紹,也可以點擊閱讀之前發(fā)的一篇文章。
??STM32串口通信基本原理
串口通信是指外設和計算機間,通過數據信號線 、地線、控制線等,按位進行傳輸數據的一種通訊方式......這種太過理論了,看似懂了,但又不懂。還是用我筆者自己的話來說吧。
串口通信就是可以把程序在單片機或者STM32芯片中運行的結果發(fā)送到電腦的一種通信方式。
如何使用串口通訊,你需要知道的幾個重要的知識點:
波特率,數據傳輸的速度,如上圖設置為9600,那么程序中也要設置為9600
硬件連接,接收、發(fā)送交叉連接,如上圖TxD->RxD,RxD->TxD
停止位
奇偶校驗
硬件數據流
其中,后3項一般不需要改變。
學會串口通信能做什么
學過C語言的人都知道,程序開發(fā)需要不斷調試不斷驗證。很多的語言編程軟件都有很完整的程序調試功能。使用起來很方便。而我們的開發(fā)雖然也是用C語言,但我們的程序最終運行的環(huán)境不是在我們的開平臺而是在真正的硬件系統(tǒng)中運行。這時想要查看程序的運行過程或者結果就不像編程軟件那么方便了。
展開 【4月16日項目懸賞】
【單號6126】
預算范圍:800
使用軟件: keil uVision
需求描述:我有一個單傳感器采集數據上云的STM32單片機程序,現在需要加一個傳感器,實現兩個傳感器采集兩種數據傳輸到云的STM32程序,
立即搶單
【單號6149】
預算范圍:200-500
使用軟件:Ansys workbench
需求描述:技術要求 1. 硅膠空腔內填充液體(類似注滿水的氣球,只是壁厚較大),然后外部施加壓力仿真應力應變。因為腔體內的液體是靜止的而非流體,所以應該不需要固液耦合分析(FSI),目前不知道如何在靜態(tài)力學分析里定義液體材料 2. 在上一步仿真的基礎上,將形變后的模型參數導入Maxwell3D中進行靜電場分析。 希望大神能提供技術咨詢。如果只能做到第一步也請聯系我,謝謝
立即搶單
【單號6166】
預算范圍:500-1000
使用軟件:ANSYS
需求描述:幫忙寫一個型鋼再生混凝土粘結滑移的命令流
立即搶單
【單號6171】
預算范圍:2000
使用軟件:CFX或者FLUENT
需求描述:模擬一個天然氣管道泄露,在ANSYS中做雙向流固耦合,最后吧兩個監(jiān)測點的數據輸出,轉換為振動頻率圖。兩種泄露孔,一種是圓孔,一種是矩形孔,各做一個壓力工況下的!
展開 【4月2日項目懸賞】
立即搶單
【單號6060】
預算范圍:500
使用軟件:ANSYS
需求描述:體外預應力纖維網加固混凝土梁, 模擬預應力損失數值 1,張拉過程損失 2,松弛損失 3,混凝土收縮徐變損失
立即搶單
【單號6073】
預算范圍:500
使用軟件:Abaqus
需求描述:abaqus隧道三臺階法開挖,模擬結果鋼架、錨桿應力過大,求解答怎么修改
立即搶單
【單號6126】
預算范圍:800
使用軟件:keil uVision
需求描述:我有一個單傳感器采集數據上云的STM32單片機程序,現在需要加一個傳感器,實現兩個傳感器采集兩種數據傳輸到云的STM32程序,
立即搶單
【單號6132】
預算范圍:500-1000
使用軟件:ANSYS Workbench平臺中Transient Structural結構分析模塊和CFX流體分析模塊
需求描述:對輸送天然氣的管道進行雙向流固耦合瞬態(tài)響應分析,研究在內部天然氣不同流速、不同壓力穩(wěn)態(tài)流動下和天然氣脈動流動作用下管道結構的位移響應,速度響應、加速度響應,需要輸出管道結構上指定監(jiān)測點的上述相關數據。
立即搶單
下載“技術鄰”APP,或點擊鏈接查看所有派單: http://www.yqgqt.org.cn/requirement/more
注:目前手機不支持搶單,如需搶單請用電腦瀏覽器打開該網址,或打開技術鄰首頁,在首頁右側點擊“懸賞”進行搶單。
客服微信:jishulink999
展開