|
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享 资料下载见附件,电脑登入 微信公众号:游名开源 硬件说明: 2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源 特性: 极简的设计; 极轻的重量; 极高的测量灵敏度; 极低的消耗电流;0 ?& y$ v& V9 ~" Q! \( k 接口ESD保护; 偏捷的安装及使用方式; 有效测量距离3cm-1.5m(其它距离范围可定制);: c; r! Z( X, Z9 I 支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信; |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
小白也能明白的STM32的低功耗与唤醒机制
STM32系统中2种数据掉电保护的方法
分享STM32F051中文参考手册(重制书签版)
AI工具训练营-用ChatGPT解决HID Keyboard实现的问题
STM32固件库分享,超全系列整理
STM32小白入门指南:从基础到OTA实现方案
STM32超详细学习笔记
新手必看!STM32单片机应该怎么学?
如果你解决了这些问题,就可以直接学STM32
微信公众号
手机版
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)+ K4 m8 g$ C# Z
{
if((TIM3CH2_CAPTURE_STA&0X80)==0)
{
if(TIM3CH2_CAPTURE_STA&0X40)
{ + v" m3 @: w, P$ q+ C
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; , \2 F" A- r/ B* `9 K& D
temp*=0XFFFF; # M. z# s# s& L: `5 B, m
temp+=TIM3CH2_CAPTURE_VAL;
temp=(temp*100)/58;! q0 g2 U8 a& B ~
distance=(float)temp/100;( m1 \7 C# w6 F$ V, Q
printf("Goal distence:%.2lf cm\r\n",distance);1 W& z# Q9 W- G% Z7 j* o6 l; ~$ ^) \
__HAL_TIM_DISABLE(&htim3);
}
else 5 _9 _4 F& W/ I: k
{
TIM3CH2_CAPTURE_STA=0;
TIM3CH2_CAPTURE_VAL=0;5 y' I& L' Z8 D4 A9 b
TIM3CH2_CAPTURE_STA|=0X40; 5 P% d0 m* R( t
__HAL_TIM_DISABLE(&htim3);
__HAL_TIM_SET_COUNTER(&htim3,0);4 c; P8 \& a, v* X
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); / Y, J; E* \. f
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING); `0 @+ \; j( Y
} * K* `' [# l7 q$ ]
}: r1 H+ q$ Y/ E" N ]
}
int main(void), Y$ C/ W; l1 i, {7 ?* i1 c0 O
{ k3 S0 l7 N5 o1 r- A) r* A
* r; k5 A j f4 V$ e& N, T0 G( |; ~
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART2_UART_Init();: p* i9 u* a8 J( ^6 B1 i9 d4 y& G
MX_TIM3_Init();$ G H4 n4 a9 S9 z1 c' x
/* USER CODE BEGIN 2 *// e, j5 u/ J% C8 p' u6 y: _
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);, h. q% K' I! n, J3 p
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);$ t7 J' P) h( j4 Q
while (1)
{1 J. e: ~7 ^6 o; O8 S% {- d; ^
Measure_Start();
if(TIM3CH2_CAPTURE_STA&0X80) / y# `- ]2 c7 Y8 d e" x: l
{
__HAL_TIM_SET_COUNTER(&htim3,0);" c! m/ Z( m+ K) J' W! ]
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); # j$ W1 l& m) u7 m' L p
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
__HAL_TIM_ENABLE(&htim3);
TIM3CH2_CAPTURE_STA=0; , D( o# N' H7 w2 ~
}
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
HAL_Delay(1000);% X5 V! s0 U4 Z2 D# z0 {
1 d, Y% U4 W( g% v2 e. _
}& Y! h6 k7 }9 z1 i
}( Y) o, c0 f% P4 U
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if((TIM3CH2_CAPTURE_STA&0X80)==0)
{$ [) {& ^6 S/ n/ p1 n9 c! w
if(TIM3CH2_CAPTURE_STA&0X40). i2 G* e1 G. ^7 c6 Q! Y
{+ S, A4 G+ M. ~$ ^2 f
if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)
{( }3 g |1 L' w
TIM3CH2_CAPTURE_STA|=0X80; . M y! j! I# f! E5 ?. N8 s1 m7 g
TIM3CH2_CAPTURE_VAL=0XFFFF;7 H& q7 { r# ]1 `; l
}
else TIM3CH2_CAPTURE_STA++;) L9 r& T* n5 U
} ; F9 e5 T- m7 {! N; v
} 6 O9 \2 F8 i6 @2 x9 \& N
}# n+ X4 ?( m* j% z- k, }, _
NUC_LEO-DG-------------- FT1610FF1: b9 g/ l/ b1 J, @
PB3------------------------------T/SDA/TX
PB5------------------------------E/SCL/RX: n5 D5 u2 L7 S' [' n' X3 H# D
5V/3V----------------------------VCC+ G8 B+ p! Y( H7 t8 g, k
GND-----------------------------GND" |2 w' a# x* w9 f: Z5 I
4 E! ^4 o6 } f, o! c
5 E9 p# C: E3 H& o& S9 Z) ]- s
然后再NVICSetings中选上TIM3 global interrupt,入下图:& L# c1 t. }. Y; F$ q. q- R
& y- n9 @3 d5 W T7 J3 I
全局变量:
uint8_t TIM3CH2_CAPTURE_STA=0;
uint32_t TIM3CH2_CAPTURE_VAL;5 R& }' w, X6 R( S8 w% y) O
int fputc(int ch,FILE *f)
{1 j9 w: G2 h/ X& o1 s# C: Y( I6 G
while(0==(USART2->ISR&0x40));
USART2->TDR=ch;) _7 t0 l6 Y% N- Q6 O" \
return ch; t; M0 _ k" E( z8 R( H* D. Y
* a3 }) v# | U8 J( f
}
void Measure_Start(void)7 D2 i( x$ n5 K, c! x
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);; }7 `) C ?4 ^% i5 O
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
}