初级会员

- 积分
- 62
- 金钱
- 62
- 注册时间
- 2016-3-25
- 在线时间
- 12 小时
|
发表于 2016-4-8 17:57:43
|
显示全部楼层
原子哥我改了两个超声波,单个都能实现,但是两个一起就出问题了[mw_shl_code=c,true]#include "UltrasonicWave.h"
#include "usart.h"
#include "timer.h"
#include "delay.h"
#define TRIG_PORT GPIOC //TRIG
#define ECHO_PORT GPIOC //ECHO
#define TRIG_0_PIN GPIO_Pin_8 //TRIG
#define TRIG_1_PIN GPIO_Pin_2 //TRIG
#define ECHO_0_PIN GPIO_Pin_7 //ECHO
#define ECHO_1_PIN GPIO_Pin_1 //ECHO
float UltrasonicWave_Distance0; //¼ÆËã3öμľààë
float UltrasonicWave_Distance1;
/*
* oˉêyÃû£oUltrasonicWave_Configuration
* Ãèêö £o3¬éù2¨Ä£¿éμÄ3õê¼»ˉ
* êäèë £oÎT
* êä3ö £oÎT
*/
void UltrasonicWave_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //1رÕjtag
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = TRIG_0_PIN|TRIG_1_PIN; //PC8£¬2½óTRIG
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //éèÎaíÆíìêä3öÄ£ê½
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(TRIG_PORT, &GPIO_InitStructure); //3õê¼»ˉíaéèGPIO
GPIO_InitStructure.GPIO_Pin = ECHO_0_PIN|ECHO_1_PIN; //PC7£¬1½óECH0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //éèÎaêäèë
GPIO_Init(ECHO_PORT,&GPIO_InitStructure); //3õê¼»ˉGPIO
//GPIOC.7 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖÃ
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource7);
EXTI_InitStructure.EXTI_Line=EXTI_Line7;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource1);
EXTI_InitStructure.EXTI_Line=EXTI_Line1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÇàÕ¼óÅÏè¼¶2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×óóÅÏè¼¶2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äüía2¿ÖD¶Ïí¨μà
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÇàÕ¼óÅÏè¼¶2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×óóÅÏè¼¶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äüía2¿ÖD¶Ïí¨μà
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
}
void EXTI9_5_IRQHandler(void)
{
delay_us(10); //Ñóê±10us
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
{
TIM_SetCounter(TIM2,0);
TIM_Cmd(TIM2, ENABLE); //¿aÆôê±Öó
while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_0_PIN)); //μè′yμíμçÆ½
TIM_Cmd(TIM2, DISABLE); //¶¨ê±Æ÷2ê§Äü
UltrasonicWave_Distance0=TIM_GetCounter(TIM2)*34/20.0; //¼ÆËã¾ààë
if((UltrasonicWave_Distance0>2)&&(UltrasonicWave_Distance0<20))
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
printf("distance0:%f cm\n",UltrasonicWave_Distance0);
}else
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
EXTI_ClearITPendingBit(EXTI_Line7); //Çå3yEXTI7Ïß·1òÆeλ
}
}
void EXTI1_IRQHandler(void)
{
delay_us(10); //Ñóê±10us
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
{
TIM_SetCounter(TIM2,0);
TIM_Cmd(TIM2, ENABLE); //¿aÆôê±Öó
while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_1_PIN)); //μè′yμíμçÆ½
TIM_Cmd(TIM2, DISABLE); //¶¨ê±Æ÷2ê§Äü
UltrasonicWave_Distance1=TIM_GetCounter(TIM2)*34/20.0; //¼ÆËã¾ààë
if((UltrasonicWave_Distance1>2)&&(UltrasonicWave_Distance1<20))
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
printf("distance1:%f cm\n",UltrasonicWave_Distance1);
}else
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
EXTI_ClearITPendingBit(EXTI_Line1); //Çå3yEXTI1Ïß·1òÆeλ
}
}
/*
* oˉêyÃû£oUltrasonicWave_StartMeasure
* Ãèêö £o¿aê¼2a¾à£¬·¢Ëíò»¸ö>10usμÄÂö3壬è»oó2aá¿·μ»ØμĸßμçÆ½ê±¼ä
* êäèë £oÎT
* êä3ö £oÎT
*/
void UltrasonicWave_StartMeasure_0(void)
{
GPIO_SetBits(TRIG_PORT,TRIG_0_PIN); //Ëí>10USμĸßμçÆ½£TRIG_PORT,TRIG_PINÕaὸöÔúdefineÖDóD?
delay_us(20); //Ñóê±20US
GPIO_ResetBits(TRIG_PORT,TRIG_0_PIN);
}
void UltrasonicWave_StartMeasure_1(void)
{
GPIO_SetBits(TRIG_PORT,TRIG_1_PIN); //Ëí>10USμĸßμçÆ½£TRIG_PORT,TRIG_PINÕaὸöÔúdefineÖDóD?
delay_us(20); //Ñóê±20US
GPIO_ResetBits(TRIG_PORT,TRIG_1_PIN);
}
[/mw_shl_code] |
|