OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10140|回复: 10

定时器超声波测距问题。原子哥求救。。。

[复制链接]

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
886
金钱
886
注册时间
2011-12-25
在线时间
12 小时
发表于 2012-4-8 00:40:51 | 显示全部楼层 |阅读模式
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h" 
#include "lcd.h"
#include "timer.h"
#include "chao.h"
#include "fat.h"
#include "fontupd.h"
#include "flash.h" 
#include "spi.h"
#include "fat.h"
#include "text.h"
  
extern u8 flag;
long S=0;
u8 disbuff[4]={0,0,0,0,};

void  StartModule()         
{
 TX=1;               
 delay_us(25);
 TX=0;
 delay_us(300);
}

void Count()
{
   if(flag==0)
   {
    S=(TIM3->CNT*340.0000/2000);
disbuff[0]=S/1000;
disbuff[1]=S%1000/100;
disbuff[2]=S%1000%100/10;
disbuff[3]=S%1000%10%10;
LED0=!LED0;
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowNum(142,150,disbuff[0],1,16);
LCD_ShowNum(150,150,disbuff[1],1,16);
LCD_ShowNum(158,150,disbuff[2],1,16);
LCD_ShowNum(166,150,disbuff[3],1,16);
   }
   else
   {
    POINT_COLOR=BLUE;
    Show_Str(30,170,"所测得距离超过规定的范围",16,0);
   }  
}

int main(void)
{
  u8 i;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化  
LED_Init();
  LCD_Init();
Timerx_Init(60000,71);
SPI_Flash_Init(); //SPI FLASH初始化 
if(Font_Init())//字库不存在,则更新字库
{
POINT_COLOR=RED;      
LCD_Clear(WHITE);
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"Font Updating...");  
//字体更新 
SD_Initialize(); //初始化SD卡     
while(FAT_Init()) //FAT 错误
{
LCD_ShowString(60,90,"FAT SYS ERROR");  
i= SD_Initialize();
if(i)//SD卡初始化 
{  
LCD_ShowString(60,110,"SD_CARD ERROR");
}  
delay_ms(500);
LCD_Fill(60,90,240,126,WHITE);//清除显示  
delay_ms(500);
LED0=!LED0;   
}  
LCD_Fill(60,90,240,126,WHITE);//清除显示  
while(Update_Font()!=0)//字体更新出错
{  
LCD_ShowString(60,90,"SYSTEM FILE LOST");  
delay_ms(500);    
LCD_ShowString(60,90,"Please Check....");
delay_ms(500);    
LED0=!LED0;
};  
LCD_Clear(WHITE);
}    
POINT_COLOR=RED;
Show_Str(30,150,"显示测距距离:0000毫米",16,0);
Show_Str(30,30,"无线传输超声波测距",16,0);
Show_Str(30,50,"移植正点原子的程序",16,0);
Show_Str(30,110,"奋斗STM32移植程序",16,0);
    while(1)
{
StartModule();
while(RX==0); //当RX为零时等待
TIM3->CNT=0;
TIM3->CR1|=0x01;    //使能定时器3    //开启计数
while(RX==1); //当RX为1计数并等待  
TIM3->CR1&=0xfffe;    //使能定时器3
          Count(); //计算
delay_ms(200);
}
}

#include "timer.h"
#include "led.h"

u8 flag;
//定时器3中断服务程序  
void TIM3_IRQHandler(void)
{          
if(TIM3->SR&0X0001)//溢出中断
{
 LED1=!LED1;
 flag=1;              
}   
TIM3->SR&=~(1<<0);//清除中断标志位    
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3时钟使能    
  TIM3->ARR=arr;  //设定计数器自动重装值    
TIM3->SC=psc;  //预分频器72,得到1MHZ的计数时钟
// //这两个东东要同时设置才可以使用中断
// TIM3->DIER|=1<<0;   //允许更新中断
// TIM3->DIER|=1<<6;   //允许触发中断
     
  MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,?  
}
这样程序 距离可以测得出来。。但是把定时器中断范围了开了就不行了,我想测得距离不能超过超声波模块的距离
TIM3->DIER|=1<<0;   //允许更新中断
TIM3->DIER|=1<<6;   //允许触发中断

哪里出了问题啊。。







超声波测距.rar

1.47 MB, 下载次数: 2257

很喜爱电子行业
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
886
金钱
886
注册时间
2011-12-25
在线时间
12 小时
 楼主| 发表于 2012-4-8 19:48:18 | 显示全部楼层
原子哥,有看一下。知道看别人的程序很痛苦啊。。
很喜爱电子行业
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-4-8 23:37:56 | 显示全部楼层
真的很痛苦...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2012-4-9
在线时间
0 小时
发表于 2012-4-19 16:46:51 | 显示全部楼层
回复【楼主位】冰是睡着的水:
---------------------------------
楼主好,你现在超声波测距的程序应该成功了吧,能不能给我啊………………
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2012-4-9
在线时间
0 小时
发表于 2012-4-19 16:50:09 | 显示全部楼层
回复【楼主位】冰是睡着的水:
---------------------------------
我的邮箱:1192472945@qq.com
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2012-4-9
在线时间
0 小时
发表于 2012-4-19 16:50:53 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥有没有超声波测距的程序啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-4-19 17:18:33 | 显示全部楼层
没有.
回复 支持 反对

使用道具 举报

8

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2013-7-13
在线时间
24 小时
发表于 2013-9-4 16:55:14 | 显示全部楼层
回复【楼主位】冰是睡着的水:
---------------------------------
楼主问题解决了吗?可以共享一STM32下超声波测速的代码?谢谢!
。。。
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2013-11-27
在线时间
12 小时
发表于 2014-1-13 21:16:46 | 显示全部楼层
回复【4楼】cortex:
--------------------------------恩恩,这个可以
回复 支持 反对

使用道具 举报

20

主题

153

帖子

2

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-12-23
在线时间
1 小时
发表于 2014-5-24 11:31:49 | 显示全部楼层
回复【2楼】冰是睡着的水:
---------------------------------
程序弄好了么?能否发上来共享,或者发至我邮箱:924097675@qq。com,谢谢!
回复 支持 反对

使用道具 举报

24

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2014-5-19
在线时间
28 小时
发表于 2014-9-29 09:59:46 | 显示全部楼层
程序里有个变量和计算距离函数是同名的,这里不会冲突吧?有调好的程序吗,发上来给大家分享一下呗,谢谢啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 21:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表