|
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享 资料下载见附件,电脑登入 微信公众号:游名开源 硬件说明: 2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源 特性: 极简的设计; 极轻的重量;$ R4 q+ K' z7 s y" s9 H 极高的测量灵敏度;2 J, ~" q4 r& S9 `1 w. ? 极低的消耗电流; 接口ESD保护; 偏捷的安装及使用方式; 有效测量距离3cm-1.5m(其它距离范围可定制);8 w6 P& }9 {8 i9 ^! 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); F* H; M: t/ }4 z8 l
{
if((TIM3CH2_CAPTURE_STA&0X80)==0)/ t' \$ D- `8 i- u6 u R4 ]! t7 {! f) n
{% C6 Q2 N3 ]9 g/ V* Y) I; h, O
if(TIM3CH2_CAPTURE_STA&0X40)
{ / M7 r- B- O8 i3 T$ T
TIM3CH2_CAPTURE_STA|=0X80; + K3 v9 p( s, ]1 a! g& V$ l7 c
TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);- a ~8 Z, l- Q* k7 A& ^
long long temp=0;5 B+ g ^4 @% j' F1 ~* G5 `# S! M
float distance=0.0;) }$ f; J2 Q1 O% o8 w; R
temp=TIM3CH2_CAPTURE_STA&0X3F; " v+ B- B( z; C& n5 ?: Y: W( h, o W, ^
temp*=0XFFFF;
temp+=TIM3CH2_CAPTURE_VAL; ( d: z' m# r! \
temp=(temp*100)/58;3 R; j) L& H+ I/ m. ?1 |
distance=(float)temp/100;2 n, a) O9 b, x$ d- s1 t8 ?
printf("Goal distence:%.2lf cm\r\n",distance);
__HAL_TIM_DISABLE(&htim3); 0 H& @9 o9 o9 `
}7 L! K$ z5 G- @3 u6 y
else
{1 \- t( P% S. l; k: K6 U5 T
TIM3CH2_CAPTURE_STA=0;
TIM3CH2_CAPTURE_VAL=0;
TIM3CH2_CAPTURE_STA|=0X40; 2 z" @) v: \* U1 {! m3 T
__HAL_TIM_DISABLE(&htim3); / a7 T. Q+ }( g9 Z
__HAL_TIM_SET_COUNTER(&htim3,0);
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);
}
}1 u1 E/ x7 ?; A6 l% l, ?& g8 }2 b: m
}
int main(void)
{
HAL_Init();2 [1 O( r+ t* r3 K4 S8 H) U
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART2_UART_Init();9 q" Y, R0 {9 V) {, y6 |
MX_TIM3_Init();) Z9 B' d1 J: ]- f- x2 z, u& O
/* USER CODE BEGIN 2 */! ?" t" `0 C/ `! ?
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);! Q* ^/ f% L7 \3 w8 Y
while (1): M. Y: y" _/ j/ @, j
{
Measure_Start();
if(TIM3CH2_CAPTURE_STA&0X80)
{
__HAL_TIM_SET_COUNTER(&htim3,0); z3 a$ V/ Q9 O/ W
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); 8 w% g* w0 g; h8 B2 I4 {$ b; [
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
__HAL_TIM_ENABLE(&htim3);
TIM3CH2_CAPTURE_STA=0; 7 C( f1 r; c, g t6 c8 E7 j7 @
}
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);0 k% e0 I# O, ]5 h5 P
HAL_Delay(1000);0 J' q1 \3 z( e8 ]# Z7 b, x
}
}. B: U% ]& s. T: V9 U: t7 ?0 f7 R* Q. j
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)+ m; F; Y# L4 [$ b2 I
{8 T, u% H6 w/ N8 f$ r& m
4 e8 |5 N7 j: O8 b* n7 U
if((TIM3CH2_CAPTURE_STA&0X80)==0)
{2 Q5 M: Y& R, R8 R: K* v8 `9 T- U+ e
if(TIM3CH2_CAPTURE_STA&0X40). U! A% F* j! Y x# a3 K9 Y* u
{
if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)& \. t: W4 P$ C9 T/ B- O" e
{
TIM3CH2_CAPTURE_STA|=0X80;
TIM3CH2_CAPTURE_VAL=0XFFFF;
}
else TIM3CH2_CAPTURE_STA++;, h8 M0 J; E0 Y- O4 A" p) d8 Z' l
} 1 j A9 @& t3 W4 ?% S
} 1 O2 b. L2 w0 b) t) ^
}0 Y/ f \( c( O) |
NUC_LEO-DG-------------- FT1610FF17 {5 j8 i; Q8 w$ R
PB3------------------------------T/SDA/TX
PB5------------------------------E/SCL/RX# L7 A, ^$ a+ x8 D
5V/3V----------------------------VCC$ Y" X2 o, W( b5 j# t9 v
GND-----------------------------GND, {0 l8 B5 U4 ]- E; n
然后再NVICSetings中选上TIM3 global interrupt,入下图:
! \3 P1 m4 x9 r2 l6 x! i! Y0 [
( f, e! [# G* Q8 L
全局变量:6 Q& m' m5 j7 n
uint8_t TIM3CH2_CAPTURE_STA=0; - E' C g& @6 M: R: x1 ~3 n
uint32_t TIM3CH2_CAPTURE_VAL;2 E* Q, ^* }, p A7 @
int fputc(int ch,FILE *f)) F+ _# |) A- f$ x+ t3 c3 X
{# u( R1 [6 d5 S/ b" q( i3 x) O
while(0==(USART2->ISR&0x40));3 ^& j- L8 t! ^2 P- F
USART2->TDR=ch;
return ch;. o* O% }" E7 \0 k2 x9 w
}- z; i% s5 T3 q6 \0 Y8 D, L
void Measure_Start(void)
{9 j! M% M% F/ T8 \7 H
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);# p: K8 w" h6 }
HAL_Delay(1);, b ?/ M& c" j1 r! C0 R, F: i
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
}
3 n/ P" y/ W4 E$ H