天天看點

STM32F030 Nucleo-開發調試的經驗USART的重要性(一)

作者:嵌入式小美老師

先聲明一點,我自己不是高手,也不是大神,隻是積累了一點點,想分享一下罷了!

還記得那會我在初學51單片機時,當得知P89V51系列單片機支援線上仿真、跟蹤代碼時,那是一個興奮啊,無論如何都要弄一個來玩玩,進行代碼跟蹤!

當在開始接觸和學習STM32是,那時候知道了J-Link的存在,它出了燒錄,也能代碼跟蹤,單步執行。後有知道了St-Link的存在,它針對意法半導體的MCU作調試和燒錄!當然了,還有ST-Link和J-Link的各種針對于STM32的相容用法。但知道當我開始使用别人的代碼進行開發的時候,無可想象,使用J-link或者ST-Link進行線上仿真調試(代碼跟蹤)顯得矯情了!

對于底層的硬體驅動調試來說,使用J-link或者ST-Link進行代碼跟蹤效果是比較可觀的,因為隻因為我們可以看到寄存器的值進行邏輯的判斷和配置正确與否的判斷。當然,也可以在某些特殊的情況的要求下,進行代碼的優化,也可以使用。至于其他的情況,自我感覺使用J-Link/ST-Link進行代碼跟蹤顯得很矯情了!

通常一個大的項目或者一個産品項目中,整一個軟體程式基本上不可能是同一個人寫的,可能同僚寫的,也有可能是晶片原廠提供的方案,而且各個程式員的風格各異(對于對程式設計風格有要求的公司,情況可能會好一點,總之有些程式員的程式風格可以叫做慘不忍睹,總之,在調試程式一天,你就會罵他娘一天,直到罵到公司不再使用這個方案或者你辭職,也不知道這類程式員是咋想的,為毛原意讓人家罵他娘,他都不願意修正或者學習一下風格),除了這些還有這項技術的難度、算法的複雜程度等等,是以通常會将軟體進行分層,底層就是啟動之後硬體驅動了,然後就是與硬體無關的功能代碼了(當然,我隻是随便舉個例子,比如Linux、Android這些程式就分成了好幾層,而且非常複雜),還有就是,有些技術是原廠或者方案公司不友善外漏的技術,是以他們所提供的二次開發包SDK通常關鍵技術已經封裝成庫,那麼使用J-Link/ST-Link來調試跟蹤代碼已經不現實了,因為在一個項目中我們不可能了解到全部的代碼,也不可能去看全部的代碼,隻因為沒有時間。通常可能我們隻需要知道自己負責的這部分的邏輯流程和進入接口和向外輸出接口即可,也就是說,我們自己隻能在小小的空間裡面做事,萬萬不能越界。這時候,UART/USART同步/異步串行口通信将起到了巨大的作用。很簡單,隻需在其接口Tx和Rx與PC機建立序列槽通信,使用序列槽調試助手與其通信(列印或者輸入标志到MCU),即可通過序列槽調試助手的列印現象來進行代碼的跟蹤。說白了,就是在我們代碼的某處(需要的地方)将某些标志或者資料列印出來,既可以輕易的對代碼進行跟蹤。就可以知道代碼的執行邏輯和步驟。我現在這可比J-Link/ST-Link簡單多了。

是以,基于這樣的一個思想,每當我進行新的硬體代碼調試時(不管是自己寫驅動還是使用SDK包),隻要硬體支援UART/USART,第一件事就是點燈(能夠控制GPIO口)和調通UART/USART(以便進行代碼的調試),這兩點自我覺得是非常重要的。

到這裡,基本上經驗之談已經結束,下面就記錄一下STM32F030 Nucleo闆卡的學習 。

首先,有必要搞清楚幾點:

(1)UART和USART之間的差別:

UART:Universal Asynchronous Receiver and Transmitter,通用異步收發器,[Bus Signal] Tx , Rx

51單片機上面的就是這個了,ARM架構的MCU/CPU部分也還支援。

USART:Universal Synchronous Asynchronous Receiver and Transmitter,通用同步異步收發器,[Bus Signal]Tx , Rx , CK

從名字上,就可以看出了,USART比UART高大上多了,隻是在UART之上增強了通信協定。

USART支援同步模式,是以USART需要同步信号USART_CK(仔細的觀察STM32單片機,就可以發現這樣的引腳),通常同步信号通信相對而言是比較少用的,是以通常的調試中,UART和USART的使用方式是一樣的,都使用異步模式。

(2)STM32 USART通信的各種模式:

STM32F030 Nucleo-開發調試的經驗USART的重要性(一)

不用多說,我相信看到這個表就一目了然了!

當然,通過MAX485或者RS485等晶片,UART/USART接口可以作為458通信接口。

那麼現在就要把牛客闆卡的USART1調通,與PC機進行序列槽通信,

(1)找到使用的USART1引腳。

檢視Datasheet,得知如下圖:

STM32F030 Nucleo-開發調試的經驗USART的重要性(一)

STM32F030 USATU1的複用第一功能引腳就如上了,其中有GPIOA8作為USART1_CK,同步模式時作為USART同步通信的同步時鐘引腳;GPIOA9腳為USART1通信時的發送引腳;GPIOA10腳作為USART1通信時的接收引腳;GPIOA11和GPIOA12引腳作為USART1通信當使用硬體流控時,作為流控控制引腳。然而,在這裡咱不玩什麼同步模式,也不玩流控,是以隻需要配置GPIOA9和GPIOA10引腳即可。

嵌入式物聯網需要學的東西真的非常多,千萬不要學錯了路線和内容,導緻工資要不上去!

分享大家一個資料包,差不多150多G。裡面學習内容、面經、項目都比較新也比較全!

掃碼進群領資料

STM32F030 Nucleo-開發調試的經驗USART的重要性(一)

繼續閱讀