久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于STM32F103ZET6單片機(jī)的超聲波程序(兩個超聲波)
[打印本頁]
作者:
罹墨1993
時間:
2017-5-12 16:49
標(biāo)題:
基于STM32F103ZET6單片機(jī)的超聲波程序(兩個超聲波)
分享一個超聲波的程序,實(shí)測可用。
0.png
(62.05 KB, 下載次數(shù): 72)
下載附件
2017-5-12 17:34 上傳
單片機(jī)源程序如下:
#include "tim_wave.h"
#include "systick.h"
#include "usart.h"
#include "bsp_led.h"
#include "wave3.h"
// 中斷優(yōu)先級配置
static void GENERAL_TIM_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 設(shè)置中斷組為0
NVIC_InitStructure.NVIC_IRQChannel = WAVE_TIM_IRQ ; // 設(shè)置中斷來源
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 設(shè)置主優(yōu)先級為 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 設(shè)置搶占優(yōu)先級為3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
static void GENERAL_TIM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 輸入捕獲通道 GPIO 初始化
RCC_APB2PeriphClockCmd(WAVE1_TIM_CH1_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = WAVE1_TIM_CH1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(WAVE1_TIM_CH1_PORT, &GPIO_InitStructure);
/*-----------------------------------------------------------------------------------------------------------------*/
RCC_APB2PeriphClockCmd(WAVE2_TIM_CH1_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = WAVE2_TIM_CH1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(WAVE2_TIM_CH1_PORT, &GPIO_InitStructure);
/*-----------------------------------------------------------------------------------------------------------------*/
}
///*
// * 注意:TIM_TimeBaseInitTypeDef結(jié)構(gòu)體里面有5個成員,TIM6和TIM7的寄存器里面只有
// * TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的時候只需初始化這兩個成員即可,
// * 另外三個成員是通用定時器和高級定時器才有.
// *-----------------------------------------------------------------------------
// *typedef struct
// *{ TIM_Prescaler 都有
// * TIM_CounterMode TIMx,x[6,7]沒有,其他都有
// * TIM_Period 都有
// * TIM_ClockDivision TIMx,x[6,7]沒有,其他都有
// * TIM_RepetitionCounter TIMx,x[1,8,15,16,17]才有
// *}TIM_TimeBaseInitTypeDef;
// *-----------------------------------------------------------------------------
// */
/* ---------------- PWM信號 周期和占空比的計(jì)算--------------- */
// ARR :自動重裝載寄存器的值
// CLK_cnt:計(jì)數(shù)器的時鐘,等于 Fck_int / (psc+1) = 72M/(psc+1)
// PWM 信號的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
// 占空比P=CCR/(ARR+1)
static void GENERAL_TIM_Mode_Config(void)
{
// 開啟定時器時鐘,即內(nèi)部時鐘CK_INT=72M
WAVE_TIM_APBxClock_FUN(WAVE_TIM_CLK,ENABLE);
/*--------------------時基結(jié)構(gòu)體初始化-------------------------*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 自動重裝載寄存器的值,累計(jì)TIM_Period+1個頻率后產(chǎn)生一個更新或者中斷
TIM_TimeBaseStructure.TIM_Period=WAVE_TIM_PERIOD;
// 驅(qū)動CNT計(jì)數(shù)器的時鐘 = Fck_int/(psc+1)
TIM_TimeBaseStructure.TIM_Prescaler= WAVE_TIM_PSC;
// 時鐘分頻因子 ,配置死區(qū)時間時需要用到
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
// 計(jì)數(shù)器計(jì)數(shù)模式,設(shè)置為向上計(jì)數(shù)
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
// 重復(fù)計(jì)數(shù)器的值,沒用到不用管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// 初始化定時器
TIM_TimeBaseInit(WAVE_TIM, &TIM_TimeBaseStructure);
/*--------------------輸入捕獲結(jié)構(gòu)體初始化-------------------*/
TIM_ICInitTypeDef TIM_ICInitStructure;
// 配置輸入捕獲的通道,需要根據(jù)具體的GPIO來配置
TIM_ICInitStructure.TIM_Channel = WAVE1_TIM_CHANNEL_x;
// 輸入捕獲信號的極性配置
TIM_ICInitStructure.TIM_ICPolarity = WAVE_TIM_STRAT_ICPolarity;
// 輸入通道和捕獲通道的映射關(guān)系,有直連和非直連兩種
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
// 輸入的需要被捕獲的信號的分頻系數(shù)
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
// 輸入的需要被捕獲的信號的濾波系數(shù)
TIM_ICInitStructure.TIM_ICFilter = 0;
// 定時器輸入捕獲初始化
TIM_ICInit(WAVE_TIM, &TIM_ICInitStructure);
/*---------------------------------------------------------------------------------------------------------------*/
TIM_ICInitStructure.TIM_Channel = WAVE2_TIM_CHANNEL_x;
// 輸入捕獲信號的極性配置
TIM_ICInitStructure.TIM_ICPolarity = WAVE_TIM_STRAT_ICPolarity;
// 輸入通道和捕獲通道的映射關(guān)系,有直連和非直連兩種
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
// 輸入的需要被捕獲的信號的分頻系數(shù)
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
// 輸入的需要被捕獲的信號的濾波系數(shù)
TIM_ICInitStructure.TIM_ICFilter = 0;
// 定時器輸入捕獲初始化
TIM_ICInit(WAVE_TIM, &TIM_ICInitStructure);
/*---------------------------------------------------------------------------------------------------------------*/
// 清除更新和捕獲中斷標(biāo)志位
TIM_ClearFlag(WAVE_TIM, TIM_FLAG_Update|WAVE1_TIM_IT_CCx|WAVE2_TIM_IT_CCx);
// 開啟更新和捕獲中斷
TIM_ITConfig (WAVE_TIM, TIM_IT_Update |WAVE1_TIM_IT_CCx|WAVE2_TIM_IT_CCx, ENABLE );
// 使能計(jì)數(shù)器
TIM_Cmd(WAVE_TIM, ENABLE);
}
static void WAVE_TRIG_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義TRIG_GPIO結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(WAVE1_TRIG_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = WAVE1_TRIG_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(WAVE1_TRIG_GPIO_PORT, &GPIO_InitStructure);
/*------------------------------------------------------------------------------------------------------------------*/
RCC_APB2PeriphClockCmd(WAVE2_TRIG_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = WAVE2_TRIG_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(WAVE2_TRIG_GPIO_PORT, &GPIO_InitStructure);
/*------------------------------------------------------------------------------------------------------------------*/
}
void WAVE_Start(void)
{
//Time_Start();
GPIO_SetBits(WAVE1_TRIG_GPIO_PORT,WAVE1_TRIG_GPIO_PIN);
GPIO_SetBits(WAVE2_TRIG_GPIO_PORT,WAVE2_TRIG_GPIO_PIN);
SysTick_Delay_us(20);
GPIO_ResetBits(WAVE1_TRIG_GPIO_PORT,WAVE1_TRIG_GPIO_PIN);
GPIO_ResetBits(WAVE2_TRIG_GPIO_PORT,WAVE2_TRIG_GPIO_PIN);
//SysTick_Delay_ms(20);
}
extern float Distance1,Distance2;
extern u8 W1_TIM3CH1_CAPTURE_STA,W2_TIM3CH1_CAPTURE_STA; //輸入捕獲狀態(tài)
//bit7:捕獲完成標(biāo)志
//bit6:捕獲到高點(diǎn)平標(biāo)志
//bit5~0:捕獲到高電平后定時器溢出的次數(shù)
extern u32 W1_TIM3CH1_CAPTURE_VAL,W2_TIM3CH1_CAPTURE_VAL;//輸入捕獲值
uint32_t time1,time2;
void Dis_Print(void)
{
if(W1_TIM3CH1_CAPTURE_STA&0X80) //成功捕獲到了一次高電平
{
time1=W1_TIM3CH1_CAPTURE_STA&0X3F;
time1*=5000; //溢出時間總和
time1+=W1_TIM3CH1_CAPTURE_VAL; //得到總的高電平時間
Distance1=time1*340/200.0;
//printf("Distance1:%f cm\r\n",Distance1);
//printf("Time1:%d s\r\n",time1);
W1_TIM3CH1_CAPTURE_STA=0; //開啟下一次捕獲
}
if(W2_TIM3CH1_CAPTURE_STA&0X80) //成功捕獲到了一次高電平
{
time2=W2_TIM3CH1_CAPTURE_STA&0X3F;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
tim_wave.rar
(3.02 KB, 下載次數(shù): 172)
2017-5-12 16:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
asdwqw
時間:
2018-5-7 11:34
只有.c文件,沒有工程文件
作者:
zhou792008
時間:
2018-5-7 22:15
幸苦了!
作者:
zhou792008
時間:
2018-5-7 22:17
樓主請問你這個是控制多少w的頭子的,能交流一下電路嗎?
作者:
大bai
時間:
2018-8-19 13:27
謝謝!
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
五月婷婷丁香花
|
天天干天天操天天
|
国产精品一区二区免费
|
国产成人99久久亚洲综合精品
|
久久久亚洲一区
|
国产一区二区中文字幕
|
两性午夜视频
|
成人在线免费视频
|
√天堂资源地址在线官网
|
欧美日韩在线一区二区
|
国产一区在线视频
|
av在线免费网站
|
中国一级黄色
|
天天操天天干天天爽
|
精品视频999
|
国产一级黄色大片
|
伊人激情网
|
神马九九
|
狠狠干在线
|
在线国产91
|
中文字幕免费
|
特级黄色大片
|
日本一区二区三区在线视频
|
亚洲伦理在线观看
|
免费色片
|
久久久黄色片
|
日本亚洲欧美
|
日韩和的一区二区
|
国产在线天堂
|
国产精品第二页
|
中国av在线
|
一级免费毛片
|
av中文网
|
特黄aaaaaaaaa真人毛片
|
国产精品视频网站
|
欧美一级特黄视频
|
av片在线观看
|
四虎在线免费观看视频
|
538精品视频
|
成人国产网站
|
成人精品国产
|