一、輸入捕獲介紹
輸入捕獲模式可以用來測量脈沖寬度或者測量頻率。
除了基本定時器,通用和高級均有輸入捕獲功能。
TIMx_CCMR1(捕獲/比較模式寄存器) - 通道1和2的控制
TIMx_CCMR2(捕獲/比較模式寄存器) - 通道3和4的控制
二、脈寬測量實(shí)現(xiàn)超聲波測距
當(dāng)然還需要配合printf一起使用,
#include "timer.h"
#include
/*TIM3_CH3輸入捕獲初始化*/
TIM_ICInitTypeDef TIM3_ICInitStructure;
void TIM3_Cap_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PB0 輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //PB1輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //2M
GPIO_Init(GPIOB, &GPIO_InitStructure);
//初始化定時器3 TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)定計數(shù)器自動重裝值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //預(yù)分頻器
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數(shù)模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位
//初始化TIM3輸入捕獲參數(shù)
TIM3_ICInitStructure.TIM_Channel = TIM_Channel_3; //CC1S=01 選擇輸入端 IC3映射到TI3上
TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM3_ICInitStructure.TIM_ICFilter = 0x00;//配置輸入濾波器 不濾波
TIM_ICInit(TIM3, &TIM3_ICInitStructure);
//中斷分組初始化
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占優(yōu)先級2級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //從優(yōu)先級0級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC3,ENABLE);//允許更新中斷 ,允許CC3IE捕獲中斷
TIM_Cmd(TIM3,ENABLE ); //使能定時器3
}
/*超聲波回波接收函數(shù)*/
u32 Distance;
u16 TIM3CH3_CAPTURE_STA,TIM3CH3_CAPTURE_VAL;
void Read_Distane(void)
{
PBout(1)=1;
delay_us(15);
PBout(1)=0;
if(TIM3CH3_CAPTURE_STA&0X80)//成功捕獲到了一次高電平
{
Distance=TIM3CH3_CAPTURE_STA&0X3F;
Distance*=65536; //溢出時間總和
Distance+=TIM3CH3_CAPTURE_VAL; //得到總的高電平時間
Distance=Distance*170/1000;
printf("%d \r\n",Distance);
TIM3CH3_CAPTURE_STA=0; //開啟下一次捕獲
}
}
/*超聲波回波脈寬讀取中斷*/
void TIM3_IRQHandler(void)
{
u16 tsr;
tsr=TIM3->SR;
if((TIM3CH3_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if(tsr&0X01)//溢出
{
if(TIM3CH3_CAPTURE_STA&0X40)//已經(jīng)捕獲到高電平了
{
if((TIM3CH3_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM3CH3_CAPTURE_STA|=0X80;//標(biāo)記成功捕獲了一次
TIM3CH3_CAPTURE_VAL=0XFFFF;
}
else
TIM3CH3_CAPTURE_STA++;
}
}
if(tsr&0x08)//捕獲3發(fā)生捕獲事件
{
if(TIM3CH3_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM3CH3_CAPTURE_STA|=0X80; //標(biāo)記成功捕獲到一次高電平脈寬
TIM3CH3_CAPTURE_VAL=TIM3->CCR3; //獲取當(dāng)前的捕獲值.
TIM3->CCER&=~(1<<9); //CC1P=0 設(shè)置為上升沿捕獲
}
else //還未開始,第一次捕獲上升沿
{
TIM3CH3_CAPTURE_STA=0; //清空
TIM3CH3_CAPTURE_VAL=0;
TIM3CH3_CAPTURE_STA|=0X40; //標(biāo)記捕獲到了上升沿
TIM3->CNT=0; //計數(shù)器清空
TIM3->CCER|=1<<9; //CC1P=1 設(shè)置為下降沿捕獲
}
}
}
TIM3->SR=0;//清除中斷標(biāo)志位
}
主函數(shù)
#include "config.h"
#include "led.h"
#include "key.h"
#include "timer.h"
#include "motor.h"
#include "usart.h"
#include
int main(void)
{
uart_init(115200);
printf("HelloWorld\r\n");
TIM3_Cap_Init(0XFFFF,72-1);
while(1)
{
Read_Distane();
delay_ms(200);
}
}
當(dāng)時學(xué)習(xí)的時候也有疑惑的地方,TIM3_ICInitStructure.TIM_Channel = TIM_Channel_3; //CC1S=01 選擇輸入端 IC3映射到TI3上后來在手冊P291找到了相應(yīng)的答案!??!
上一篇:STM32幾種操作的寄存器版本和庫函數(shù)版本對比
下一篇:STM32的重映射功能,以ZET6的TIM3_CH2通道從PA7->PB5為例
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 阿里黑科技落地!夸克AI眼鏡全球首發(fā),高德、淘寶、支付寶都能用
- 化繁為簡, 適配復(fù)雜磁場環(huán)境,MT73xx 3D雙路輸出霍爾鎖存器賦能車規(guī)電機(jī)精準(zhǔn)控制
- 9.5億美元收購恩智浦MEMS傳感器業(yè)務(wù),意法半導(dǎo)體 在傳感器領(lǐng)域的地位再升級
- 高性能電動滑板車 BLDC 電機(jī)驅(qū)動器:技術(shù)解析與應(yīng)用展望
- 5G工業(yè)網(wǎng)關(guān)的“邊緣計算+AI推理”一體化設(shè)計,PLC協(xié)議解析與缺陷檢測的實(shí)時聯(lián)動
- AR眼鏡的“工業(yè)指令投射”系統(tǒng),SLAM的空間定位、PLC數(shù)據(jù)實(shí)時疊加顯示
- 多光譜氣體傳感器的抗交叉干擾設(shè)計
- 多模態(tài)融合感知的“語義-幾何”聯(lián)合建模
- 工業(yè)觸摸屏的“壓感-手勢”多模態(tài)交互設(shè)計
- 工業(yè)機(jī)器人高精度力控的“雙模融合”傳感器設(shè)計
- 兆易創(chuàng)新GD32F350創(chuàng)新設(shè)計大賽
- “USB 3.1 規(guī)范及重要測試需考慮的因素”江湖令,一起在吐槽中成長
- 【EEWORLD第二十八屆】2011年07月社區(qū)明星人物揭曉!
- MPS 送福利 | 商城上線送單,送京東卡,8000元好禮等你拿!
- 是德科技有獎直播:示波器基礎(chǔ)培訓(xùn)
- 高達(dá)270MHz!恩智浦LPC3000系列全套資料
- 專為高性能存儲而優(yōu)化的FPGA芯片, 英特爾®Agilex™ M 系列火熱發(fā)布!
- 【報名贏小米手環(huán)、膳魔師保溫杯等好禮】羅德與施瓦茨HDMI 1.4b/2.1 接口測試
- 助力高效、綠色、安全,與Nexperia一起解密高質(zhì)量汽車設(shè)計秘訣!
- 從NEC開始,介紹史上多款具有里程碑意義的圖形處理芯片
- 高通5G技術(shù)推動工業(yè)物聯(lián)等行業(yè)發(fā)展應(yīng)用 不局限于手機(jī)終端
- 華人機(jī)器人專家席寧博士欺詐指控被永久撤銷
- 美郵遞公司UPS向聯(lián)邦政府申請商用無人機(jī)送貨
- stm32f4 USB BULK 全速配置
- 新版新能源汽車技術(shù)路線圖即將發(fā)布,節(jié)能汽車權(quán)重再提高
- 特斯拉“電池日”有哪些值得期待?
- Covid-19正在重塑微流體市場
- 全新自動駕駛軟件能讓你看到3秒以后的動作
- 英特爾聯(lián)手阿里深化技術(shù)創(chuàng)新,打造數(shù)智新未來
- 請問各位熟悉NFC的朋友,有讓nfc標(biāo)簽失效的命令么
- IMS研究:媒體播放器,個人電腦,顯示驅(qū)動器的數(shù)字標(biāo)牌近收入50億美元(翻譯版)
- 怎樣在編輯框中把字的顯示放大??
- 造車狂想|閱讀 PI 汽車電子資料,說說你對造車的那些看法!
- 有沒有誰用LaunchPad的調(diào)試接口直接到自己的板子上的?
- 使不同兩LED燈亮度一樣 串聯(lián)好還是并聯(lián)好
- 遠(yuǎn)程登錄路由器的設(shè)置
- LM3S8962開發(fā)板以太網(wǎng)開發(fā)筆記
- 一周學(xué)會Linux實(shí)戰(zhàn)
- 驅(qū)動里面CreateThread錯誤