第二章stm技術強化_第1頁
第二章stm技術強化_第2頁
第二章stm技術強化_第3頁
第二章stm技術強化_第4頁
第二章stm技術強化_第5頁
已閱讀5頁,還剩254頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第二章第二章 STM32STM32強化應用強化應用本章目標本章目標掌握掌握GPIOGPIO口輸入輸出口輸入輸出的用法的用法掌握掌握stm32stm32的中斷系統的中斷系統掌握通用定時器的三個用法掌握通用定時器的三個用法掌握掌握SPISPI、I2CI2C接口的用法接口的用法掌握以太網、液晶等的用法掌握以太網、液晶等的用法第二章第二章 STM32STM32強化應用強化應用2.1 STM322.1 STM32要點要點 2.1.1 2.1.1 命名規范命名規范 STM32F103RBT6:64引腳,128K的flash,LQFP封裝第二章第二章 STM32STM32強化應用強化應用2.1 STM322

2、.1 STM32要點要點 2.1.2 FLASH2.1.2 FLASH容量、選型容量、選型 第二章第二章 STM32STM32強化應用強化應用2.1 STM322.1 STM32要點要點 2.1.3 2.1.3 啟動文件選擇啟動文件選擇 第二章第二章 STM32STM32強化應用強化應用2.1 STM322.1 STM32要點要點 2.1.4 2.1.4 時鐘樹時鐘樹 系統時鐘最大頻率為72MHz,它通過AHB分頻器分頻后送給各模塊使用,AHB分頻器可選擇1、2、4、8、16、64、128、256、512分頻。其中AHB分頻器輸出的時鐘送給5大模塊使用:、送給AHB總線、內核、內存和DMA使用

3、的HCLK時鐘。、通過8分頻后送給Cortex的系統定時器時鐘。、直接送給Cortex的空閑運行時鐘FCLK。第二章第二章 STM32STM32強化應用強化應用2.1 STM322.1 STM32要點要點 2.1.4 2.1.4 時鐘樹時鐘樹、送給APB1分頻器。APB1分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB1外設使用(PCLK1,最大頻率36MHz),另一路送給定時器(Timer)2、3、4倍頻器使用。該倍頻器可選擇1或者2倍頻,時鐘輸出供定時器2、3、4使用。、送給APB2分頻器。APB2分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB2外設使用(PCLK2,最大

4、頻率72MHz),另一路送給定時器(Timer)1倍頻器使用。該倍頻器可選擇1或者2倍頻,時鐘輸出供定時器1使用。另外,APB2分頻器還有一路輸出供ADC分頻器使用,分頻后送給ADC模塊使用。ADC分頻器可選擇為2、4、6、8分頻。第二章第二章 STM32STM32強化應用強化應用2.1 STM322.1 STM32要點要點 2.1.4 2.1.4 時鐘樹時鐘樹 第二章第二章 STM32STM32強化應用強化應用2.1 STM322.1 STM32要點要點 2.1.5 2.1.5 管腳功能管腳功能 第二章第二章 STM32STM32強化應用強化應用2.1 STM322.1 STM32要點要點

5、2.1.6 2.1.6 技術手冊技術手冊 CM3權威指南:主要講解了Cortex M3內核的原理和實現; STM32中文參考手冊:使用最頻繁的文檔,詳細講解stm32的接口、外設的原理,使用方法和寄存器; STM32F10 xxx Cortex編程手冊:需要注意的是其中的系統寄存器; STM32F10 xxx閃存編程手冊:主要講解了怎么對程序存儲器進行操作; STM32芯片的芯片手冊:所選芯片的管腳、功能、性能等。 其中,參考手冊、編程手冊注重功能和操作方式,而芯片手冊更注重量化指標(如時序、允許的最大最小值等)。第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPI

6、O口輸出口輸出 2.2.1 2.2.1 基礎基礎 在stm32芯片中,每個通用輸入輸出口(GPIO口)都有16個口線,如GPIOA,包含了GPIOA0GPIOA15,一般簡寫為PA0PA15。但是,芯片并不一定包含所有的口線,比如在終端設備所使用的stm32f103RB芯片中,通用IO口有GPIOA,GPIOB,GPIOC和GPIOD的PD0PD2。共計51個管腳可以用作輸入輸出口通用通用IOIO和復用功能和復用功能 GPIO(General Purpose Input Output,通用輸入輸出接口)是MCU與外部電路和設備連接的基本外設。也就是常說的端口或管腳。 AFIO(Alternat

7、e Fuction IO,復用功能IO)是指某些GPIO除了通用功能外還可以設置為一些外設專用的功能 STM32F103RBT6有51個GPIO端口,其中的一些還可以把復用功能重新映射到其他引腳,以實現優化管腳數目和配置目的。 GPIO、AFIO和重映射,分別是一個端口的三個層次。 1.使能GPIO時鐘 2.使能復用時鐘和外設時鐘 3.把GPIO模式設置為復用功能對應的模式(見STM32中文參考手冊8.1.11節) 4.外設參數的初始化 5.初始化NVIC并開啟中斷(需使用外設中斷功能時) 6.使能外設 7.編寫中斷處理函數(需使用外設中斷功能時)IOIO復用步驟復用步驟注意:注意: STM3

8、2的外設的外設的初始化都是通過結構的初始化都是通過結構體來設置初始值的!體來設置初始值的!- 18 -通用通用IO工作模式工作模式輸入浮空:用于不確定高低電平的輸入。輸入上拉:用于默認為上拉至高電平的輸入。輸入下拉:用于默認為下拉至低電平的輸入。模擬輸入:用于模擬量的輸入。開漏輸出:用于實現電平轉換和線與功能的輸出。推挽式輸出:用于較大功率驅動的輸出。推挽式復用功能:復用功能情況下的推挽輸出。開漏復用功能:復用功能情況下的開漏輸出。 注意:每個GPIO都可以作為外部中斷/喚醒線。GPIO端口的每個位可以根據不同的功能,由軟件分別配置成八種模式:第二章第二章 STM32STM32強化應用強化應用

9、2.2 GPIO2.2 GPIO口輸出口輸出 2.2.2 2.2.2 功能分析功能分析 在終端設備上,要實現GPIO的輸出功能,可以利用stm32的幾個通用IO口線實現輸出高低電平來控制LED燈的亮滅和繼電器的開關。如下圖所示,終端設備上用來控制LED燈的有兩個管腳,PB0和PB1。LED是發光二極管的縮寫,當它兩端電壓壓差達到指定值(1.6v或更高)時,就會導通發光。因此,讓LED燈亮,只需要將PB0或PB1輸出低電平(0)就可以了。下述內容以LED1為例進行代碼編寫。 第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.3 2.2.3 函

10、數實現函數實現 首先創建一個gpio.c文件,用來實現輸出的功能。每個.c文件都要對應一個.h頭文件,所以再創建一個gpio.h文件,將這兩個文件保存到bsp目錄下。同時,添加到項目中的bsp組下。 不必為h文件添加路徑(此路徑已添加)。 頭文件的一般格式如下所示:第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.5 2.2.5 函數分析函數分析 要實現輸出功能,先來分析下需要實現的函數。 1,初始化函數:用來對管腳進行配置,使它可以輸出高低電平。 2,點亮LED燈和滅掉LED燈的函數。下面按照這個思路,添加幾個空函數到gpio.c文件中如

11、下所示:開關第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.5 2.2.5 函數分析函數分析 開關第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.6 2.2.6 查電路圖看管腳查電路圖看管腳開關 LED1PB0, LED1PB0,低電平亮,高電平滅低電平亮,高電平滅第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.7 2.2.7 函數實現函數實現 初始化: 打開IO口時鐘; 配置口線模式(結構體); 用上述參數初始化IO口 控制:

12、 開燈:PB0置低,即PB0=0 關燈:PB0置高,即PB0=1第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.8 2.2.8 管腳速度和模式管腳速度和模式 速度:在允許的情況下,越低越好 推挽輸出:輸出高低電平,適合于連接數字電路,讀取時為最后一次的設置值. 開漏輸出:輸出高電平需要外接上拉電阻;可同時用作輸入,用于需要雙向IO的場合;吸收電流能力強,適合于做電流型的驅動。 復用推挽輸出:使用管腳復用功能 復用開漏輸出:使用管腳復用功能開關第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2

13、.2.9 2.2.9 聲明函數聲明函數開關第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.10 2.2.10 在在main.cmain.c中調用中調用 在實踐中,通常會讓LED燈以每秒一次的頻率閃爍,以便判斷程序是否在正常運行。 在模板中提供了一個delay延時模塊專門用來提供延時函數。其中,delay_ms可以用來提供毫秒級別的延時,delay_us可以提供微秒級別的延時。延時的具體參數可參考源代碼。使用這兩個函數,同樣要包含對應的頭文件delay.h。完成后的代碼如下所示:第二章第二章 STM32STM32強化應用強化應用2.2 GP

14、IO2.2 GPIO口輸出口輸出 2.2.11 2.2.11 實踐實踐3 3 在模板程序上實現對蜂鳴器的控制,要求在gpio.c和gpio.h中實現。開關第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.12 2.2.12 使用宏定義優化使用宏定義優化用宏定義替換常量,可以方便用戶后期修改; 宏定義替換函數,節省函數調用時間,這點在需要頻繁調用的函數時才有意義,比如模擬i2c時的管腳方向設置函數,比如液晶顯示函數等。第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.13 2.2.13 復

15、用代碼復用代碼 對功能相似的代碼,沒必要再去重復編寫,相關代碼可以進行復制修改,達到一段代碼復用的效果。 繼電器與LED的相似之處 都是輸出模式 都是高低電平控制 都是低電平閉合高電平斷開 繼電器與LED的不同之處 管腳不同 繼電器不能隨便閉合,所以要確定初始狀態繼電器繼電器PC10PC10,同樣置低電平繼電器,同樣置低電平繼電器閉合,置高電平繼電器斷開閉合,置高電平繼電器斷開第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.13 2.2.13 復用代碼復用代碼 gpio.h 將LED部分宏定義和函數聲明復制 將復制粘貼后部分的LED改為R

16、ELAY 修改繼電器時鐘 修改繼電器的GPIO口 修改繼電器的口線PC10第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.13 2.2.13 復用代碼復用代碼 gpio.c 同樣復制后修改。注意管腳開始狀態,如下圖。 在main函數中調用,編譯后下載到教學板。第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.14 2.2.14 獲得輸出腳當前狀態獲得輸出腳當前狀態 實現燈的翻轉函數; 顯示繼電器狀態。 GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0);

17、獲得輸出管腳PA0當前狀態(推挽輸出模式下指的是上一次所設置的值) 第二章第二章 STM32STM32強化應用強化應用2.2 GPIO2.2 GPIO口輸出口輸出 2.2.15 2.2.15 實踐實踐4 4 用復制修改LED或蜂鳴器的代碼的方法來實現繼電器的控制代碼,并實現以下功能: 每隔3s 控制繼電器狀態翻轉; 當繼電器處于閉合狀態時,LED燈以200ms一次的頻率閃爍; 當繼電器處于斷開狀態時,LED燈以每秒一次的頻率閃爍。提示: 繼電器的初始狀態要在斷開狀態(即在調用初始化函數前調用繼電器斷開函數); 注意繼電器的閉合和斷開分別應該對應管腳的高電平還是低電平。 注意延時函數delay_

18、ms參數最大不能超過1800(即1.8s,可參考函數源碼)。第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.1 2.3.1 功能分析功能分析 在stm32芯片中,輸入管腳可以用來采集管腳狀態,也可以用來測量管腳電平,還可以用來作為外部中斷的輸入腳。在終端設備中,可以利用GPIO口線實現按鍵的狀態采集,并顯示到串口調試工具中。 在終端設備上有四個按鍵,通過連接按鍵的四個管腳,可以采集到按鍵的輸入狀態,原理圖如下:第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.3 2.3.3 查看管腳查

19、看管腳 按鍵按下時KEY是低電平,否則是高電平。第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.4 key.c2.3.4 key.c 首先創建一個key.c文件,用來實現輸入的功能。每個.c文件都要對應一個.h頭文件,所以再創建一個key.h文件,將這兩個文件保存到bsp目錄下。同時,添加到項目中的bsp組下。 要實現輸入功能,先來分析下需要實現的函數。 1,初始化函數:用來對管腳進行配置,使它可以采集管腳高低電平狀態。 2,按鍵掃描函數:用來實時掃描按鍵狀態。 下面添加這兩個函數到key.c文件中。第二章第二章 STM32STM32強化

20、應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.4 key.c 2.3.4 key.c 第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.4 key.c 2.3.4 key.c 第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.5 2.3.5 輸入模式輸入模式 浮空輸入GPIO_IN_FLOATING 浮空輸入,可以做KEY識別 帶上拉輸入GPIO_IPUIO內部上拉電阻輸入 帶下拉輸入GPIO_IPDIO內部下拉電阻輸入 模擬輸入GPIO_AIN 應用ADC模擬輸入,

21、或者低功耗下省電第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.6 key.h2.3.6 key.h 為了更好的表明四個按鍵的狀態,最好對這四個按鍵分別定義個名稱。先查看終端設備按鍵下方的按鍵名稱,然后與其在PC口的位置相對應,可以按照如下定義:第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.6 key.h2.3.6 key.h第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.7 main.c2.3.7 main.c 上述操作基本

22、實現了按鍵狀態采集的函數。下述內容要在main函數里調用該函數。 在實踐中通常需要每當按下一個按鍵,就可以在串口里打出對應的信息,如“您按下了某個按鍵”之類的調試信息。 在模板中提供了一個usart串口模塊專門用來提供串口打印服務。只要包含對應的頭文件usart.h,并調用了usart的初始化函數bsp_InitCOM1,就可以使用C語言中標準的輸出函數printf了。完成后的代碼如下所示:第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.8 2.3.8 查看結果查看結果 工具:串口調試工具工具:串口調試工具SSCOM.exeSSCOM.e

23、xe第二章第二章 STM32STM32強化應用強化應用2.3 GPIO2.3 GPIO口輸入口輸入 2.3.9 2.3.9 實踐實踐5 5 結合上節中的內容,在模板程序上實現以下功能: 按鍵UP控制繼電器,按下閉合,再次按下斷開; 按鍵DOWN控制蜂鳴器,按下長響,再次按下消聲; 按鍵ESC,按下后斷開繼電器和蜂鳴器; LED燈以1s的頻率閃爍.第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.1 USART 2.4.1 USART 串口是芯片最基礎的應用,也是調試程序較方便的手段。掌握串口的使用,最基本的就是掌握數據的接收和發送。 在終端設備

24、上,使用了STM32芯片的usart1的收發管腳,也就是PA9,PA10,經過電平轉換芯片后作為串口的收發管腳。原理圖如下圖所示:第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.3 2.4.3 復用功能復用功能 stm32芯片的PA是通用輸入輸出口,它用作usart口時使用的是它的管腳復用功能。通過管腳復用,PA9、PA10就不能再作為普通的IO口使用,而只能作為usart口的收發腳來使用。第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.3 2.4.3 分析函數分析函數 在終端設備模板程序中

25、,由于提供了串口模塊usart.h和usart.c。因此,可以在初始化函數后,直接使用printf函數打印調試信息。除了初始化函數外,如果要收發數據,還需要至少一個發送函數和一個接收函數。 接收數據方式有查詢和中斷兩種,本例中采用查詢方式。 第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.3 2.4.3 分析函數分析函數 在實踐中,有時候要發送一串字符(字符末尾自帶結束符0),有時候又要發送一串16進制數,因此,發送函數最好是兩個,一個用來發送字符串,一個用來發送16進制數據。這兩個函數大部分代碼是一樣的,只是對要發送數據的結尾的處理不同。

26、第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.4 16 2.4.4 16進制和進制和ASCIIASCII碼碼 本質上來說,16進制和ASCII碼是一樣,其存儲都是二進制0和1的組合。ASCII碼的表示方法也可以是16進制數。它是用特定的、指定的16進制數來表示字符的一種方法。比如字母A,它的ASCII就是65(十進制),其16進制值就是0 x41。比如數字0,它的ASCII碼的16進制值就是0 x30。 第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.4 16 2.4.4 16進制和進制和

27、ASCIIASCII碼碼 以串口調試工具為例,如果選擇了hex(16進制)顯示,則會顯示實際發出的數據。比如發送0 x16就會顯示0 x16,發送0 x41就會顯示0 x41。如果不選擇hex顯示,也就是默認了ASCII碼顯示。那么發送0 x41就會顯示字符A,而發送0 x16則不會顯示,因為0 x16在ASCII中是不可見字符。第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.4 ASCII 2.4.4 ASCII碼與碼與1616進制進制 以字符串”hello!”為例, char str=“Hello!”; u8 str2=0 x48,0 x

28、65,0 x6c,0 x6c,0 x6f,0 x21; 兩個語句是等價的。 任意語句發送到串口調試工具其結果如下圖所示:第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.5 2.4.5 初始化函數初始化函數 開啟管腳時鐘; 開啟復用時鐘; 開啟復用模塊時鐘(stm32的幾個串口除了串口1在APB2總線,其余都在APB1總線) 初始化管腳(復用模式下的GPIO端口模式設置); 初始化串口1(串口參數,如波特率、停止位等的設置) 使能串口1第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.6 2.4

29、.6 串口參數串口參數第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.7 2.4.7 接收數據接收數據 庫函數中接收數據的函數: USART_ReceiveData(USART1); 查詢方式 第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.8 2.4.8 發送數據函數發送數據函數 首先來看發送一個字符的函數。注意發送前要先檢測是否尚有數據未完全發送,否則會丟失第一個字節,代碼如下所示。第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.8 2

30、.4.8 發送數據函數發送數據函數 下面的函數可以實現發送16進制功能。也就是發送指定長度的數組中的數據;第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.9 2.4.9 函數分析函數分析 下面的函數可以實現發送字符串也就是ascii碼的功能。/* 向指定串口寫入字符串 */void ComPutCStr(USART_TypeDef* USARTx,const char *ptr) while(*ptr)!=0) ComPutChar(USARTx,*ptr); ptr+; 第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口

31、數據收發串口數據收發 2.4.10 2.4.10 數組和指針數組和指針 u8 a10,b; u8 a10,b; u8 u8 * *p;p; p=a; p=a; p=&a0; p=&a0; p+; p+; b= b=* *p p; 第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.10 2.4.10 實踐實踐6 6 使用串口模塊的收發函數和串口調試工具,實現如下功能: 從串口調試工具發送數據,程序收到后回發接收到的數據; 自定義串口協議,控制繼電器和蜂鳴器。如relayon代表繼電器閉合或者更簡單點1代表繼電器閉合等。 能使用按鍵

32、改變繼電器或蜂鳴器的狀態;當繼電器或蜂鳴器狀態改變后主動通知向串口發送數據(可與第二項中內容相同)。第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.10 2.4.10 實踐實踐7 7 結合前幾節的內容,實現一個小鬧鐘程序。要求實現如下功能: 按鍵OK按下向串口發送教學板當前時間(ASCII碼或BCD碼); 可通過串口設置當前時間,設置鬧鐘時間或取消鬧鐘; 鬧鐘時間到后蜂鳴器響3s后自動關閉; 可通過按鍵實現鬧鐘短時間定時。比如按下DOWN鍵開始鬧鐘計時(一分鐘后鬧鐘響),然后每按一下增加一分鐘,按下OK鍵表示設置完成。也可以以秒為單位。 可通

33、過按鍵ESC取消鬧鐘。第二章第二章 STM32STM32強化應用強化應用2.4 2.4 串口數據收發串口數據收發 2.4.11 2.4.11 實踐實踐( (擴展擴展) ) 結合實踐5中按鍵功能,實現如下功能: 自定義串口協議,實現主機通過串口對繼電器蜂鳴器的控制以及狀態的讀取; 按鍵改變繼電器或蜂鳴器狀態后主動通過串口向主機發送報警信息; 使用串口調試工具測試。 協議舉例:發送#relayon*表示繼電器閉合(Ascii)。第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.1 2.5.1 什么是中斷什么是中斷第二章第二章 STM32STM32強化應用強

34、化應用2.5 2.5 中斷系統中斷系統 2.5.2 stm32 2.5.2 stm32的中斷的中斷第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.3 2.5.3 優先級優先級第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.4 2.5.4 優先級處理優先級處理第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.5 2.5.5 優先級分組優先級分組 STM32中指定優先級的寄存器位有四位,即優先級有16級。這四位的組合方式決定了搶占優先級以及響應優先級的級別。第二章第二章

35、 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.6 2.5.6 中斷嵌套中斷嵌套 第0組搶占0,即不允許嵌套 第1組搶占0,1,即允許1層嵌套 第2組搶占0-3,即允許3層嵌套 第3組搶占0-7,即允許7層嵌套 第4組搶占0-15,即允許15層嵌套 2.5.7 2.5.7 中斷總開關中斷總開關 NVIC_SETPRIMASK(); /關閉總中斷 NVIC_RESETPRIMASK();/開放總中斷第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.8 2.5.8 使用步驟使用步驟 在使用中斷之前設定分組函數:NVIC_Pr

36、iorityGroupConfig(NVIC_PriorityGroup_2);程序中只能設定一次 Group_2組,即搶占0-3,響應0-3。 如果給中斷源分配了錯誤的搶占號不會報警,但運行會出錯,因此要十分注意。第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.9 2.5.9 串口接收中斷串口接收中斷 初始化函數中:初始化函數中:第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.9 2.5.9 串口接收中斷串口接收中斷 中斷處理函數:中斷處理函數: 需要注意的是,需要注意的是,串口串口1 1通道中斷并不只是

37、接收中斷,通道中斷并不只是接收中斷,還有發送完成等等,所以每次都要判斷是否是接收中斷。還有發送完成等等,所以每次都要判斷是否是接收中斷。第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.10 2.5.10 接收數據處理接收數據處理 uart接口的wifi模塊,gprs模塊等。 工業場所485總線,Modbus協議等。 協議處理屬于用戶級,因此建立comm模塊,添加到user組。第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.10 2.5.10 串口協議處理串口協議處理 假定串口收發的數據符合以下協議假定串口收

38、發的數據符合以下協議: : 幀頭:幀頭:0 x68 0 x68 幀尾:幀尾:0 x16 addr:0 (0 x16 addr:0 (串口串口1 1對對1)1) Len Len:總長度:總長度( (從幀頭至幀尾從幀頭至幀尾) CS:) CS:和校驗和校驗 以上每項除以上每項除DataData外均為外均為1 1字節,字節,DataData長度可變;長度可變; 數據格式除特別說明均為數據格式除特別說明均為1616進制。進制。 第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.10 2.5.10串口協議處理串口協議處理 思路: 幀頭固定,故不符合的直接丟棄;

39、由長度確定幀尾來判斷是否收完; 檢測校驗碼判斷是否是正確數據包。 幀頭長度都不固定的協議,可以通過串口寂靜時間來幀頭長度都不固定的協議,可以通過串口寂靜時間來判斷一包數據是否收完。有的場合需要結合使用。判斷一包數據是否收完。有的場合需要結合使用。第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.11 2.5.11 枚舉枚舉 限定變量取值范圍 比如一周有七天 程序中: ErrCode err;第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.12 2.5.12 函數指針函數指針 Comm_ProcFrame();

40、處理收到的數據 用法一: 優點:直觀,好理解 缺點:需要模塊間交叉調用,或聲明, 如有更改要修改多個文件。第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.12 2.5.12 函數指針函數指針 用法二:回調函數 usart.c 第二章第二章 STM32STM32強化應用強化應用2.5 2.5 中斷系統中斷系統 2.5.12 2.5.12 函數指針函數指針 優點:接口統一,支持多個協議,有利于封裝自定義庫。優點:接口統一,支持多個協議,有利于封裝自定義庫。 第二章第二章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI

41、 2.6.1 2.6.1 定義定義 對CM3內核來說,片上外設如串口定時器等產生的中斷都是外部中斷; 對STM32芯片來說,外部中斷特指的是GPIO中斷。 STM32的每個IO都可以作為外部中斷的中斷輸入口 每個中斷設有狀態位,每個中斷/事件都有獨立的觸發和屏蔽設置。 STM32 的EXTI 控制器支持19 個外部中斷/事件請求(互聯型為20個)。第二章第二章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI 2.6.2 2.6.2 外部中斷線外部中斷線 STM32F103的19個外部中斷為:線 015:對應外部 IO 口的輸入中斷。 線 16:連接到PVD

42、輸出。 線 17:連接到RTC鬧鐘事件。 線 18:連接到USB喚醒事件。STM32供IO 口使用的中斷線只有 16個,但是STM32的 IO 口卻遠遠不止 16 個,那么 STM32 是怎么把 16 個中斷線和 IO 口一一對應起來的呢? GPIO 的管腳 GPIOx.0GPIOx.15(x=A,B,C,D,E,F,G)分別對應中斷線 150。這樣每個中斷線對應了最多7個IO 口,以線0為例:它對應了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。第二章第二章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷

43、EXTIEXTI 2.6.3 2.6.3 線路映像線路映像第二章第二章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI 2.6.4 2.6.4 要點要點 1.中斷線每次只能連接到1個IO口上,需要通過配置來決定對應的中斷線配置到哪個GPIO上。 在固件庫函數中,配置GPIO與中斷線的映射關系的函數是GPIO_EXTILineConfig()。例如:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2); 將中斷線2與GPIOE 映射起來,就將GPIOE.2與EXTI2中斷線連接了。第二章第二章 S

44、TM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI 2.6.4 2.6.4 要點要點 2.中斷線上中斷的相關參數初始化是通過函EXTI_Init() 實現的。例如: EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line=EXTI_Line4; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStruct

45、ure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);/根據EXTI_InitStruct中指定參數初 /始化外設EXTI寄存器 3.EXTI5-EXTI9共用一個中斷通道。 4.EXTI10-EXTI15共用一個中斷通道。 5.配置中斷前要使能復用時鐘。第二章第二章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI 2.6.5 2.6.5 步驟步驟 打開管腳時鐘、復用時鐘; 初始化管腳為輸入,設置IO口與中斷線的映射關系; 初始化NVIC; 初始化EXTI; 實現中斷服務程序。第二章第二

46、章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI 第二章第二章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI 2.6.6 2.6.6 中斷服務程序中斷服務程序 所有的中斷服務程序都在stm32f10 x_it.c中,也可以放到相應的模塊c文件中,注意不要與stm32f10 x_it.c 重復。常用的中斷服務函數的格式為: 注意:在中斷服務程序最后一定要清除中斷標志位!注意:在中斷服務程序最后一定要清除中斷標志位!第二章第二章 STM32STM32強化應用強化應用2.6 2.6 外部中斷外部中斷EXTIEXTI 2.

47、6.6 2.6.6 實踐實踐8 8 將按鍵模塊key.c、key.h改為中斷方式觸發。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.1 ADC 2.7.1 ADC介紹介紹 將模擬量轉換為數字量 12位分辨率,逐次逼近型 每個ADC模塊有18個通道(可測量16個外部和2個內部信號) ADC時鐘不得超過14Mhz 輸入模擬量是0-3.6v的電壓,其它模擬量需要先轉換成電壓信號。 可以自校準第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.2 2.7.2 逐次逼近型逐次逼近型ADCADC 逐次逼近型ADC

48、的轉換過程類似用天枰稱重。天枰稱重的過程是,從最重的砝碼開始放,若物體重則砝碼保留,否則移去。再放次重的砝碼,重復這個過程直到最小的瑪法為止。所有的砝碼相加即為物體的重量。 第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.2 2.7.2 逐次逼近型逐次逼近型ADCADC 與此類似,逐次逼近型ADC就是將輸入模擬信號與不同的參考電壓做多次比較,使轉換所得的數字量逐次逼近模擬量對應值。 因此,信號量轉換時間越長結果越精確。也因此,ADC時鐘不能大于14M,如果大于14M,結果不準確(轉換時間是固定的12.5個ADC時鐘周期)第二章第二章 STM32S

49、TM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.3 ADC 2.7.3 ADC精度精度 stm32的ADC模塊是12位ADC,取值范圍0-4095,顯然位數越多的ADC精度越高.12位ADC能滿足一般需要。 影響精度還有一個因素,采樣頻率或者說采樣點數,特別是在測量交流信號時,采樣頻率是至關重要的。 采樣頻率簡單說就是每秒采樣的次數。 采樣點數指的是一個周期采樣的次數。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.4 ADC 2.7.4 ADC轉換速率轉換速率 以系統時鐘72Mhz為例。 首先,ADC時鐘不能大于14M,那

50、么它可以取的范圍就只有PCLK2 6分頻和8分頻,即12M和9M(ADC有專門的分頻器)。 總轉換時間=采樣時間+12.5個ADC時鐘周期(信號量轉換時間),而采樣時間由寄存器設定,最低1.5ADC周期,最大239.5ADC周期。 第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.4 ADC 2.7.4 ADC轉換速率轉換速率 最小轉換時間為1.5+12.5時鐘周期=14*(1/12)=1.17微秒,也就是說理論上最快可達到854.7K的轉換速率(連續轉換模式) 最大轉換時間為239.5+12.5時鐘周期=252*(1/9)=28微秒(計算最低速率

51、故選擇最低時鐘9M)。 以上結論前提是單次轉換單通道,多通道可類推。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.5 ADC 2.7.5 ADC通道通道 STM32 將ADC 的轉換分為2 個通道組:規則通道組和注入通道組。規則通道相當于你運行的程序,而注入通道呢,就相當于中斷。在你程序正常執行的時候,中斷是可以打斷你的執行的。同這個類似,注入通道的轉換可以打斷規則通道的轉換, 在注入通道被轉換完成之后,規則通道才得以繼續轉換。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.6 ADC 2.7.6

52、 ADC轉換模式轉換模式 單次轉換模式:只執行一次轉換 連續轉換模式:一次轉換結束后馬上開始第二次轉換 掃描模式開啟:一次轉換以規則組為單位。否則以通道為單位。 間斷模式:每次執行n個轉換(n規則組通道數)。 雙ADC模式:同時使用兩個ADC模塊采樣一個信號量,可使采樣頻率翻倍。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.6 ADC 2.7.6 ADC轉換模式轉換模式 第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.7 ADC 2.7.7 ADC模式應用模式應用 連續轉換模式下采樣頻率固定,因此

53、在對采樣點數有固定要求的場合下往往只能取約數,誤差較大,更加適用于檢測直流信號量或對精度要求不高的場合。 單次轉換模式,可配合定時器設定采樣間隔。采樣頻率和點數由定時器控制,誤差更多取決于采樣點數和算法,適用多數場合。 第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.8 FC28 2.7.8 FC28土壤濕度傳感器土壤濕度傳感器第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.8 FC28 2.7.8 FC28土壤濕度傳感器土壤濕度傳感器 使用板子右上方的擴展腳第二章第二章 STM32STM32強化應

54、用強化應用2.7 ADC2.7 ADC測量測量 2.7.8 FC28 2.7.8 FC28土壤濕度傳感器土壤濕度傳感器 查芯片手冊查芯片手冊 按說明連接:按說明連接: 第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.9 FC28 2.7.9 FC28模塊模塊 添加庫函數文件 stm32f10 x_adc.c; 建立fc28.c和fc28.h; 添加fc28.c到bsp組; 添加初始化函數。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.9 FC28 2.7.9 FC28模塊模塊 第二章第二章 STM

55、32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.10 2.7.10 實踐實踐9 9 每秒讀取教學板上的光敏電阻的電壓值,并顯示到串口。由于光照越強,阻值越小,所以可以用電壓值來表示光照強度。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.11 2.7.11 實踐實踐1010 利用光敏電阻檢測可見光的特性,實現一個簡單路燈系統。要求實現如下功能: 系統有時鐘,且誤差較小,可用串口校準; 正常情況下以時間作為路燈開關的基準,如晚6點開燈,早七點關燈,此時間可設置; 當光度較差時(關燈時間),自動開啟路燈。但要保證在正常的開

56、燈時間,路燈是開啟的。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.12 2.7.12 實踐實踐( (擴展擴展) ) 編寫一個自動澆水器的代碼,實現如下功能: 1,實時顯示土壤濕度傳感器FC28的濕度值。 2,當DO輸出高電平時控制繼電器閉合。 3,當濕度值低于設定值時控制繼電器閉合。 DO的具體說明可查看FC28的芯片手冊。第二章第二章 STM32STM32強化應用強化應用2.7 ADC2.7 ADC測量測量 2.7.13 2.7.13 實踐實踐( (擴展擴展) ) 讀取stm32內部溫度傳感器的值,并以此為基礎實現溫控器的功能。 要求:1,

57、可將繼電器看作空調開關,當溫度超過設定值時開啟;當溫度低于設定值時關閉; 2,程序設計盡量考慮詳細,具有可用性。第二章第二章 STM32STM32強化應用強化應用2.8 2.8 SPISPI接口接口 2.8.1 2.8.1 SPISPI的定義的定義 SPI,是一種高速的,全雙工同步的通信總線,SPI 接口一般使用4 條線: MISO 主設備數據輸入,從設備數據輸出; MOSI 主設備數據輸出,從設備數據輸入; SCLK 時鐘信號,由主設備產生; CS 從設備片選信號,由主設備控制,一般低有效。第二章第二章 STM32STM32強化應用強化應用2.8 SPI2.8 SPI接口接口 2.8.2 S

58、PI 2.8.2 SPI的時序的時序 SPI是一個環形總線結構,其時序其實很簡單,在SCLK的控制下,兩個雙向移位寄存器進行數據交換,也就是說,數據的發送和接收是同時進行的. SPI是串行通訊協議,數據是一位一位的傳輸的。由SCLK提供時鐘脈沖,數據在時鐘上升沿或下降沿時改變,在緊接著的下降沿或上升沿被讀取。這樣,在至少8次時鐘信號的改變(上沿和下沿為一次),就可以完成8位數據的傳輸第二章第二章 STM32STM32強化應用強化應用2.8 SPI2.8 SPI接口接口 2.8.2 SPI 2.8.2 SPI的模式的模式 SPI有四種工作模式, 由CPOL,CPHA決定。 CPOL: (Cloc

59、k Polarity),時鐘極性當CPOL為0時,時鐘空閑時候的電平是低電平;當CPOL為1時,時鐘空閑時候的電平是高電平; CPHA:(Clock Phase),時鐘相位當CPHA為0時,時鐘周期的第一個跳變沿采集數據;當CPHA為1時,時鐘周期的第二個跳變沿采集數據。第二章第二章 STM32STM32強化應用強化應用2.8 SPI2.8 SPI接口接口 2.8.2 SPI 2.8.2 SPI的模式的模式 CPOL和CPHA,分別都可以是0或時1,對應的四種組合就是SPI的四種模式:第二章第二章 STM32STM32強化應用強化應用2.8 SPI2.8 SPI接口接口 2.8.3 stm32

60、 2.8.3 stm32的的SPISPI stm32的SPI可以與外部設備以半/全雙工、同步、串行方式通信; 支持主機或從機模式,支持多主機模式; 大容量和互聯型芯片可將SPI接口配制成支持SPI協議或I2S協議; 第二章第二章 STM32STM32強化應用強化應用2.8 SPI2.8 SPI接口接口 2.8.3 stm32 2.8.3 stm32的的SPISPI 大容量和互聯型芯片有3個SPI接口,其中SPI3的部分引腳與JTAG引腳共享,被默認為JTAG功能。若想使用SPI3功能,需要關閉JATG功能(可以開啟SWD接口調試)。 受限于GPIO模塊的翻轉速率(18Mhz),SPI的最大速率為18Mhz。第二章第

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論