STM32 暫存器版本 輸入捕獲實驗

2021-10-09 16:44:18 字數 2060 閱讀 4249

本人使用的是正點原子的ministm32

本次實驗用到的暫存器仍然是之前學過的那幾個,但是在用法上卻更深入一些,本次實驗的難點個人認為有兩個,一是理解按鍵捕獲的原理,二是理解按鍵捕獲的實現方法。

按鍵捕獲的原理:

定時器向上計數,定時器被設定為上公升沿捕捉,當按鍵被按下時,捕捉到上公升沿,於是記錄此時的計數值為t1,然後立刻設為下降沿捕獲,並且將計數值清0,再次向上計數,直到t2發生下降沿捕獲時,記錄此時的計數值為ccrx2。通過這個資料我們可以計算出按鍵按下的時間,即高電平持續時間。但是注意,我們的定時器是有時間限制的,一旦超過定時器的最大時間就會清0重新計時(溢位),所以我們計算高電平持續時間的時候應該這樣計算:

溢位次數n*一次計時最大值arr+ccrx2

按鍵捕獲的實現方法這個等**列出來之後再解釋把

main函式

#include

"sys.h"

#include

"usart.h"

#include

"delay.h"

#include

"led.h"

#include

"timer.h"

#include

"into.h"

extern u8 tim2ch1_capture_sta;

//輸入捕獲狀態

extern u16 tim2ch1_capture_val;

//輸入捕獲值

intmain()

}}

into.c

#include

"into.h"

#include

"led.h"

void

tim2_cap_init

(u16 arr,u16 psc)

u8 tim2ch1_capture_sta=0;

//輸入捕獲狀態

u16 tim2ch1_capture_val;

//輸入捕獲值

void

tim2_irqhandler

(void

)else}}

if(tsr&

0x02

)else}}

tim2->sr=0;

//清除中斷標誌位

}

into.h

#ifndef _into_h

#define _into_h

#include

"sys.h"

void

tim2_cap_init

(u16 arr,u16 psc)

;#endif

其他timer函式的內容可以移步上篇csdn,主要說明一下into.c的**邏輯 前面的配置先不多說了,重點是tim2_irqhandler,tim2的中斷函式

我們定義了乙個八位的變數tim2ch1_capture_sta

bit5~0:捕獲高電平後定時器溢位的次數

bit6:捕獲到高電平的標誌

bit 7:捕獲完成的標誌

tim2ch1_capture_val

記錄捕獲到下降沿時tim2_cnt的值

首先我們設定為上公升沿捕獲,當上公升中斷捕獲到來時,如果tim2ch1_capture_sta的第六位還不是1,那我們先消除一切配置,將tim2ch1_capture_sta,tim2ch1_capture_val和tim2->cnt清0,然後再手動把tim2ch1_capture_sta的第六位置1,意為捕捉到了高電平,然後再設定位下降沿捕獲,如果高電平持續時間過長,那就會發生溢位,在tim2ch1_capture_sta中對溢位進行記數,當最大溢位次數來臨(0~5位都滿了),就強制捕獲完成,把tim2ch1_capture_sta第七位置為1,標記成功捕獲了一次高電平,讀取定時器的捕獲值到tim2ch1_capture_val中,最後再設定為上公升沿捕獲,回到初始狀態。

STM32暫存器與輸入捕獲

以下來至原子教程 輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。stm32 的定時器,除了 tim6 和 tim7,其他定時器都有輸入捕獲功能。stm32 的輸入捕獲,簡單的說就是通過檢測 timx chx 上的 邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將當前定時器的值 timx...

STM32蜂鳴器 暫存器

這次實驗犯了個笑話,竟然在巨集定義後面加分號.就像這樣 define 大家千萬不要學我,結果報錯expected expression,還苦惱半天,想為啥操作不了暫存器了?我真愚蠢!剛開始我也不會寫這些東西,其實摸清套路就好,rcc時鐘使能 gpio初始化 相關暫存器初始化 延時函式 串列埠等初始化...

STM32暫存器對映

1.對映即將記憶體的某段位址與某一暫存器對應,微控制器對函式的操作底層是操作暫存器,而暫存器最終是操作記憶體上對應的單元,2.各個暫存器對應的位址都是在st定義的起始位址上層層偏移得到 3.想要實現某功能可直接對此段記憶體寫進相應的值,即可賦予某一功能 4.stm32底層實際是先定義出外設基位址,然...