資源簡介
stm32RCT6多路超聲波模塊測距(多路定時器輸入捕獲),效果很好
幾年前傳不需要50個字描述,現在為了把系統自動設置的9積分下載改為5積分,就多打了這些字。

代碼片段和文件信息
#include?“stm32f10x.h“
#include?“sys.h“
#include?“delay.h“
#include?“usart.h“
#include?“led.h“
#include?“pwm.h“
#include?“timer2.h“
#include?“lcd.h“
#include?“bizhang.h“
#include?“maichong.h“
/////////////////////////////////////////////////////////////////////////////////////////////
//開發板型號:Mini?STM32開發板
//芯片類型:STM32F103RCT6
//作者:IterrlpointC
//版本:V1.0
//文件名:主函數 ???
//描述:函數初始化及主程序
//修改日期:2016/12/10
//修改內容:無
//修改原因:無
//Copyright(C)2016-Pattern?recognitionIterrlpointC.All?rights?reserved
/////////////////////////////////////////////////////////////////////////////////////////////
extern?u8????TIM2CH1_CAPTURE_STA;?????????????????????????????//輸入捕獲狀態
extern?u16 ?TIM2CH1_CAPTURE_VAL_STATIM2CH1_CAPTURE_VAL_END;?//輸入捕獲開始值,輸入捕獲結束值
extern?u8????TIM2CH2_CAPTURE_STA; ??????????????????????????//輸入捕獲狀態 ????
extern?u16???TIM2CH2_CAPTURE_VAL_STATIM2CH2_CAPTURE_VAL_END; //輸入捕獲開始值,輸入捕獲結束值
int?main(void)
?{
u8??lcd_id[12];??????????????????????????????????//存放LCD?ID字符串
u16?Distance_MidDistance_Right;?????????????????//中間距障距離,右邊距障距離
u32?temp1_TC1=0temp2_TC2=0;?????????????????????//捕獲通道1捕獲溢出次數,捕獲通道2捕獲溢出次數
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);??//設置中斷優先級分組2
delay_init(); ???? ?????????????????????????????//延時函數初始化
uart_init(9600); ? ?????????????????????????//設置串口值為9600 ?
LED_Init(); ?? ???????????????????????????????//初始化與LED連接的硬件接口
LCD_Init();??????????????????????????????????????//初始化LCD液晶顯示函數
MaiChong_Init();?????????????????????????????????//初始化脈沖發送函數
? TIM3_PWM_Init(8990);? ?????????????????????//定時器3不分頻,PWM頻率=72MHz/(899+1)=80Khz
? TIM2_Cap_Init(999972-1); ?????????????????????//定時器2分頻系數72,頻率=72MHz/(71+1)=1MHz
houtui_Init();???????????????????????????????????//初始化小車后退函數
qianjin1_Init();?????????????????????????????????//初始化小車正常前進函數
qianjin2_Init();?????????????????????????????????//初始化警報區小車前進函數
zuozhuang_Init();????????????????????????????????//初始化小車左轉函數
sprintf((char*)lcd_id“LCD?ID:%04X“lcddev.id);??//將LCD?ID打印到lcd_id數組
?
?while(1)
{
/*********************************TIM2通道2輸入捕獲高電平計算距離******************************/ ?
MaiChong1_Start(); ??????????????????????????????????//給第一個超聲波模塊發送脈沖
if(TIM2CH1_CAPTURE_STA&0X80)????????????????????????????//若成功捕獲到了一次高電平(最高位是1)
{
temp1_TC1=TIM2CH1_CAPTURE_STA&0X3F;?????????????????//將計數器溢出次數值賦給temp1_TC1
temp1_TC1*=10000; ??????????????????????????//溢出次數*重裝載值=溢出計數個數總和
if(TIM2CH1_CAPTURE_VAL_END>=TIM2CH1_CAPTURE_VAL_STA)//如果結束值大于等于初始值
{
?temp1_TC1+=(TIM2CH1_CAPTURE_VAL_END-TIM2CH1_CAPTURE_VAL_STA+1);//得到總的高電平時間=溢出總計數個數+最后一次高電平的時間
}
else????????????????????????????????????????????????//如果結束值小于初始值(說明發生至少一次溢出)???????????????????????
??{
?temp1_TC1+=(TIM2CH1_CAPTURE_VAL_STA-TIM2CH1_CAPTURE_VAL_END+1);//得到總的高電平時間=
}
TIM2CH1_CAPTURE_VAL_STA=TIM2CH1_CAPTURE_VAL_END=0;??//結束值和初始值清零
Distance_Mid=temp1_TC1/1000000.0*340/2.0*1000;??????//中間距障距離
? TIM2CH1_CAPTURE_STA=0;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-05-01?11:05??避障\
?????目錄???????????0??2018-05-01?10:30??避障\MAICHONG\
?????文件????????2590??2018-05-01?10:30??避障\MAICHONG\maichong.c
?????文件?????????807??2018-05-01?10:30??避障\MAICHONG\maichong.h
?????文件????????6432??2018-05-01?10:30??避障\main.c
?????目錄???????????0??2018-05-01?10:30??避障\TIMER2\
?????文件????????7778??2018-05-01?10:30??避障\TIMER2\timer2.c
?????文件?????????691??2018-05-01?10:30??避障\TIMER2\timer2.h
?????文件??????????56??2018-05-01?11:06??避障\新建文本文檔.txt
- 上一篇:digsilent 培訓教材
- 下一篇:廣東省智慧醫院建設指引
評論
共有 條評論