打印

STM32超声波测距小问题

[复制链接]
4014|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
604603487|  楼主 | 2013-6-7 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我同时配置上升沿触发和下降沿触发,在上升沿的时候启动定时器,在下降沿的时候关闭定时器,求距离,但是目前是上升沿触发进不去中断呀,
代码如下:

/*超声波使能引脚定义*/
#define CHAOSHENGBO_1_H         GPIOA->BSRR = GPIO_Pin_11
#define CHAOSHENGBO_1_L         GPIOA->BRR  = GPIO_Pin_11        
#define CHAOSHENGBO_2_H         GPIOA->BSRR = GPIO_Pin_12
#define CHAOSHENGBO_2_L         GPIOA->BRR  = GPIO_Pin_12
#define CHAOSHENGBO_3_H         GPIOA->BSRR = GPIO_Pin_13
#define CHAOSHENGBO_3_L         GPIOA->BRR  = GPIO_Pin_13

#define CHAOSHENGBO1_read_H      GPIOC->IDR  & GPIO_Pin_2
#define CHAOSHENGBO2_read_H      GPIOC->IDR  & GPIO_Pin_3
#define CHAOSHENGBO3_read_H      GPIOC->IDR  & GPIO_Pin_4
/*
********************************************************************************
** 函数名称 : INIT_EXIT(void)
** 函数功能 : 外部中断初始化
** 输    入        : 无
** 输    出        : 无
** 返    回        : 无
********************************************************************************
*/
void INIT_EXIT(void)
{                             

    RCC->APB2ENR |= 0X00000001;                     // enable clock for Alternate Function
    AFIO->EXTICR[0] &= 0xFFFF;                              // clear used pin
    AFIO->EXTICR[0] |= (0xFFFF & 0x2222);           // set pin to use
        AFIO->EXTICR[1] &= 0xFFFF;                              // clear used pin
    AFIO->EXTICR[1] |= (0xFFFF & 0x0002);           // set pin to use

    EXTI->IMR       |= ((1 << 0) & 0X0000000F);             // unmask interrupt
    EXTI->EMR       |= ((1 << 0) & 0X00000000);             // unmask event
    EXTI->RTSR      |= ((1 << 0) & 0X0000000F);            // set rising edge
    EXTI->FTSR      |= ((1 << 0) & 0X00000000);            // set falling edge

    EXTI->IMR       |= ((1 << 1) & 0X0000000F);             // unmask interrupt
    EXTI->EMR       |= ((1 << 1) & 0X00000000);             // unmask event
    EXTI->RTSR      |= ((1 << 1) & 0X0000000F);            // set rising edge
    EXTI->FTSR      |= ((1 << 1) & 0X00000000);            // set falling edge

        EXTI->IMR       |= ((1 << 2) & 0X0000000F);             // unmask interrupt
    EXTI->EMR       |= ((1 << 2) & 0X00000000);             // unmask event
    EXTI->RTSR      |= ((1 << 2) & 0X0000000F);            // set rising edge
    EXTI->FTSR      |= ((1 << 2) & 0X0000000F);            // set falling edge

        EXTI->IMR       |= ((1 << 3) & 0X0000000F);             // unmask interrupt
    EXTI->EMR       |= ((1 << 3) & 0X00000000);             // unmask event
    EXTI->RTSR      |= ((1 << 3) & 0X0000000F);            // set rising edge
    EXTI->FTSR      |= ((1 << 3) & 0X0000000F);            // set falling edge

        EXTI->IMR       |= ((1 << 4) & 0X0000000F);             // unmask interrupt
    EXTI->EMR       |= ((1 << 4) & 0X00000000);             // unmask event
    EXTI->RTSR      |= ((1 << 4) & 0X0000000F);            // set rising edge
    EXTI->FTSR      |= ((1 << 4) & 0X0000000F);            // set falling edge

          NVIC->ISER[0] |= (1 << (EXTI0_IRQChannel & 0x1F));    // enable interrupt EXTI 0
      NVIC->ISER[0] |= (1 << (EXTI1_IRQChannel & 0x1F));    // enable interrupt EXTI 1
          NVIC->ISER[0] |= (1 << (EXTI2_IRQChannel & 0x1F));    // enable interrupt EXTI 2
      NVIC->ISER[0] |= (1 << (EXTI3_IRQChannel & 0x1F));    // enable interrupt EXTI 3
          NVIC->ISER[0] |= (1 << (EXTI4_IRQChannel & 0x1F));    // enable interrupt EXTI 4

  }


/*
********************************************************************************
** 函数名称 : EXTI2_IRQHandler(void)
** 函数功能 : 右轮计数中断
** 输    入        : 无
** 输    出        : 无
** 返    回        : 无
********************************************************************************
*/
void EXTI2_IRQHandler(void)
{
  if (EXTI->PR & (1<<2)) {                       // 是否是外部中断2
       if(CHAOSHENGBO1_read_H==1){
           //启动定时器
            count=0;       
            TIM3->CNT=0;   
        TIM_Cmd(TIM3, ENABLE);        //开启时钟
                }
           else{
           //关闭定时器
            TIM_Cmd(TIM3, DISABLE);        //开启时钟
                count=TIM3->CNT;
                juli=(17/1000)*count;
                if(juli<25)
                    zhangai_qian=1;
                else
                    zhangai_qian=0;
        }       
    EXTI->PR |= (1<<2);                          // 清除中断标志
  }
}
沙发
trumpxp| | 2013-6-7 18:54 | 只看该作者
不错的代码   谢谢了   楼主   顶一个  很好  很强大   顶一个

使用特权

评论回复
板凳
604603487|  楼主 | 2013-6-8 12:32 | 只看该作者
我遇到问题了,把TIM3改成TIM5,同样初始化的TIM3改成TIM5,结果TIM5不工作

使用特权

评论回复
地板
cym_anhui| | 2013-6-9 14:44 | 只看该作者
STM32好像没有一个好的FAE来解决网上的问题

使用特权

评论回复
5
604603487|  楼主 | 2013-6-13 09:07 | 只看该作者
我知道我错了,芯片选型表没看,RBT6没有TIM5

使用特权

评论回复
6
035197_X| | 2013-7-24 10:28 | 只看该作者
不错,顶一个!

使用特权

评论回复
7
jazzyfox| | 2014-4-8 09:33 | 只看该作者
楼主程序写的好,完全是可以copy的节奏

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

926

帖子

12

粉丝