STM32筆記記錄4

2021-09-06 07:38:56 字數 3146 閱讀 9628

user\main.c(7): warning:  #223-d: function "iic_busrtwrite" declared implicitly

這個是因為程式模組化的時候,你在乙個.c裡面呼叫了另乙個.c的函式而沒有進行外部宣告。你將這個宣告的這個函式前面加上extern應該就好了!或者是函式宣告時函式名稱不一致導致。

..\obj\temputure_mesure.axf: error: l6200e: symbol temp multiply defined (by wenshidu.o and main.o).

問題解決了,主要是我把變數縫在標頭檔案裡面了,放在c檔案裡面就是好的了

輸入捕獲模式

在輸入捕獲模式下,當檢測到icx 訊號上相應的邊沿後,計數器的當前值被鎖存到捕獲/ 比較寄存

器(timx_ccrx)中。當捕獲事件發生時,相應的ccxif 標誌(timx_sr 暫存器)被置』1』,

如果使能

了中斷或者dma操作,則將產生中斷或者dma操作。如果捕獲事件發生時ccxif 標誌已經為

高,那麼重複捕獲標誌ccxof(timx_sr 暫存器) 被置』1』 。寫ccxif=0 可清除ccxif ,

或讀取存

儲在timx_ccrx暫存器中的捕獲資料也可清除ccxif 。寫ccxof=0可清除ccxof。

以下例子說明如何在ti1輸入的上公升沿時捕獲計數器的值到timx_ccr1暫存器中,步驟如下:

●  選擇有效輸入端:timx_ccr1必須連線到ti1輸入,所以寫入timx_ccr1暫存器中的cc1s=01,只要cc1s不為』00』 ,通道被配置為輸入,並且tm1_ccr1暫存器變為唯讀。

● 根據輸入訊號的特點,配置輸入濾波器為所需的頻寬(即輸入為tix時,輸入濾波器控制位是timx_ccmrx暫存器中的icxf位)。假設輸入訊號在最多5個內部時鐘週期的時間內抖動,我們須配置濾波器的頻寬長於5個時鐘週期。因此我們可以(以fdts 頻率)連續取樣8次,以確認在ti1上一次真實的邊沿變換,即在timx_ccmr1暫存器中寫入ic1f=0011 。

●  選擇ti1通道的有效轉換邊沿,在timx_ccer暫存器中寫入cc1p=0(上公升沿)。

●  配置輸入預分頻器。在本例中,我們希望捕獲發生在每乙個有效的電平轉換時刻,因此預分頻器被禁止(寫timx_ccmr1暫存器的ic1ps=00) 。

●  設定timx_ccer暫存器的cc1e=1 ,允許捕獲計數器的值到捕獲暫存器中。

●  如果需要,通過設定timx_dier暫存器中的cc1ie 位允許相關中斷請求,通過設定timx_dier暫存器中的cc1de位允許dma請求。 當發生乙個輸入捕獲時:

●  產生有效的電平轉換時,計數器的值被傳送到timx_ccr1暫存器。

● cc1if 標誌被設定(中斷標誌)。當發生至少2個連續的捕獲時,而cc1if 未曾被清除,cc1of也被置』1』 。

●  如設定了cc1ie 位,則會產生乙個中斷。

●  如設定了cc1de位,則還會產生乙個dma請求。

為了處理捕獲溢位,建議在讀出捕獲溢位標誌之前讀取資料,這是為了避免丟失在讀出捕獲溢位標誌之後和讀取資料之前可能產生的捕獲溢位資訊。

輸出比較模式

此項功能是用來控制乙個輸出波形,或者指示一段給定的的時間已經到時。 當計數器與捕獲/ 比較暫存器的內容相同時,輸出比較功能做如下操作:

●  將輸出比較模式(timx_ccmrx 暫存器中的ocxm 位)和輸出極性(timx_ccer 暫存器中的ccxp位)定義的值輸出到對應的引腳上。在比較匹配時,輸出引腳可以保持它的電平(ocxm=000) 、被設定成有效電平(ocxm=001) 、被設定成無效電平(ocxm=010) 或進行翻

轉(ocxm=011) 。

●  設定中斷狀態暫存器中的標誌位(timx_sr 暫存器中的ccxif 位)。

●  若設定了相應的中斷遮蔽(timx_dier 暫存器中的ccxie 位),則產生乙個中斷。

●  若設定了相應的使能位(timx_dier 暫存器中的ccxde位,timx_cr2 暫存器中的ccds 位選擇dma請求功能),則產生乙個dma請求。 timx_ccmrx中的ocxpe位選擇timx_ccrx暫存器是否需要使用預裝載暫存器。 在輸出比較模式下,更新事件uev對ocxref 和ocx 輸出沒有影響。 同步的精度可以達到計數器的乙個計數週期。輸出比較模式( 在單脈衝模式下) 也能用來輸出乙個單脈衝。

輸出比較模式的配置步驟:

1.  選擇計數器時鐘(內部,外部,預分頻器)

2.  將相應的資料寫入timx_arr 和timx_ccrx暫存器中

3.  如果要產生乙個中斷請求和/ 或乙個dma請求,設定ccxie 位和/ 或ccxde位。

4.  選擇輸出模式,例如當計數器cnt與ccrx匹配時翻轉ocx 的輸出引腳,ccrx預裝載未用,開啟ocx 輸出且高電平有效,則必須設定ocxm=』011』、ocxpe=』0』 、ccxp=』0』和ccxe=』1』。

5.  設定timx_cr1 暫存器的cen位啟動計數器

timx_ccrx暫存器能夠在任何時候通過軟體進行更新以控制輸出波形,條件是未使用預裝載暫存器(ocxpe=』0』,否則timx_ccrx影子暫存器只能在發生下一次更新事件時被更新) 。

計數器暫存器(timx_cnt);預分頻器暫存器 (timx_psc);自動裝載暫存器 (timx_arr)

根據在timx_cr1 暫存器中的自動裝載預裝載使能位(arpe) 的設定,預裝載暫存器的內容被立即或在每次的更新事件uev時傳送到影子暫存器。

向上計數模式

在向上計數模式中,計數器從0 計數到自動載入值(timx_arr計數器的內容) ,然後重新從0 開始計數並且產生乙個計數器溢位事件。

向下計數模式

數器從自動裝入的值(timx_arr計數器的值) 開始向下計數到0 ,然後從自動在向下模式中,計裝入的值重新開始並且產生乙個計數器向下溢位事件。

**對齊模式( 向上/ 向下計數)

在**對齊模式,計數器從0 開始計數到自動載入的值(timx_arr暫存器)−1 ,產生乙個計數器溢位事件,然後向下計數到1並且產生乙個計數器下溢事件;然後再從0開始重新計數。 

捕獲/比較通道

每乙個捕獲/ 比較通道都是圍繞著乙個捕獲/ 比較暫存器( 包含影子暫存器) ,包括捕獲的輸入部分(數字濾波、多路復用和預分頻器),和輸出部分(比較器和輸出控制)。

STM32筆記記錄

串列埠記錄 stm32有好幾個串列埠。比如說stm32f103zet6有5個串列埠,串列埠1的引腳對應的io為pa9,pa10.pa9,pa10預設功能是gpio,所以當pa9,pa10引腳作為串列埠1的tx,rx引腳使用的時候,那就是埠復用。復用埠初始化有幾個步驟 1 gpio埠時鐘使能。要使用到...

STM32筆記 ADC DMA方式

adc流程,首先adc採集乙個訊號 訊號範圍大都為0 3.3v,ps 3.3v可通過更改vref暫存器修改 每隔相同時間菜一次數值傳送到乙個可變16位數中,下面是我們的陣列定義 io uint16 t adc convertedvalue 定義該16位數用來傳輸資料,原因是我們使用的12位ad,由於...

STM32筆記 SPI通訊

相對於上次說的iic,這次我們來回憶一下spi,之前並沒有過多深入了解spi協議,所以這次再來記錄一下,首先附上資料裡的spi定義 spi,是英語 serial peripheral inte ce 的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管...