加入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

11
fun/Buzzer.c Normal file
View File

@@ -0,0 +1,11 @@
#include "Buzzer.h"
void Buzzer_Open(void)
{
HAL_GPIO_WritePin(Buzzer_GPIO_Port,Buzzer_Pin,GPIO_PIN_SET); // <20>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
}
void Buzzer_Close(void)
{
HAL_GPIO_WritePin(Buzzer_GPIO_Port,Buzzer_Pin,GPIO_PIN_RESET); // <20>͵<EFBFBD>ƽ<EFBFBD>ر<EFBFBD>
}

9
fun/Buzzer.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef __BUZZER_H__
#define __BUZZER_H__
#include "headfile.h"
void Buzzer_Open(void);
void Buzzer_Close(void);
#endif

View File

@@ -134,6 +134,20 @@ void HCBle_ExtractAndParseFrame(void)
}
}
#ifdef task
// BLE<4C><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ble_rx_task_entry(ULONG thread_input)
{
HCBle_InitDMAReception();
while(1)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
#endif

View File

@@ -7,6 +7,7 @@
#define RING_BUFFER_SIZE 256
#define UART_DMA_RX_BUF_SIZE 64
#define task 1
// HCBle <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
typedef struct
{
@@ -34,6 +35,7 @@ typedef struct
extern uint8_t rx_data;
extern RingBuffer ble_rx_ring; //<2F><>ʼ<EFBFBD><CABC>
extern uint8_t uart_dma_rx_buf[UART_DMA_RX_BUF_SIZE];
extern LocationData current_location;
void HCBle_InitDMAReception(void);
void HCBle_ExtractAndParseFrame(void);

11
fun/Shake_Motor.c Normal file
View File

@@ -0,0 +1,11 @@
#include "Shake_Motor.h"
void Shake_Motor_Open(void)
{
HAL_GPIO_WritePin(Shake_Motor_GPIO_Port,Shake_Motor_Pin,GPIO_PIN_SET); // <20>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
}
void Shake_Motor_Close(void)
{
HAL_GPIO_WritePin(Shake_Motor_GPIO_Port,Shake_Motor_Pin,GPIO_PIN_RESET); // <20>͵<EFBFBD>ƽ<EFBFBD>ر<EFBFBD>
}

8
fun/Shake_Motor.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef __SHAKE_MOTOR_H
#define __SHAKE_MOTOR_H
#include "headfile.h"
#endif

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);
}
}
}

25
fun/Ultrasound.h Normal file
View File

@@ -0,0 +1,25 @@
#ifndef __ULTRASOUND_H
#define __ULTRASOUND_H
#include "headfile.h"
#define HCSR_TEST 1
#define EVENT_ECHO_DONE 0x01
void DWT_Init(void);
/********
delay_us() <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5> (ʹ<><CAB9>DWT) <20><>ȷ<EFBFBD><C8B7>
*********/
void delay_us(uint32_t us);
/******
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);
#endif

View File

@@ -6,6 +6,8 @@
#include "usart.h"
#include "gpio.h"
#include "gpdma.h"
#include "tim.h"
#include "app_threadx.h"
#include "stdio.h"
#include "stdlib.h"
@@ -14,5 +16,8 @@
#include "HCBle.h"
#include "gps.h"
#include "Shake_Motor.h"
#include "Ultrasound.h"
#include "Buzzer.h"
#endif