色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > STM32F030 Nucleo-開發(fā)調試的經驗USART的重要性

STM32F030 Nucleo-開發(fā)調試的經驗USART的重要性 時間:2018-08-16      來源:未知

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

還記得那會我在初學51單片機時,當?shù)弥狿89V51系列單片機支持在線仿真、跟蹤代碼時,那是一個興奮啊,無論如何都要弄一個來玩玩,進行代碼跟蹤!

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

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

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

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

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

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

(1)UART和USART之間的區(qū)別:

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

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

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

從名字上,就可以看出了,USART比UART高大上多了,只是在UART之上增強了通信協(xié)議。

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

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

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

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

那么現(xiàn)在就要把牛客板卡的USART1調通,與PC機進行串口通信,

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

查看Datasheet,得知如下圖:

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

(2)找到牛客板卡的USART1的引腳位置。

查看牛客板卡的用戶手冊《STM32 Nucleo-64 boards》,找到下圖:

(3)在庫中找到USART相關的接口。

先確定要調試功能:

打開GPIO時鐘和USART1時鐘,選擇時鐘源,配置復用IO模式:

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); //GPIO時鐘使能函數(shù)

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); //USART1時鐘使能函數(shù)

void RCC_USARTCLKConfig(uint32_t RCC_USARTCLK);//USART1時鐘源選擇函數(shù)

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);//IO口復用配置函數(shù)。

配置GPIO口:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

USART初始化并啟動USART通信:

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);//USART初始化函數(shù)

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);//USART使能函數(shù)

void USART_ClearFlag(USART_TypeDef* USARTx, uint32_t USART_FLAG);//USART清標志函數(shù)

配置中斷:

對于USART的接收功能來說,可以使用兩種方式,分別是循環(huán)檢測接收方式和中斷方式接收數(shù)據(jù),前一種方式會阻塞占用MCU,導致效率低下,而中斷方式接收數(shù)據(jù)則不會阻塞,所以這里使用中斷方式接收數(shù)據(jù)。

void USART_ITConfig(USART_TypeDef* USARTx, uint32_t USART_IT, FunctionalState NewState);//USART中斷使能函數(shù)

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);//嵌套向量中斷控制器初始化配置函數(shù)

接收和發(fā)送數(shù)據(jù):

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint32_t USART_FLAG);//獲取USART狀態(tài)標識函數(shù)

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);//USART讀取數(shù)據(jù)函數(shù)

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);//USART發(fā)送數(shù)據(jù)函數(shù)

那么這么多函數(shù)是從哪里找的呢??答案是,在keil上搜索得到的,所以這種開發(fā)的方式就是,當調試某個功能時,找到與之相關的文件比如:stm32f0xx_usart.c和stm32f0xx_usart.h文件,其由于GPIO相關,又去找stm32f0xx_gpio.c和stm32f0xx_gpio.h文件,其時鐘還與RCC相關,就去找stm32f0xx_rcc.c和stm32f0xx_rcc.h文件,又還與NVIC相關,所以又去找stm32f0xx_misc.c和stm32f0xx_misc.h文件。總之就是一句話,它需要什么就給它什么。

還有個問題就是,你咋知道先配置什么,再配置什么的???答案是:其實我也不知道,是參考手冊或者編程手冊告訴我的,比如下圖:

圖已經告訴咱數(shù)據(jù)是怎么傳輸?shù)牧耍瑧撆渲蒙都拇嫫鞯鹊龋窃鄄痪褪侵涝趺磁渲昧嗣础??就是這樣的。

(4)配上COMS電平轉TTL電平的模塊,比如MAX232,MAX3232,RS232,PL2303等。與PC機連接通信。

我用的就是上圖這種模塊了,連接是:

MCU_Tx---------模塊Rx

MCU_Rx---------模塊Tx

然后就與PC機連接,再連上串口調試助手。

OK!到這里就還有一點要講的了!那就是波特率,其實就是單片機或計算機串口通信時的速率。其實在手冊當中也給咱講的一清二楚了,

人家講的很清楚,還給咱舉了例子,如何計算,如何配置。其實如上圖的計算過程只是對于玩操作寄存器的人才需要考慮的計算,如果直接用庫函數(shù)開發(fā),直接指定波特率就好了。

還有就是,普通的通信應該配置成什么呢???三個字“8N1,無奇偶”,啥意思呢??8個數(shù)據(jù)為,無流控,1個停止位,無奇偶校驗,就是這么簡單。

且看庫的配置結構體:

指定波特率,設置數(shù)據(jù)位長度8位,1個停止位,無奇偶校驗,輸入和輸出模式,無流控。如下圖:

具體初始化如下:

USART初始化:

NVIC初始化:

初始化就如上了。

那么,咱要發(fā)送數(shù)據(jù)哇!所以,咋就寫寫:

發(fā)送一個字節(jié):

發(fā)送字符串:

發(fā)送十進制數(shù)據(jù):

OK!發(fā)送的就是這樣,沒什么好解釋的!哈哈!

但是,如果用來進行調試的話,以上方法好像不太給力哦,為毛呢??比如所咱想發(fā)送字符串和數(shù)據(jù)混雜呢》》按照上面的方法,那可得寫好幾句打印函數(shù)呢!嘿嘿!那咱就把ANSI標準C的printf移植過來用吧!腫么玩呢??其實,兩步就好:

(1)包含頭文件#include

(2)如下圖:

這幾個意思呢??而且,明眼人一看就能看見,在咱的工程中,壓根就沒有調用int fputc(int ch, FILE *f)這個函數(shù),只是寫在那里了而已,哈哈!其實呢,int fputc(int ch, FILE *f)函數(shù)是printf函數(shù)開放的一個從硬件讀取數(shù)據(jù)的接口,那么在哪里調用呢??肯定在C標志庫調用啦!只是咱看不到罷了。所以,不用管它,寫上就好!哈哈!

這樣,咱就能在工程中直接使用printf函數(shù)了,至于怎么使用,不會的話,自己好好的去學習C吧。

發(fā)送數(shù)據(jù)講完了,咱就說說接收數(shù)據(jù)了,我在這里就簡單的表示一下,具體的還要看實際應用的需要修改。

首先咱得找到stm32f0xx_it.c文件,然后再文件中任意位置寫函數(shù)

void USART1_IRQHandler(void)

{

}

那么這個函數(shù)名從哪來的呢??又是干啥的呢??

還記得前面提到的在啟動文件建立的中斷向量表嗎?打開startup_stm32f030.s文件,中斷向量表如下:

沒錯,當發(fā)生中斷時,MCU會:

(1)將現(xiàn)有數(shù)據(jù)保存在相應寄存器中,即保存現(xiàn)場

(2)跳轉到中斷向量表中查詢發(fā)生中斷的外設,并找到中斷入口地址

(3)執(zhí)行中斷功能

(4)跳出中斷,從相應寄存器中讀取數(shù)據(jù),即恢復現(xiàn)場

中斷的過程就是上面這幾個了,那么void USART1_IRQHandler(void)函數(shù)就是USART1的中斷入口地址了,就是這么簡單。再多說一點就是,有些人說,看見別人在函數(shù)的任意位置填寫任意的函數(shù),他就直接成了中斷函數(shù)了,為毛這里要有ST規(guī)定了名字啊???其實我想說,只要你開心,想怎么樣都可以;首先,void USART1_IRQHandler(void)函數(shù)可以存在于工程中的任意C文件,再就是,如果想自己命名,那就修改一下中斷向量表的名字為你想要的名字即可,只要你開心。

OK!實現(xiàn)就如下圖了:

上圖首先檢測USART1讀標志,然后讀取數(shù)據(jù),再然后將其打印出來個咱看,數(shù)據(jù)是否發(fā)送成功。然后情況標志位。在這里只是驗證通信的成功。

所以當我們從串口調試助手發(fā)送數(shù)據(jù)后,發(fā)送的數(shù)據(jù)有會在串口調試助手上面打印出來,有點像回顯。哈哈!就是這么簡單了!

具體的主程序調用如下:

很簡單!一直在輸出!哈哈!OK了!

這些只是個人調試和理解,如若有誤,請諒解!也可以聯(lián)系我QQ641251565讓我也學習學習。

上一篇:STM32F030 Nucleo-讓MCU全速點燈,其中隱藏的含義

下一篇:STM32F030 Nucleo-多樣的SPI通信之Master標準模式-SPIFlash讀寫

熱點文章推薦
華清學員就業(yè)榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 波多野结衣爽到高潮在线观看 | 少妇一级免费 | 人妻洗澡被强公日日澡 | 色偷偷wwww88888 | 宅男av | 亚洲AV日韩AV永久无码PPT | 四虎影视国产精品永久在线 | 色就是色网址 | 亚洲成人手机在线 | 中文无码制服丝袜人妻AV | 国产99九九久久无码熟妇 | 国产精品爱久久久久久久小说 | 亚洲高清免费观看在线视频 | 黑人又粗又大XXX精品 | 欧美丰满熟妇xxxx性 | 在线观看视频一区 | 国产啪视频1000部免费 | 芒果乱码国色天香 | 亚洲精品高清无码视频 | 水蜜桃视频在线观看 | 怡春院性无码免费视频 | 强奷人妻日本中文字幕 | 蜜臂精品国产高清在线观看 | 亚洲熟妇无码AV另类VR影视 | 男人猛躁进女人免费播放 | 西欧FREE性满足HD老熟妇 | 性xxxx欧美老妇胖老太269 | 欧美日韩视频在线一区二区三区 | 狠狠cao在线视频观看 | 天堂网资源中文最新版 | 玉女阁福利视频导航 | 9I精品福利一区二区三区蜜桃 | 欧美大片一区二区 | 天堂无码人妻精品av一区 | 老司机午夜私人影院免费 | 成人片黄网站A毛片免费 | 久久亚洲私人国产精品VA | 国产精品无码AV一区二区三区 | av影音先锋天堂网 | 欧美又色又爽又黄的A片18禁 | 嫩草影院永久入口 |