STM32學習心得


大綱

前沿:無論學習傳統寄存器編程還是庫函數編程,都學要學會看數據手冊用戶手冊,實際工作中不可能手把手教你

每一個外設的函數或者寄存器怎么配,其實作為單片機工程師就是一個體力活,因為你只是在遵循芯片廠商的規則進行

配置一系列寄存器而已。在編程中要有一種變化的思維,第一點,比如使用某一個外設,需要配置其基本參數,如時鍾,端口和

引腳,作為輸入還是輸出,作為傳統輸出還是服用功能輸出。是否需要配置中斷,以及設置中斷優先級和某個外設中斷

使能,編寫實現功能的中斷函數。第二點,一般情況下單片機與外界交換,無外乎就是收發,對於發送,需要檢測其是否

發送成功,有發送成功的事件或中斷標志位。接收,判斷是否接受成功,如果是使用中斷標志位,則在進入中斷函數后,需要

清除中斷標志位。最后,最重要的是逆行要實現怎么樣的功能,單片機無外乎不就是引腳以及引腳的復用功能,如TIMADC

DACCAN、I2C、USART、SPI、USB等等。作為提升自己的方式,我們需要學習上位機開發,可以用C#開發上位機,也可以

用QT開發上位機。

       總之,嵌入式開發主要就是臉+腦  ==通訊協議  ===    舌頭+手。其中臉是用戶界面,腦是數據庫  。舌頭是傳感器,手是電機。

他們之間形成交互,通過通訊協議進行傳輸數據。

     PLC就是大型的單片機,常常用於工業電機的控制。而運動控制板卡是工業機器人的控制。

 

1.學什么

2.怎么學

3.物理層面的基本電路

4.庫函數的基本理念(HAL庫和FW庫)+內容概要

5.中斷和事件的區別,一定要有中斷嗎?

6.串口存在的意義

7.TIM及其應用

8.WWDG 存在的意義

9.SYSTICK 存在的意義

 

1.學什么

(1)片上外設

如GPIO、TIM、EXTI、SYSTICK等

(2)模擬數字轉換

如ADC\DAC

(3)通信協議

如I2C、USART/UART、SPI、TCP/IP、CAN等

 

2.怎么學

        嵌入式軟件工程師做學硬件的話基礎要會焊貼片芯片、貼片元件,這個很重要!!!而且要保證焊出來的板子可以正常工作,

出了問題自己去找出問題然后解決掉。要會使用軟件繪制原理圖和PCB。其他的知識個人覺得多做項目,可以是公司項目,也可以

自己做一些小制作,在這個制作過程中需要用到什么硬件知識再去學習,會更有效一點。

 

3.物理層面的基本電路

1)推挽模式:

      狀態:1/0

2)開漏模式:上拉電阻電壓由負載額定電壓決定。  

      狀態:0或截止

3)  斯密特觸發器

      TTL電平,輸入后輸出有不同的比較值

當選擇輸入時,如果大於該比較值,則觸發器輸出1;

                          如果低於該比較值,則觸發器輸出0;

4)上拉/下拉輸入電路

      其意義是保證引腳電平在一個確定的狀態下,常常配合開關或其他觸發方式使用。

                 

 

4.庫函數的基本理念(HAL庫和FW庫)

       固件庫是指“STM32標准函數庫”,它是由ST公司針對STM32提供的函數結構。即API(application program Interface),開發者可以調用函數接口來配置STM32的寄存器。

     

(1)相似之處:主要由CR、SR、DR(事件或中斷)組成,具體如下表所示

CR:配置相關外設或協議初始化

SR:   判斷引腳的狀態

DR:  讀取或寫入數據

 

寄存器

對應庫函數命名

CR

Control

Register

對一些外設初始化\使能一些事件中斷

xxx_Init()  如USART_Init()、GPIO_Init()

xxx_cmd()     如 USART_IT()、TIM_Cmd()

DR

Date

Register

發送和接收數據

Xxx_SendData()、xxxReceiveData()

SR

Situation

Register

一些事件或中斷的標志位

Xxx_GetFlagStatus()、xxx_GetITStatus()

Xxx_ClearFlag()、xxx_ClearITPend-ingBit()

 

(2)固件庫的基本內容

     1.匯編編寫的啟動文件

  名稱:Startup_stm32f10x_hd.s  

       主要作用:設置C語言運行環境。

       主要內容:設置堆棧指針,設置PC指針,初始化中斷向量表,設置系統時鍾systemInit。

      2.時鍾配置文件

        System_stm32f10x.c; 把外部的HSE(外部高速時鍾)=8M,經過鎖相環配置成72M。

     3.外設相關的

        Stm32f10x.h  //peripheral register reflect  GPIOA_BASE 0XFFFFFFFF

外設基地址,以及相應的寄存器的結構體  以及由外設基地址組成的結構體函數。

實現相應功能的庫

       Stm32f10x_xx.c       //外設的驅動函數庫文件

       Stm32f10x.xx.h       //頭文件,存放外設(GPIOx)的初始化結構   

       Stm32f10x_conf.h     //包含所有外設的頭文件,可以選擇是否啟用

      4.專門存放中斷服務函數的C文件

      stm32f10x_it.h

      stm32f10x_it.c

(注:中斷服務函數可以隨意放在其他地方,並不一定要放在.c文件中)

 

5.中斷和事件的區別

         中斷需要中斷服務函數NVIC等一些列配置,而事件不需要軟件,它是直接通過硬件方式聯動。

               

       圖中輸入線1(I/O口)信號進入,通過信號檢測(觸發方式):(上升沿、下降沿、上升下降沿檢測),

進入3之前,是設置軟件中斷/事件。

       中斷通過NVIC控制和中斷屏蔽器相與。

        事件與事件屏蔽寄存器相與,通過脈沖發生器 產生電平的反轉實現時間產生

      一定要有中斷嗎?

     (1)設備與外界通信,如CAN,上位機發送消息過來,這時候程序如果運行很慢,錯過消息,

就不自信串口的命令,最好寫入中斷。

     (2)你會知道什么時候產生中斷嗎?

          只有外界觸發時,如外部中斷導致引腳電平變換,內部中斷定時器,計時到了產生中斷,CAN通信

接收到消息產生中斷,這些都是硬件去檢測,本質檢測的是寄存器是否被置位,至於你(人)不知道是否

什么時候中斷,中斷之所以有優先級,是因為需要考慮很多,如火車行駛中前面兩個路口,有一個人和多個人

,死一個人和死多個人,當然選擇死一個人。

    (3)對於嵌入式工程師,只要調用其庫函數接口可以,如CAN發送和接收的接口,自己在封裝下可以使用,

發送即可字節自己定義。對於串口,重定向后直接使用庫函數發送和接收,自己封裝無外乎是發送一個字節,還是發送多個字節而已。

 

6.串口的作用

1)調試程序,上位機與下位機交互

2)燒錄程序

7.TIM及其應用

 

 

8.WWDG 存在的意義

 

 

9.SYSTICK 存在的意義

             系統定時器是屬於作為CM3/4內核外設,內部嵌套在NVIC中。系統定時器是一個24bit的向下遞減的計數器。

             這里需要考慮兩點:計數器每計數一次的時間:與配置其始終有關。

                                              產生一次中斷的時間:計數24次后的時間。

//設計流程
//將core_cm3/4中有關systick函數移植過來
//1.配置重裝載值,復位,以及定時器NVIC配置    config_systicks(xxx)
//2.初始化systicks,可以確定多久中斷一次
//3.配置中斷函數,並將它發到it.h中  ,其中參數變量在延時函數中賦值
//4.編寫相應的延時函數
//5.根據要求調用系統滴答函數

 

未完待續

更新日期:2021-10-13 \19:54:44 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM