1. 程式人生 > >UART模擬7816協議開發總結(終於成功啦,一掃陰霾!寫了一篇總結!!!!)

UART模擬7816協議開發總結(終於成功啦,一掃陰霾!寫了一篇總結!!!!)

從上週五到本週一完成了UART模擬7816協議的第一步開發,成功實現了利用MCBSTM32板卡讀寫智慧卡的軟硬體設計。期間遇到了一些困難和問題,有些是自己的粗心造成的,有些是因為對硬體不夠熟悉造成的。

   週五的初步硬體電路搭建完成的任務完成的比較一般,但遇到的問題也不少,當時寫了一個步驟,寫下了一些存在的問題見下:

步驟及成情況和問題記錄:

1 測試晶振在3.3V的情況下是否可以起振       

問題:能,但是有毛刺,大小沒有問題

2 檢視PNP的BJT的連線方法                     

問題:無,可以正常使用

3 焊接晶振                                   

問題:無,焊接完成

4 硬體電路檢測                               

問題:無,通過

5 測試ARM的輸出高低是否成功                

問題:火星,沒有發現居然要設定GPIO時鐘,不瞭解其內部結構啊!RCC_APB2PeriphClockCmd

6 測試輸出的TX是否可以滿足要求,利用示波器看 

問題:原理圖上USART居然畫了兩遍,其實在PB上,檢查出來或測試完畢,注意PB口的配置

7 測試與上位機的通訊是否成功                 

問題:無,成功

8 測試是否可收到ATR應答訊號                  

問題:收到了ATR的復位應答訊號:)

總結:

在硬體搭建中遇到的第一個問題是晶振輸出有毛刺,但是在後面的測試中證實這個對電路的可實現性沒有影響;

第二個問題是硬體電路檢測當時認為沒有問題,成為了這次開發中一次非常大的敗筆,其實在週一下午老餘過來之後的測試中發現我的VCC那端有虛焊現象出現,只是一根線引過去出現了問題,我沒有檢查出來(確切的說還是不認真所致),需要檢討一下;

第三個問題是沒有發現板卡必須開啟GPIO的時鐘才能對其進行正常操作導致一段時間的串列埠不能發出資料來,也就是呼叫其一個函式:RCC_APB2PeriphClockCmd 雖然不知道這個函式為什麼一定要加,但是這是實踐出來的正確道理。。。火星;

第四個問題是提供給我的板卡電路圖有問題而我沒有注意到,這個責任不全在我,注意下圖:

居然有兩個地方出現了USART3……最後參考DATASHEET上發現PC10和PC11根本就沒有可選功能,也就是說右上角紅圈那裡的參考圖是錯誤的。

週五下午收到了ATR應答訊號,但是不很穩定,原因在週六週日一直在尋找,其實原因就是VCC出現的那個虛焊,真丟人!

週六進行了一些其他的關於VC下開發清華同方那個讀卡器的程式設計,對串列埠知識有了進一步的瞭解,串列埠圖如下:

一定要注意這個圖是公頭檢視,母頭與其剛好境像(左右顛倒),因為這個錯誤的判斷了RTS和CTS訊號的位置。

通過WINDOWS提供的API函式可以實現對RTS訊號的置位清零和CTS訊號的監聽,可以通過MSDN中查到,同方的卡利用RTS訊號對卡進行復位,這個思路非常巧妙,經過我和順順的實際測試發現確實可以這樣進行使用(學了一招)!

週六週日其實進展基本上是零,不斷的在進行重複的測試工作,又缺乏必要的測試工具,很2。

週一早上來了之後發現了一個非常奇妙的現象,就是當我利用500歐的電阻上拉IO端的時候,周愛的那張卡可以正常使用;當我利用1k歐的電阻上拉IO端的時候,老餘那張藍色的卡可以使用,跟老關討論了半天覺得是功耗問題——也就是說沒張卡功耗不一樣,方案有可能不能用!。。。其實還是因為VCC沒有供上電有虛焊,鬱悶到不行了。

週一下午請老餘來檢查出了虛焊的問題,再上電之後發現讀任何一張卡返回ATR都非常穩定了,雖然覺得錯誤犯的很2,但是還是很爽。

然後和老關開始一起檢測串列埠的波形,一個ETU一個ETU的去檢查,去數,發現發出來的資料並不是我們所需要的,確切的說是錯誤的,如果不設定奇偶校驗位還可以,一旦設定了必然會出錯。後來分析發現問題是出在傳送的資料不對,而智慧卡檢查出來資料錯誤了之後會向這邊傳送一個報錯訊號(低電平),從而把訊號線拉低了。後來利用串列埠1去發出現相同的問題,上位機檢測出的資料都不正確了。。。後來查找出了最終原因是因為對晶片資料的生疏,注意下圖:

和下面這段話:

瞭解到當設定M=1時,是9位資料位,當M=0時,是8位資料位,而奇偶校驗位是出現在每次的最高位上,當我們設定M=0時會導致MSB變成奇偶校驗位,從而實際上只有7位資料位必然會出錯。因此還是要仔細看DATASHEET啊!設定完成USART_WordLength = USART_WordLength_9b;問題就都得到解決了!

完成的一刻感覺很爽,老天讓我遇到了最多的問題,其實是幫我熟悉這個東西……

另外學習到的一些知識:

一.串列埠的資料讀寫是反的,例如:

示波器上看到:0 11011100 1 1

資料為3B,起始位0  11011100  8資料位(反的) 1 偶校驗  1 停止位

二.卡上呼叫的是7816協議,有傳送資料等待,接收資料等待的功能,周愛的卡呼叫的是底層函式實現的功能,所以他的實現起來相對簡單。

三. 7816協議必須有奇偶校驗位,本智慧卡採用的是偶校驗(好象普遍都是),一定要注意串列埠的引數設定,不能設定成無校驗。

四.GPIO的模式選擇:

GPIO_Mode_AIN = 0x0,                        模擬輸入

 GPIO_Mode_IN_FLOATING = 0x04,              輸入懸空

 GPIO_Mode_IPD = 0x28,                        輸入下拉

 GPIO_Mode_IPU = 0x48,                        輸入上拉

 GPIO_Mode_Out_OD = 0x14,                    輸出OD門

 GPIO_Mode_Out_PP = 0x10,                     輸出推拉門

 GPIO_Mode_AF_OD = 0x1C,                     AF OD門

 GPIO_Mode_AF_PP = 0x18                       AF 推拉門

後兩個具體是什麼設定,沒有仔細去摳。。。

相關推薦

UART模擬7816協議開發總結終於成功陰霾總結

從上週五到本週一完成了UART模擬7816協議的第一步開發,成功實現了利用MCBSTM32板卡讀寫智慧卡的軟硬體設計。期間遇到了一些困難和問題,有些是自己的粗心造成的,有些是因為對硬體不夠熟悉造成的。    週五的初步硬體電路搭建完成的任務完成的比較一般,但遇到的問題也

大資料開發崗位面試經驗總結一線、二線獨角獸外企外國企業

為什麼想走? 跟很多人也許不同,我這裡並不是待遇問題,反而認為現在公司在網際網路公司中的待遇算一股清流了:額外家屬子女商業保險、總包17薪、出國團建、加班少、工作氛圍愉快,沒有所謂大公司政治鬥爭,這些對於我畢業第一份工作已經非常滿意。之所以決定離開,主要源於個人

ES6 常用功能總結箭頭函式、let/const、解構賦值、模板字串、Promise物件等

let關鍵字 作用:與var類似,用於宣告一個變數 與var不同:let所宣告的變數,在塊級作用域內有效,也就是隻在它所在的程式碼塊有效 { let a = 100; var b = 10; } console.log(a); //undefined

面向物件思想的個人總結不要噴我不是官宣

程式設計師:What When Where How Who Why; 架構師:What Why Where When Who How; 設計師:What Who Why How When Where。 面向物件What:        面向物件思想是相對於面向過程思想而

線段樹總結單點更新區間更新區間求和區間求最值

注:每個功能在程式碼中有註釋,具體詳解可自己輸出測試 #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 4000

計算機網路知識點總結第六版謝希仁

計算機網路知識點總結   1、三網:現如今最重要的三種網路  電信網路(電話網)   有線電視網路(電視網)   計算機網路(發展最快,資訊時代的核心技術,連通性,共享)1.1、 計算機網路的定義:是指將地理位置不同的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網路作業系統,網

ubuntu18.04 下bochs-2.6.7 安裝的總結試驗成功後搬運

先下載bochs,版本隨意⼀般最新版即可,我裝的是bochs-2.6.7,直接去官⽹的最下⾯找到下載區,點擊⼀個版本之後會跳轉到更詳細的下載⻚⾯,我們是linux系統所以選擇bochs-2.6.7.tar.gz這種的壓縮格式。下載完成後開始解壓,在Ubuntu下按 Ctrl+

C++結構體排序個人總結運算子重定義比較器

前幾天做藍橋杯題目有一題有用到結構體排序,剛開始使用比較器,然後sort()排序一下就可以,後來參考別人的程式碼發現還可以用運算子重定義,著實省事很多,省的再在結構體外面寫一個比較器的方法,所以現在總結一下: 第一種:結構體內重定義 (‘  <  ’符號),然後sor

1SQL語句總結個人複習使用持續更新

瞭解sql語句之前需要了解一下什麼是資料庫。 一、資料庫DATABASE 簡稱(DB) 通俗來說,資料庫就是用來儲存和管理資料的倉庫。   資料庫的特點就是: 1持久化儲存資料,也就是直接把資料儲存到了硬碟的檔案中。 2用資料庫的目的就是方便資料的儲存和管理。

機器學習之分類器——Matlab中各種分類器的使用總結隨機森林、支援向量機、K近鄰分類器、樸素貝葉斯等

      Matlab中常用的分類器有隨機森林分類器、支援向量機(SVM)、K近鄰分類器、樸素貝葉斯、整合學習方法和鑑別分析分類器等。各分類器的相關Matlab函式使用方法如下:首先對以下介紹中所用到的一些變數做統一的說明:    train_data——訓練樣本,矩陣的每

滴滴面試總結成也功利敗也功利

面試之前以為是實習崗,面試題會簡單一些,技術題會少一些,所以沒有準備太多,以至於面試完後的結果是差強人意,自我對結果感覺很不滿意;但是,這也是對我學習態度和方法的一次警鐘,點醒了我,在我以一點點小成就而驕傲的氣焰上著實澆了一把冷水。 以前的學習以考試、專案為主導,為了考試而學習、為了專案而學

批量查詢時出現的小問題 總結注意一下即可可繞路

業務需求: 前端傳入批量查詢的陣列引數,後端接收並處理(兩個小知識點隨記,注意一下即可,可繞路!!!) 過程再現: $(function(){ alert(); var arr = new Array(2); arr[0] = "1100456324"; ar

ubuntu13.04搭建安卓開發環境離線安裝SDK附下載地址

        最近要做一個android開發的專案,今天折騰了一天,終於在ubuntu系統上搭建好了android的開發環境。鑑於國內的網速太慢,加之有防火牆設定,線上安裝SDK實在是太慢了,下載速度幾乎為零,完全無法忍受,因此本人歷經千辛萬苦把SDK所需要的包都下載下來

Github使用總結新增ssh-key新建倉庫新增協作者

今天為了把專案掛到Github上並且和組員協作好,研究了下Github的使用方法,現在做個總結記錄下來。 Step 1: Check for SSH keys Have an existing keypair you'd like to use? You can

MacBook Air安裝Win7的經驗總結包括雙系統單系統WIN7

    用MAC自帶的BOOT CAMP很簡單。說明下工具,MACBOOK AIR,2G記憶體,128G硬碟,無光碟機,無網上說購機送的系統恢復U盤,手頭只有個聯想的win7系統本,一個8GU盤,一個行動硬碟。     實用工具裡找到Boot camp助手,發現根本沒有網上

Ubuntu16.04下手動配置pixhawk飛控--PX4韌體版本開發環境ROS+mavros版本超級完整

參考px4官網流程: 配置過程中網速一定要好!!!!一定要好!!!!最好翻牆!!!不然會出很多莫名其妙的bug的!!!!! --------------------------------------------------------------------

將eclipse java程式打包成jar的總結包括工程中沒有引用外部jar包和有引用外部jar包兩種情況

一.當eclispe java工程中沒有引用外部jar包時: 選中工程---->右鍵,Export...--->Java--->JAR file--->next-->填寫jar file的路徑及名稱-->next-->next-

卡特蘭數catalan數總結 卡特蘭大數、卡特蘭大數取模、卡特蘭數應用

本文講解卡特蘭數的各種遞推公式,以及卡特蘭數、卡特蘭大數、卡特蘭大數取模的程式碼實現,最後再順帶提一下卡特蘭數的幾個應用。 什麼是卡特蘭數呢?卡特蘭數無非是一組有著某種規律的序列。重要的是它的應用。

專案總結關於audio音訊標籤的使用和在angular4.0中使用過程中的一些坑

馬上又到月底了,又一波新的需求又要來臨了。所以趁此空隙把之前這一個月的心得和遇到的問題寫一下 因為專案中有一個資訊轉語音的功能,也就是把一篇文章轉化為語音播放。至於怎麼轉化,這個是由後臺這邊轉化好之後,傳送了一個url音訊地址給前端,由前端直接載入到audio