加入Buzzer,Shake_Motor,Ultrasound

This commit is contained in:
2025-06-24 20:46:30 +08:00
parent 5cc35cbad3
commit 20d90d8933
50 changed files with 12844 additions and 4561 deletions

111
fun/Ultrasound.c Normal file
View File

@@ -0,0 +1,111 @@
#include "Ultrasound.h"
TX_THREAD ultrasonic_task_handle;
TX_EVENT_FLAGS_GROUP ultrasonic_event;
extern TIM_HandleTypeDef htim2;
volatile uint32_t ic_val1 = 0; // <20><><EFBFBD><EFBFBD>ֵ1
volatile uint32_t ic_val2 = 0; // <20><><EFBFBD><EFBFBD>ֵ2
volatile uint8_t is_first_capture = 0; // <20>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD>β<EFBFBD><CEB2><EFBFBD>
volatile uint32_t distance_cm = 0; // <20><><EFBFBD><EFBFBD><EBB0B4> cm<63><6D><EFBFBD><EFBFBD>
/*******
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Psc: 250 - 1 <20>Դﵽ 1tick = 1us<75><73>Ч<EFBFBD><D0A7>
*******/
/****
DWT<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD> <20><>ȷ<EFBFBD><C8B7>
<EFBFBD>ŵ<EFBFBD>main.c<>н<EFBFBD><D0BD>г<EFBFBD>ʼ<EFBFBD><CABC>
****/
void DWT_Init(void)
{
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = (uint32_t)0u; //<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}
/********
delay_us() <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5> (ʹ<><CAB9>DWT) <20><>ȷ<EFBFBD><C8B7>
*********/
void delay_us(uint32_t us)
{
uint32_t start = DWT->CYCCNT;
uint32_t ticks = us * (SystemCoreClock / 1000000U); // us * 64
while((DWT->CYCCNT - start) < ticks);
}
/******
Trig <20><><EFBFBD><EFBFBD>
You only need to supply a short 10uS
pulse to the trigger input to start the ranging
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Trig Ϊ<>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD> HAL_GPIO_WritePin(..., RESET); HAL_Delay(); <20><>һ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
******/
void HCSR04_Trigger(void)
{
HAL_GPIO_WritePin(HC_Trig_GPIO_Port,HC_Trig_Pin,GPIO_PIN_RESET);
delay_us(2); //<2F><><EFBFBD><EFBFBD>2~5us
HAL_GPIO_WritePin(HC_Trig_GPIO_Port,HC_Trig_Pin,GPIO_PIN_SET);
delay_us(10); // <20><><EFBFBD>ָߵ<D6B8>ƽ10us
HAL_GPIO_WritePin(HC_Trig_GPIO_Port,HC_Trig_Pin,GPIO_PIN_RESET);
}
#ifdef HCSR_TEST
void ultrasonic_task_entry(ULONG thread_input) {
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);
while (1) {
HCSR04_Trigger();
ULONG actual_flags;
if (tx_event_flags_get(&ultrasonic_event, EVENT_ECHO_DONE, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER) == TX_SUCCESS) {
if (distance_cm < 30) {
// ִ<>б<EFBFBD><D0B1>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񶯡<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
}
}
tx_thread_sleep(50); // ÿ<>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 50 ticks
}
}
#endif
/*******
Echo <20><><EFBFBD><EFBFBD><EBB2B6><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
******/
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) {
if (is_first_capture == 0) {
ic_val1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_FALLING);
is_first_capture = 1;
} else {
ic_val2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_RISING);
is_first_capture = 0;
uint32_t delta = (ic_val2 > ic_val1) ? (ic_val2 - ic_val1) : (0xFFFF - ic_val1 + ic_val2);
distance_cm = delta / 58;
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
// tx_event_flags_set(&ultrasonic_event, EVENT_ECHO_DONE, TX_OR);
}
}
}