资源简介
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 培训教材
- 下一篇:广东省智慧医院建设指引
评论
共有 条评论