首页 > 其他分享 >STM32超声波模块问题

STM32超声波模块问题

时间:2024-02-11 12:44:21浏览次数:33  
标签:定时器 TIM6 STM32 TIM TimeBaseInitStruct 模块 InitStruct GPIO 超声波

先写没问题用法,有问题的语法就不示范

void Sr04_Init(void){

    GPIO_InitTypeDef    GPIO_InitStruct;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;



    //打开GPIO组时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
    //1、能定时器时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4;         //引脚
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;     //输入模式
    GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;    //推挽
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_25MHz; //速度
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;  //上拉
    GPIO_Init(GPIOA,&GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;         //引脚
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;     //输出模式
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;  //上拉
    GPIO_Init(GPIOB,&GPIO_InitStruct);

    TIM_TimeBaseInitStruct.TIM_Prescaler=84-1;                  // 84分频 84MHZ/84 = 1MHZ
    TIM_TimeBaseInitStruct.TIM_Period=50000-1;
    TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;    // 向上计数
    TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;            // 分频因子
    //2、初始化定时器,配置ARR,PSC
    TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStruct);

    //5,不使能定时器
    TIM_Cmd(TIM6,DISABLE);
}

int Get_Sr04_Value(void){
    int temp=0,dis=0,t=0;
    //PA2输出低电平
    PBout(7)=0;

    delay_us(8);
    //PA2输出高电平
    PBout(7)=1;
    delay_us(20);
    //PA2输出低电平
    PBout(7)=0;

    //设置定时器的CNT为0  
    TIM6->CNT=0;


    //PA3等待高电平到来,参考按键松开代码 
    printf("Get_Sr04_Value 68\r\n");
    while(PAin(4)==0){

    }

    //使能定时器开始计数
    TIM_Cmd(TIM6,ENABLE);

    printf("Get_Sr04_Value 77\r\n");
    t=0;
    //PA3等待低电平到来,
    while(PAin(4)==1){

    }
    printf("Get_Sr04_Value 84\r\n");

    //获取定时器CNT值,从而得到高电平持续时间    
    temp=TIM6->CNT;

    //关闭定时器
    TIM_Cmd(TIM6,DISABLE);

    //通过公式计算出超声波测量距离    
    dis=temp/58;


    return dis;
}

int main(void) {     int dis = 0;


    //超声波测距
    u16 static cnt1;if(cnt1++%(2*1000)==0)dis = Get_Sr04_Value();

}

超声波模块卡住在

等待高电平到来
现象1:一开始测距就卡
原因1.脚初始化模式不对
解法:一定要超声波trig脚连接的那个脚设置输出模式,超声波echo叫连的那个叫设置输入模式

现象2:第一次可以,后面才卡的

原因2:运行速度太快了,传输速度跟不上

解法2:循环中增加延时时间

标签:定时器,TIM6,STM32,TIM,TimeBaseInitStruct,模块,InitStruct,GPIO,超声波
From: https://www.cnblogs.com/xuweihui/p/18013313

相关文章

  • STM32打印掺杂乱码
    问题:STM32打印掺杂乱码 原因:时钟太快了(不要以为是电磁干扰,接触不良,硬件出问题,多想想在发现这种情况之前做了什么操作)问题:为什么之前好好的,现在不行了原因:安装CubeMX导致的,具体原因不清楚解法:根据外部晶振调对时钟频率 效果: ......
  • golang类型转换模块之gconv
    gf框架提供了非常强大的类型转换包gconv,可以实现将任何数据类型转换为指定的数据类型,对常用基本数据类型之间的无缝转换,同时也支持任意类型到struct对象的属性赋值。由于gconv模块内部大量使用了断言而非反射(仅struct转换使用到了反射),因此执行的效率非常高。使用方式:import"g......
  • Python中的包模块引用成员的方法
    在Python中,包(package)和模块(module)是组织和管理代码的重要方式。将代码分成不同的模块或包可以更好地组织代码结构,使代码更易于维护和管理。说的通俗点,就是将代码整理成一块一块,然后使用时候相互拼接完成就可以使用,这样的好处是可用性高而且非常方便维护,尤其是在选择大型爬虫项目的......
  • 模块化全局指令调用 - 我的世界OCO指令系列
    最近在搞我的世界指令的模块化。本指令不需要引用任何模块。意义计分板和标签经常作为模块化的入口,然而当我们的操作不具体到实体时,如何才能保证有一个可供我们随意添加标签和计分项目的实体来供我们调用其他模块呢?一个简单的方法是弄一个盔甲架,用特殊的标签标记它,尽量让它......
  • 小兔鲜儿 uniapp - 首页模块 请求封装2月摸鱼计划04
    小兔鲜儿-首页模块涉及知识点:组件通信、组件自动导入、数据渲染、触底分页加载、下拉刷新等。自定义导航栏参考效果:自定义导航栏的样式需要适配不同的机型。操作步骤准备组件隐藏默认导航栏,修改文字颜色样式适配->安全区域静态结构新建业务组件:src/pages/index/componets/Custo......
  • Ansible 常用模块
    Ansible介绍Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的......
  • 基于光纤传感器的微振动信号采集监测模块特色解析
    概念 光纤传感器是一种通过光纤线缆来传输光信号,并将光信号转换为电信号的传感器,光纤传感器一般是由形状各样的光纤探头+光纤线缆+光纤放大器组成。光纤传感器的原理是将来自光源的光经过光纤送入调制器,使待测参数与进入调制区的光相互作用后,导致光的光学性质(如光的强度、波长、......
  • Erlang 学习之第三天 . 函数,模块,递归,数字,字符串
    Erlang函数Erlang是一种众所周知的函数式编程语言,因此您将看到许多关于函数如何在Erlang中工作的重点。本章介绍如何使用Erlang中的函数完成所有操作。直接上实例:定义函数add(X,Y) ->    Z = X+Y,    io:fwrite("~w~n",[Z]). start() ->    add(5,6).......
  • Nginx--安装模块
    一 安装系统自带模块#进入安装目录[root@localhost~]#cdnginx-1.18.0/#查看原来的编译选项[[email protected]]#nginx-V#查看安装的模块[[email protected]]#./configure--help#以http_v2_module为例[[email protected]]#./confi......
  • PyTorch下,使用list放置模块,导致计算设备不一的报错
    报错在复现Transformer代码的训练阶段时,发生报错:RuntimeError:Expectedalltensorstobeonthesamedevice,butfoundatleasttwodevices,cuda:0andcpu!解决方案通过next(linear.parameters()).device确定model已经在cuda:0上了,同时输入model.forward()的......