OpenEdv-开源电子网

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

超声测距代码

[复制链接]

13

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2011-8-20
在线时间
3 小时
发表于 2012-2-19 16:36:48 | 显示全部楼层 |阅读模式
     经过将近四天的调试,终于检测到超声回波高电平信号的宽度了,在这儿把代码贴出来,让那些还在苦苦奋斗的同志们,省点时间。本人用的模块是HC-SR04。
     我的思路是:
           在主函数里一直发高低脉冲;
           然后把超声波接收回波信号的引脚, 设置为浮空输入,并且设置为上升沿中断:
           在中断服务函数里,开关定时器,统计高脉冲宽度。
    把主要代码贴出来,供大家参考。我的这个代码也是参照网上同志们的代码写出来的,在这儿感谢同志们的无私奉献。谢谢!

int main(void)
{
  Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);     //延时初始化
uart_init(72,9600);  //串口初始化 
LED_Init();   //初始化与LED连接的硬件接口
EXTIX_Init(); //PA13设置为上升沿中断
Timerx_Init(59999,71);//10Khz的计数频率,计数到5000为500ms  
    while(1)
{
PAout(2)=1;delay_us(15); // 15us高电平,让超声波模块开始工作
PAout(2)=0;delay_ms(100);
  
}  
}

void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2;     //使能PORTA时钟
RCC->APB2ENR|=1<<0;     //开启辅助时钟  
AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
AFIO->MAPR|=0X04000000; //关闭JTAG    

GPIOA->CRH&=0XFF0FFFFF;//PA13设置成输入   
GPIOA->CRH|=0X00800000;
        
GPIOA->CRH&=~(1<<13);  
  
Ex_NVIC_Config(GPIO_A,13,RTIR);//上降沿触发

MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2    
}

//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{
double dis;
LED1 = 0;// 调试用的
TIM3->CNT=0;
TIM3->CR1|=0x01;
while(PAin(13)==1);
TIM3->CR1&=~(1<<1);
dis = (double)((340.0*TIM3->CNT)/(2*1000)); //测得的距离值的单位是mm
printf("%.6lf ",dis);

EXTI->R=1<<13;     //清除LINE13上的中断标志位  
 }

void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3时钟使能    
  TIM3->ARR=arr;  //设定计数器自动重装值//刚好1ms    
TIM3->SC=psc;  //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
// TIM3->DIER|=1<<0;   //允许更新中断
// TIM3->DIER|=1<<6;   //允许触发中断
     
// TIM3->CR1|=0x01;    //使能定时器3
 // MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2  
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-5-30
在线时间
0 小时
发表于 2013-6-5 20:01:30 | 显示全部楼层
正好再弄这个,想着把51的程序翻译过来,不过技术有限,弄了好久,现在终于···要多谢你的帮助了,感谢!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 02:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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