OpenEdv-开源电子网

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

PB15作为超声波的发射端,一直出现问题

[复制链接]

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-7-5
在线时间
34 小时
发表于 2016-9-26 11:08:19 | 显示全部楼层 |阅读模式
5金钱
void ultra_init()
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //PE2接受回波,echo1
        GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IN_FLOATING;           
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15; //PB15触发,trig2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;           
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11; //PA11触发,trig1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;           
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_ResetBits(GPIOB,GPIO_Pin_15);
        GPIO_ResetBits(GPIOC,GPIO_Pin_12);
        TIM_DeInit(TIM5);
       
        TIM_TimeBaseStructure.TIM_Period=20000;//超时时间0.02s,最远可测距离3.4m
        TIM_TimeBaseStructure.TIM_Prescaler=72-1;//5us,+1
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //??????
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
        TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);



        NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;  //TIM3??
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;  //?????0?
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //????3?
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?????
        NVIC_Init(&NVIC_InitStructure);  //???NVIC???
        TIM_Cmd(TIM5, DISABLE);
}
void TIM5_IRQHandler()
{
        if(TIM_GetITStatus(TIM5,TIM_IT_Update) == SET)
        {
                TIM_ClearITPendingBit(TIM5,TIM_FLAG_Update);
                overflow++;
        }
}

问题描述:程序采集4路超声波信息,PA11是其中2路的发射端,PB15是另外2路的发射端,利用TIM5作超时处理,PA11和PB15的设置一模一样,但是PA11的2路超声波好使,而PB15的2路一直有问题。PS.程序中还有TIM4作PWM输出,不知道互相影响吗?求高手帮忙看一下

最佳答案

查看完整内容[请看2#楼]

你看下这个寄存器前后对比。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-9-26 11:08:20 | 显示全部楼层
风之次仞 发表于 2016-9-26 14:12
GPIO_SetBits(GPIOB,GPIO_Pin_15);
delay_us(10);
GPIO_ResetBits(GPIOB,GPIO_Pin_15);

你看下这个寄存器前后对比。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-7-5
在线时间
34 小时
 楼主| 发表于 2016-9-26 14:12:51 | 显示全部楼层
GPIO_SetBits(GPIOB,GPIO_Pin_15);
delay_us(10);
GPIO_ResetBits(GPIOB,GPIO_Pin_15);

把这三句注释点 就没有问题了 但是没看出这3句话有啥问题呀
回复

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-7-5
在线时间
34 小时
 楼主| 发表于 2016-9-26 15:01:29 | 显示全部楼层
@原子哥 这是什么原因呢
回复

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-7-5
在线时间
34 小时
 楼主| 发表于 2016-9-26 15:01:40 | 显示全部楼层
@原子哥 这是什么原因呢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-9-29 20:46:50 | 显示全部楼层
看下PB15的波形。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 14:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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