1. 增加了“收不到信息1s后,停止报警”的功能
2. 将判断喇叭是否响的功能,在systick中断中实现
已添加2个文件
已修改8个文件
199 ■■■■ 文件已修改
源码/核心板/Src/OnChipDevices/Rcc_Nvic_Systick.c 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/application/beep_logic_app.c 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/application/beep_logic_app.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/application/dw_app.c 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/application/dw_app.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/application/global_param.c 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/application/global_param.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/main.c 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/stm32f10x_it.c 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/stm32f10x_it.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Ô´Âë/ºËÐİå/Src/OnChipDevices/Rcc_Nvic_Systick.c
@@ -59,7 +59,7 @@
int Systick_Init(void)
{
    int time_retry = 500;
    if (SysTick_Config(64000))
    if (SysTick_Config(72000))
    {
        /* Capture error */
        while (time_retry--);
Ô´Âë/ºËÐİå/Src/application/beep_logic_app.c
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
#include "beep_logic_app.h"
#include "led.h"
#include "beep.h"
#include "global_param.h"
#include "dw_app.h"
void main_logic(void)    //主逻辑在这里执行
{
    //除UWB之外的其他代码...
    static uint16_t beep_judge_cnt = 0;
    if(beep_judge_cnt++ >= 200)
    {
        beep_judge_cnt = 0;
        if(dis_after_filter <= g_com_map[ALARM_DISTANCE])
        {
            switch(g_com_map[ALARM_DEV])
            {
                case 0:
                    BEEP2_ON;
                    BEEP_OFF;
                    OUT2_OFF;
                    break;
                case 1:
                    BEEP_ON;
                    BEEP2_OFF;
                    OUT2_OFF;
                    break;
                case 2:
                    OUT2_ON;
                    BEEP_OFF;
                    BEEP2_OFF;
                    break;
                default:
                    BEEP2_ON;
                    BEEP_ON;
                    OUT2_ON;
                    break;
            }
        }
        else
        {
            switch(g_com_map[ALARM_DEV])
            {
                case 0:
                    BEEP2_OFF;
                    break;
                case 1:
                    BEEP_OFF;
                    break;
                case 2:
                    OUT2_OFF;
                    break;
                default:
                    BEEP2_OFF;
                    BEEP_OFF;
                    OUT2_OFF;
                    break;
            }
        }
    }
}
Ô´Âë/ºËÐİå/Src/application/beep_logic_app.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
#ifndef __BEEP_LOGIC_H__
#define __BEEP_LOGIC_H__
#include "stm32f10x.h"
void main_logic(void);    //主逻辑在这里执行
#endif
Ô´Âë/ºËÐİå/Src/application/dw_app.c
@@ -28,6 +28,8 @@
#include "led.h"
#include "serial_at_cmd_app.h"
#include "Usart.h"
#include "global_param.h"
#include "filters.h"
/*------------------------------------ Marcos ------------------------------------------*/
@@ -129,6 +131,10 @@
uint8_t random_delay_tim = 0;
double distance, dist_no_bias, dist_cm;
uint32_t g_UWB_com_interval = 0;
float dis_after_filter;                //当前距离值
LPFilter_Frac* p_Dis_Filter;        //测距用的低通滤波器
/*------------------------------------ Functions ------------------------------------------*/
@@ -435,7 +441,10 @@
                    dist_cm = dist_no_bias * 100; //dis ä¸ºå•位为cm的距离
//                    dist[TAG_ID] = LP(dis, TAG_ID); //LP ä¸ºä½Žé€šæ»¤æ³¢å™¨ï¼Œè®©æ•°æ®æ›´ç¨³å®š
                    
                    /*--------------------------以下为非测距逻辑------------------------*/
                    LED0_BLINK; //每成功一次通讯则闪烁一次
                    g_UWB_com_interval = 0;
                    dis_after_filter = LP_Frac_Update(p_Dis_Filter, dist_cm);
                }
            }
Ô´Âë/ºËÐİå/Src/application/dw_app.h
@@ -3,11 +3,15 @@
#define __DW_APP_H__
#include "stm32f10x.h"
#include "filters.h"
#define TAG_NUM_IN_SYS                256
#define DFT_RAND_DLY_TIM_MS            1
extern double dist_cm;
extern uint32_t g_UWB_com_interval;
extern float dis_after_filter;
extern LPFilter_Frac* p_Dis_Filter;        //测距用的低通滤波器
void Dw1000_Init(void);
void Tag_App(void);
Ô´Âë/ºËÐİå/Src/application/global_param.c
@@ -1,7 +1,9 @@
#include "global_param.h"
#include "Flash.h"
#include "dw_app.h"
uint16_t g_com_map[COM_MAP_SIZE];
uint32_t save_com_map_to_flash(void)
{
@@ -21,6 +23,9 @@
    
    g_com_map[ALARM_DISTANCE] = 200;    //默认报警距离200cm
    g_com_map[ALARM_DEV] = 0;
    dis_after_filter = 1000;            //默认距离
    p_Dis_Filter = New_LP_Frac(0.7);
    
}
Ô´Âë/ºËÐİå/Src/application/global_param.h
@@ -3,8 +3,8 @@
#include "stm32f10x.h"
#define COM_MAP_SIZE    1024
#define COM_MAP_SIZE        1024        //MAP表的最大空间
#define    DEFAULT_DISTANCE    1000        //初始测距距离为10ç±³
/*---------------Map Definition-------------------*/
#define     DEV_ROLE                0x10        //该设备是anchor还是tag    
@@ -17,8 +17,8 @@
/*------------END Map Definition-------------------*/
extern uint16_t g_com_map[COM_MAP_SIZE];
extern uint16_t g_com_map[COM_MAP_SIZE];
extern uint32_t save_com_map_to_flash(void);
extern void parameter_init(void);
Ô´Âë/ºËÐİå/Src/main.c
@@ -6,17 +6,12 @@
#include "beep.h"
#include "dw_driver.h"
#include "dw_app.h"
#include "filters.h"
#include "stm32f10x_it.h"
#include "serial_at_cmd_app.h"
#include "global_param.h"
//#define WORK_MODE_TAG
#define WORK_MODE_ANCHOR
#define START_ALARM_DIST_CM            200
#define BEEM_ON_TIME_MS                200
float dis_after_filter = 500;
void Device_Init(void)
{
@@ -51,12 +46,10 @@
 */
int main(void)
{
    LPFilter_Frac* p_Dis_Filter;
    
    Device_Init();
    Program_Init();
    Dw1000_Init();
    p_Dis_Filter = New_LP_Frac(0.7);
    /* Loop forever initiating ranging exchanges. */
    while(1)
@@ -65,66 +58,7 @@
        Tag_App();
#else 
        Anchor_App();
#endif
        //除UWB之外的其他代码...
        dis_after_filter = LP_Frac_Update(p_Dis_Filter, dist_cm);
        if(dis_after_filter <= g_com_map[ALARM_DISTANCE])
        {
//            g_beep_off_time = (uint32_t)dis_after_filter * 10;
//            if(g_beep_off_time <= 0)
//                g_beep_off_time = 0;
//            g_beep_on_time = BEEM_ON_TIME_MS;
            switch(g_com_map[ALARM_DEV])
            {
                case 0:
                    BEEP2_ON;
                    BEEP_OFF;
                    OUT2_OFF;
                    break;
                case 1:
                    BEEP_ON;
                    BEEP2_OFF;
                    OUT2_OFF;
                    break;
                case 2:
                    OUT2_ON;
                    BEEP_OFF;
                    BEEP2_OFF;
                    break;
                default:
                    BEEP2_ON;
                    BEEP_ON;
                    OUT2_ON;
                    break;
            }
        }
        else
        {
//            g_beep_on_time = 0;
//            g_beep_off_time = 0;
            switch(g_com_map[ALARM_DEV])
            {
                case 0:
                    BEEP2_OFF;
                    break;
                case 1:
                    BEEP_OFF;
                    break;
                case 2:
                    OUT2_OFF;
                    break;
                default:
                    BEEP2_OFF;
                    BEEP_OFF;
                    OUT2_OFF;
                    break;
            }
        }
        
    }
}
Ô´Âë/ºËÐİå/Src/stm32f10x_it.c
@@ -23,32 +23,24 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_it.h"
#include "stm32f10x.h"
#include "beep.h"
#include "dw_app.h"
#include "global_param.h"
#include "beep_logic_app.h"
/* Tick timer count. */
volatile uint32_t time32_incr;
volatile uint32_t g_beep_on_time = 0;
volatile uint32_t g_beep_off_time = 0;
void SysTick_Handler(void)
{
    static uint32_t s_cycle_time = 0;
    time32_incr++;
    g_UWB_com_interval++;
    if(g_UWB_com_interval > 1000)
    {
        dis_after_filter = DEFAULT_DISTANCE;
    }
    main_logic();
    
//    if(s_cycle_time >= g_beep_off_time)
//    {
//        s_cycle_time = 0;
//    }
//    else if(s_cycle_time > g_beep_on_time && s_cycle_time < g_beep_off_time)
//    {
//        BEEP_OFF;
//    }
//    else if(s_cycle_time <= g_beep_on_time)
//    {
//        BEEP_ON;
//    }
    s_cycle_time++;
}
/** 
Ô´Âë/ºËÐİå/Src/stm32f10x_it.h
@@ -27,10 +27,6 @@
#ifdef __cplusplus
extern "C" {
#endif
extern volatile uint32_t g_beep_on_time;
extern volatile uint32_t g_beep_off_time;
/*
 * Tick timer interrupt handler to replace the default one.