日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2024年12月13日(星期五)

正在發(fā)生

2018年12月13日 | STM32之輸入捕獲介紹及應(yīng)用超聲波應(yīng)用

發(fā)布者:溫暖陽光 來源: eefocus關(guān)鍵字:STM32  輸入捕獲  超聲波應(yīng)用 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

一、輸入捕獲介紹


輸入捕獲模式可以用來測量脈沖寬度或者測量頻率。


除了基本定時器,通用和高級均有輸入捕獲功能。


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)的答案!??!


在這里插入圖片描述

關(guān)鍵字:STM32  輸入捕獲  超聲波應(yīng)用 引用地址:STM32之輸入捕獲介紹及應(yīng)用超聲波應(yīng)用

上一篇:STM32幾種操作的寄存器版本和庫函數(shù)版本對比
下一篇:STM32的重映射功能,以ZET6的TIM3_CH2通道從PA7->PB5為例

推薦閱讀

1、USART1接收完成標(biāo)志檢測USART1->SR&0X40 == 0USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET2、USART1發(fā)送數(shù)據(jù)USART1->DR = (u8) ch;USART_SendData(USART1,(u8)ch);
當(dāng)前商界的發(fā)展日新月異,未來幾年這種變化的速度還會更快。如今,消費(fèi)者期望在所有零售渠道(實(shí)體店、網(wǎng)店和移動商店)獲得一致的購買體驗(yàn)。這種多渠道的業(yè)務(wù)模式稱之為全渠道模式。 從傳統(tǒng)零售到全渠道零售,技術(shù)在標(biāo)準(zhǔn)實(shí)體店(包括倉庫)的變革中發(fā)揮著重要作用,旨在讓消費(fèi)者獲得無縫的購物體驗(yàn)。 這一目標(biāo)牽涉到供應(yīng)鏈的各個環(huán)節(jié) — 產(chǎn)品、庫存、倉庫...
據(jù)EE Times報道,近日,一家位于美國加州森尼維爾的小型電子設(shè)計公司Micro Magic宣稱設(shè)計、生產(chǎn)出了全世界最快的64位RISC-V內(nèi)核,比蘋果的M1 芯片和 Arm Cortex-A9 表現(xiàn)還要出色。 據(jù)Micro Magic的聲明,這款原型CPU在1.1v電壓下可以達(dá)到5GHz的時鐘速度,遠(yuǎn)高于運(yùn)行速度為3.2GHz的英特爾Xeon服務(wù)器芯片E7,CoreMarks跑分達(dá)到13000分。...
中國儲能網(wǎng)訊:12月6日,國網(wǎng)浙江省電力有限公司和中國移動浙江公司、華為技術(shù)有限公司等單位共同開展5G硬切片秒級可中斷負(fù)荷終端設(shè)備調(diào)試工作。此前,國網(wǎng)浙江電力和南瑞集團(tuán)有限公司合作開發(fā)的浙江省首個5G硬切片秒級可中斷負(fù)荷終端設(shè)備在寧波試點(diǎn)投運(yùn)。 傳統(tǒng)電網(wǎng)受到技術(shù)條件限制,因異常情況導(dǎo)致供電能力下降后,各級調(diào)度機(jī)構(gòu)為確保大電網(wǎng)穩(wěn)定運(yùn)行...

史海拾趣

小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved