1. 程式人生 > >STM32 內設驅動最佳實現方式(系列)-前言

STM32 內設驅動最佳實現方式(系列)-前言

/**

******************************************************************************

* @author    Maoxiao Hu

* @version   V1.0.0

* @date       May-2015

******************************************************************************

* < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY >

******************************************************************************

**/

      STM32可以說是一款使用非常廣泛的晶片了,學電子的不會不知道這個,從大學就開始學然後工作後有可能還會用到。然而通過這麼多年的學習我發現了幾個問題:

1、很多學生、工程師對晶片內部結構不熟悉,導致除錯程式碼過程中出了bug不知到去看哪個地方。

2、對於一個晶片內部模組(例如USART),它的驅動書寫方式有多種,有阻塞、非阻塞、中斷、DMA、DMA+中斷方式,大量的時間耗費在了除錯前四種(非最佳)實現方式上了。

3、淘寶上的開發板有做的不錯的,但是即使這樣,提供的例程程式碼都是一些最基礎的零散片段,學生學習尚可,然而幾乎不能使用在實際專案中。

3、非最佳實現方式可能在某些要求不高的專案上也沒問題,但是如果要上作業系統,或者在時間要求嚴格、中斷非常多且頻繁的場合就沒法用了,除錯這些程式碼費事費力而且全是各種坑。

4、最佳實現方式雖然實現麻煩,但是使用範圍極其廣,不客氣的說,掌握了這些最佳實現方式之後,可以搞定幾乎一切驅動方面的問題,使用五年、十年都不會被淘汰。

5、當對模組的最佳實現方式理解並且掌握之後,可以把大量的時間放在系統整體架構、後期的資料處理、演算法等方面。

      在一個使用STM32(或者類似晶片)的專案中,往往60%的時間被浪費在了debug內部模組的過程中,例如:一個專案用I2C阻塞讀狀態的方式讀取資料,花了一個星期除錯完成了,當加入了另一個模組(假設這個模組需要CPU頻繁的響應其中斷),那麼問題就來了,I2C的這種阻塞讀狀態的方式完全不能適用於中斷如此頻繁的場合,I2C一定會卡住,只是時間問題。所以需要再次推導重寫程式碼,一個星期又過去了,然後這種狀態不斷重複……半年過去了項仍然沒有完成,而此時程式碼已經被改的不成樣子了,後期資料處理還沒有做、產品功能也不敢大量新增、演算法還沒有研究……緊接著是大量加班,專案還有可能因為預算問題導致失敗。

      在這裡,如果是大公司的話可以無視我說的話,因為大公司有嚴格的程式架構,在這裡我想幫助的是學生、某些小型的新硬體創業公司,因為這些人群可能很難承受時間、金錢上的損失。本來可以用搭積木的方式寫程式碼,為什麼不呢?

      所以,本人打算相繼更新一些STM32的內部模組最佳實現方式,把debug內部模組的時間減少到整個專案的10%以下,這樣可以大家把更多的精力放到產品功能、與家人一起享受生活、讀書上,程式設計師的生活本來就該如此輕鬆!

相關推薦

STM32 內設驅動最佳實現方式系列-前言

/** ****************************************************************************** * @author    Maoxiao Hu * @version   V1.0.0 * @date       May-2015

UEFI中EHCI驅動實現框架

urb link cnblogs 異步傳輸 tro insert 傳輸 frame struct 本文從數據結構的角度看一下EHCI的初始化: 下圖是EHCI驅動中涉及的主要數據結構的關系圖: 1.Struct USB2_HC_DEV是Host controller的核心

關於redis分布式鎖的實現方式轉載

iss tree red org 實現 方式 分布式 uda master 這個是在網上找到的一個大神寫的(http://wudashan.cn/2017/10/23/Redis-Distributed-Lock-Implement/),對於分布式redis部署的,可以參考

RxJS的另外四種實現方式——性能最高的庫

如何 www table fas set export llb const events 接上篇 RxJS的另外四種實現方式(二)——代碼最小的庫(續) 代碼最小的庫rx4rx-lite雖然在性能測試中超過了callbag,但和most庫較量的時候卻落敗了,於是我下載了

RxJS的另外四種實現方式——效能最高的庫

程式碼最小的庫rx4rx-lite雖然在效能測試中超過了callbag,但和most庫較量的時候卻落敗了,於是我下載了most庫,要解開most庫效能高的原因。 我們先上一組測試資料,這是在我的windows10 上面跑的 dataflow for 10000

RxJS的另外四種實現方式——使用Stream類實現

該實現方式與之前幾種不同的,該實現方式僅針對Nodejs環境。在Nodejs環境中,提供了Stream類,包括Readable、Transform、Writeable等子類都是可擴充套件的。從字面上看,正好對應Rx中的生產者、傳遞者、消費者。 實現該庫的起因是

限界分支法實際上沒有剪枝,介紹的是廣度優先搜尋:01揹包問題,佇列實現方式FIFO

限界分支法:佇列實現方式 前面已經介紹過限界分支法大部分是基於廣度優先搜尋,廣度優先搜尋一般藉助於佇列實現,剪枝的情況可以藉助於優先順序佇列。 實現如下: #%% class FIFO_01_Pack: def __init__(self,N,V,C,W):

自定義的可拖動滑塊驗證碼的實現方式SlideView

概述: 最近專案中需要在密碼輸入一定次數後盡心拖動滑塊進行驗證,防止惡意程式程式碼一直測試登入,用了GitHub的一個開源庫SlideView,但是直接依賴原始碼是改不了樣式的,下邊給出自定

JAVA處理Excel的三種實現方式

awm96 2012-05-15 13:49 createExcel(excel6); //modifyExcel(excel2); } static void readExcel(String filePath) throws Exception{ //HSSFWorkb

Android-動態載入外掛化的兩種實現方式:介面

上一篇部落格中http://blog.csdn.net/lxping51/article/details/71480239,主要通過反射的方式來實現動態載入外掛化,今天我們以介面的方式來達到目的。介面的實現比反射更為簡單,而且直接呼叫對效能有很大的提高。但是這也

Unity中UGUI人物血條跟隨的幾種實現方式

昨天在群裡有人在做遊戲的時候遇到了一個坑,就是用UGUI做人物血條跟隨遇到了大坑,今天就來說說如何用UGUI來做人物血條跟隨。 第一種: 把Canvas畫布作為Player的子物體。 首先:佈置一下場

【零基礎教學】Unet區域網聯機的實現——最基礎的Unity聯網實現方式1

第一部分——Lobby場景的搭建 學習前說明: 專案原始碼:連結:https://pan.baidu.com/s/1g78L9QODXdRjoVcm-odRSg 密碼:0pzo 原始碼引用自Siki老師的Unet基礎系列教程,文章主要以解釋為主,後期會新增一些Si

圖片輪播的兩種實現方式

專案中用到的第一種方法,學習借鑑了https://github.com/qingse/ImageSlideshow 自定義ImageSlideshow,繼承自FrameLayout,在構造方法中,初始化資料: public ImageSlideshow(Context c

經典面試題golang實現方式

以下所有題目的關鍵資訊都會用【】括起來,我們不對題目進行分析,只給出題目的解決方案;如有疑問請不吝賜教。 題目: 請實現一個演算法,確定一個字串的所有字元【是否全都不同】。這裡我們要求【不允許使用額

二分查詢的兩種實現方式JAVA

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功

對於STM32使用FSMC驅動傳統8080並口器件方式TFT的理解

對於非同步突發的訪問方式,要設定3個時間引數,分別是地址建立時間(ADDSET),資料建立時間(DATAST)和地址保持時間(ADDHLD)。ST提供了4種不同的非同步時序模型,在實際擴充套件中,根據要驅動的外設的特徵確定時序模型,從而確定各時間引數與儲存器讀/寫週期引數指

JS實現繼承的幾種方式

多繼承 logs 影響 .cn sta 初始化 定義 附錄 style 轉自:幻天芒的博客 前言 JS作為面向對象的弱類型語言,繼承也是其非常強大的特性之一。那麽如何在JS中實現繼承呢?讓我們拭目以待。 JS繼承的實現方式 既然要實現繼承,那麽首先我們得有一個父類,

java實現同步的幾種方式總結

副本 增刪改 否則 都是 fin ret 語義 value art 為何要使用同步? java允許多線程並發控制,當多個線程同時操作一個可共享的資源變量時(如數據的增刪改查), 將會導致數據不準確,相互之間產生沖突,因此加入同步鎖以避免在該線程沒有完成操

Nginx反向代理實現會話session保持的兩種方式

upstream 適用於 反向代理 ip_hash 負載 amp 丟失 tail 基於 http://blog.csdn.net/gaoqiao1988/article/details/53390352 一、ip_hash: ip_hash使用源地址哈希算法,將同一客戶

JS - OOP-繼承的最佳實現方式

not -type 方法 bsp 支持 分享圖片 bject 最好 type 如上圖,使用第三種方式實現繼承最好,也就是加了下劃線的。 但是Object.create方法是ES6才支持的,所以,右邊就寫了一個實現其同樣功能的函數。 JS - OOP-繼承的最佳實現方