设备屏蔽功能
适配新版界面
This commit is contained in:
2026-03-06 13:48:42 +08:00
parent 090eb335a8
commit 7373c0ad95
14 changed files with 854 additions and 337 deletions
+32 -1
View File
@@ -1,4 +1,5 @@
#include "bsp_buzzer.h"
#include "bsp_w25q.h"
/*开关控制电平,使用同一的电平控制方式*/
#define BUZZER_GPIO_ON GPIO_PIN_SET
@@ -14,6 +15,7 @@ static void bsp_buzzer_on(void);
static void bsp_buzzer_off(void);
static void bsp_buzzer_enable(void);
static void bsp_buzzer_disable(void);
static void bsp_buzzer_flash_data_load(void);
bsp_buzzer_t buzzer =
{
@@ -35,11 +37,40 @@ static void bsp_buzzer_init(void)
{
BUZZER_OFF;
p_buzzer->p_flash_data = &flash_data;
bsp_buzzer_flash_data_load();
}
static void bsp_buzzer_flash_data_save(void)
{
// 擦除整个扇区(地址是扇区起始)
w25q32_sector_erase(W25Q32_BUZZER_STATE_ADDR);
w25q32.write(W25Q32_BUZZER_STATE_ADDR, (uint8_t*)&flash_data, sizeof(bsp_buzzer_flash_data_t));
}
static void bsp_buzzer_flash_data_load(void)
{
w25q32.read(W25Q32_BUZZER_STATE_ADDR, (uint8_t*)&flash_data, sizeof(bsp_buzzer_flash_data_t));
// 检查是否全为0xFF(首次使用)
uint8_t *p = (uint8_t*)&flash_data;
u8 all_ff = 1;
for (u8 i = 0; i < sizeof(bsp_buzzer_flash_data_t); i++) {
if (p[i] != 0xFF) {
all_ff = 0;
break;
}
}
if (all_ff) {
// 首次使用,默认关闭蜂鸣器
flash_data.sw = USR_DISABLE;
bsp_buzzer_flash_data_save();
}
// 根据加载的状态设置蜂鸣器使能
if (flash_data.sw == USR_ENABLE) {
p_buzzer->p_flash_data->sw = flash_data.sw;
}
}
static void bsp_buzzer_task(void)
+2 -2
View File
@@ -57,7 +57,7 @@ static void bsp_uart_rx_task(bsp_uart_t *p_uart);
static void bsp_uart_rx_time_start(bsp_uart_t *p_uart);
static void bsp_uart_tx_dma_tc_int(bsp_uart_t *p_uart);
static void bsp_uart_dma_send(bsp_uart_t *p_uart, u8 *p_data, u16 len);
static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u16 baud_rate);
static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u32 baud_rate);
/* 外部HAL句柄声明 */
extern UART_HandleTypeDef huart1;
@@ -269,7 +269,7 @@ static void bsp_uart_init(bsp_uart_t *p_uart)
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
}
static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u16 baud_rate)
static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u32 baud_rate)
{
p_uart->uart->Init.BaudRate = baud_rate;
HAL_UART_Init(p_uart->uart);
+1 -1
View File
@@ -61,7 +61,7 @@ struct bsp_uart_t
struct
{
void (*baud_rate)(bsp_uart_t *,u16);
void (*baud_rate)(bsp_uart_t *,u32);
}set;
void (*init)(bsp_uart_t *); /* 初始化函数指针 */
+6
View File
@@ -49,6 +49,12 @@ void w25q32_sector_erase(uint32_t sector_addr);
#define MAX_HISTORY_ALARM_RECORDS (1000) /* 最大历史报警记录数 */
#define HISTORY_ALARM_SECTORS_NEEDED ((MAX_HISTORY_ALARM_RECORDS * HISTORY_ALARM_RECORD_SIZE + W25Q32_SECTOR_SIZE - 1) / W25Q32_SECTOR_SIZE)
/* COM口波特率存储地址 - 使用独立扇区(扇区13) */
#define W25Q32_COM_BAUDRATE_ADDR 0x00D000 /*存储4个COM口波特率枚举值(4字节)*/
/* 蜂鸣器状态存储地址 - 使用独立扇区(扇区14) */
#define W25Q32_BUZZER_STATE_ADDR 0x00E000 /*存储蜂鸣器状态(1字节)*/
/* w25q32 对象结构体 */
typedef struct {
void (*init)(void);