你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

游名:STM32F030+FT1610FF1高精度超声波测距模块测距教程及参...  

[复制链接]
mmuuss586 发布时间:2020-3-6 15:47
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享
资料下载见附件,电脑登入
微信公众号:游名开源
硬件说明:
    2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源   
特性:  
极简的设计;
极轻的重量;
极高的测量灵敏度;
极低的消耗电流;
接口ESD保护;
偏捷的安装及使用方式;
有效测量距离3cm-1.5m(其它距离范围可定制);

支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信;


微信图片_20200306155141.jpg

FT1610FF1超声波测距模块产品规格书V2.0.pdf

下载

1.09 MB, 下载次数: 31

基于STM32F030+FT1610FF1高精度超声波测距模块测距教程.pdf

下载

416.85 KB, 下载次数: 34

游名科技产品目录(2020-7-21).pdf

下载

1.05 MB, 下载次数: 1

收藏 4 评论83 发布时间:2020-3-6 15:47

举报

83个回答
mmuuss586 回答时间:2020-3-6 16:03:25
//定时器输入捕获中断处理回调函数,该函数在HAL_TIM_IRQHandler中会被调用
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if((TIM3CH2_CAPTURE_STA&0X80)==0)
    {
        if(TIM3CH2_CAPTURE_STA&0X40)           
            {               
                TIM3CH2_CAPTURE_STA|=0X80;     
                TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
                long long temp=0;
                                                                float distance=0.0;
                temp=TIM3CH2_CAPTURE_STA&0X3F;
                temp*=0XFFFF;              
                temp+=TIM3CH2_CAPTURE_VAL;   
                temp=(temp*100)/58;
                                                                distance=(float)temp/100;
                printf("Goal distence:%.2lf cm\r\n",distance);
                __HAL_TIM_DISABLE(&htim3);      
            }
        else                              
            {
                TIM3CH2_CAPTURE_STA=0;         
                TIM3CH2_CAPTURE_VAL=0;
                TIM3CH2_CAPTURE_STA|=0X40;   
                __HAL_TIM_DISABLE(&htim3);      
                __HAL_TIM_SET_COUNTER(&htim3,0);
                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);  
                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);         
                                                }      
                        }
}
mmuuss586 回答时间:2020-3-6 16:04:03
然后在main函数中添加定时器中断使能和捕获使能函数,及测试需要的功能代码,main函数如下
int main(void)
{

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART2_UART_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
        __HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);
        HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
  while (1)
  {
                Measure_Start();
                 if(TIM3CH2_CAPTURE_STA&0X80)        
                {
                                __HAL_TIM_SET_COUNTER(&htim3,0);
                                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);
                                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
                                __HAL_TIM_ENABLE(&htim3);
                                TIM3CH2_CAPTURE_STA=0;
                }
                HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
                HAL_Delay(1000);

  }
}
mmuuss586 回答时间:2020-3-6 16:03:07
中断服务函数:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{

    if((TIM3CH2_CAPTURE_STA&0X80)==0)
    {
            if(TIM3CH2_CAPTURE_STA&0X40)
            {
                if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)
                {
                    TIM3CH2_CAPTURE_STA|=0X80;     
                    TIM3CH2_CAPTURE_VAL=0XFFFF;
                }
                else TIM3CH2_CAPTURE_STA++;
            }   
    }      
}
mmuuss586 回答时间:2020-3-6 15:57:03
1.png
2.png
3.png
4.png
5.png

mmuuss586 回答时间:2020-3-6 15:59:37

基于STM32F030+FT1610FF1高精度超声波测距模块测距教程

      学习板卡需求:官方NUCLEO-F030R8或自制NUCLEO-DG板卡和FT1610FF1超声波,杜邦线4根;板卡连接如图:
1.png

mmuuss586 回答时间:2020-3-6 15:59:59
配置和连接方式
                NUC_LEO-DG-------------- FT1610FF1
                        PB3------------------------------T/SDA/TX
                        PB5------------------------------E/SCL/RX
                        5V/3V----------------------------VCC
                        GND-----------------------------GND
mmuuss586 回答时间:2020-3-6 16:00:42
USART2串口通信引脚PA2、PA3和LED2的指示灯引脚PA5,基本的Cube配置不做介绍,主要为我们需要通过PB5读取IO的高电平持续时间,这里用到的是定时器的输入捕获功能,具体的Cube配置如下图所示:
1.png


mmuuss586 回答时间:2020-3-6 16:02:14

然后再NVICSetings中选上TIM3 global interrupt,入下图:
1.png


mmuuss586 回答时间:2020-3-6 16:02:41
然后把串口和LED输出配置好后生成MDK代码,编译无错误后添加需要的相关代码,主要缺少的代码为TIM3输入捕获的中断服务函数和串口通信的重定向函数,这里需要添加两个对应的全局变量,代码如下:
全局变量:
uint8_t  TIM3CH2_CAPTURE_STA=0;                               
uint32_t        TIM3CH2_CAPTURE_VAL;
mmuuss586 回答时间:2020-3-6 16:03:42
串口重定向函数为(需要包含对应的stdio.h头文件)
int fputc(int ch,FILE *f)
{
        while(0==(USART2->ISR&0x40));
        USART2->TDR=ch;
        return ch;
       
}
mmuuss586 回答时间:2020-3-6 16:04:21
其中Measur_Start()函数为触发超声波模块测量开始的TTL信号,代码如下
void Measure_Start(void)
{
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
                HAL_Delay(1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
}
mmuuss586 回答时间:2020-3-6 16:04:57
这一部分参照模块IO通信模式的时序图可知,模块通信模式设置如下图:
1.png

mmuuss586 回答时间:2020-3-6 16:06:25
代码添加后,烧录到板卡,然后打开串口通信助手,打开串口后就可以看到模块测试的数据如下图
1.png


mmuuss586 回答时间:2020-3-6 16:06:48
:P:P:P:P:P:P:P

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版