| | |
| | | #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" |
| | | #include "ADC.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; |
| | | //#define DEBUG_MODE |
| | | |
| | | void Device_Init(void) |
| | | { |
| | | // Rcc_Init(); |
| | | SystemInit(); |
| | | RCC_Configuration(); |
| | | //SystemInit(); |
| | | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x5000); |
| | | Nvic_Init(); |
| | | Systick_Init(); |
| | | // Systick_Init(); |
| | | TIM3_Int_Init(); |
| | | Led_Init(); |
| | | Beep_Init(); |
| | | DW_GPIO_Init(); |
| | | Uart1_Init(); |
| | | Spi_Init(); |
| | | |
| | | ADC_Configuration(); |
| | | |
| | | GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); |
| | | } |
| | | |
| | | void Program_Init(void) |
| | | u8 anchor_type; |
| | | u32 dev_id; |
| | | u8 hbsend[16]; |
| | | void HeartBeatInit(void) |
| | | { |
| | | u16 checksum; |
| | | hbsend[0]=0x55; |
| | | hbsend[1]=0xAA; |
| | | hbsend[2]=0x2; |
| | | hbsend[3]=0xc; |
| | | memcpy(&hbsend[4],&g_com_map[DEV_ID],2); |
| | | checksum = Checksum_u16(&hbsend[2],12); |
| | | memcpy(&hbsend[14],&checksum,2); |
| | | } |
| | | u16 tyncpoll_time; |
| | | TrackingDiffClass *pUWBDistanceTrackingDiff; |
| | | void Program_Init(void) |
| | | {uint16_t i; |
| | | float temp; |
| | | u16 temp2; |
| | | Usart1ParseDataCallback = UsartParseDataHandler; |
| | | parameter_init(); |
| | | //deca_sleep(1000); |
| | | HeartBeatInit(); |
| | | // g_com_map[DEV_ROLE]=1; |
| | | // g_com_map[DEV_ID]=1; |
| | | // g_com_map[COM_INTERVAL]=10; |
| | | OUT485_ENABLE; |
| | | |
| | | #ifdef DEBUG_MODE |
| | | |
| | | g_com_map[COM_INTERVAL]=50; |
| | | g_com_map[MAX_REPORT_ANC_NUM]=3; |
| | | g_com_map[DEV_ID]=1; |
| | | g_com_map[ANC_POLL]=0; |
| | | g_com_map[ALARM_DISTANCE1]=100; |
| | | #endif |
| | | pUWBDistanceTrackingDiff = NewTrackingDiffClass(2, 4, 0.03); |
| | | dev_id = g_com_map[DEV_ID]; |
| | | g_com_map[VERSION] = 0x010d; |
| | | temp=(float)g_com_map[MAX_REPORT_ANC_NUM]*4/3; |
| | | temp2=g_com_map[DEV_ID]*g_com_map[MAX_REPORT_ANC_NUM]*4/3; |
| | | if(temp2<temp) |
| | | { |
| | | temp2++; |
| | | } |
| | | tyncpoll_time=g_com_map[DEV_ID]*(temp2); |
| | | if(g_com_map[DEV_ROLE]) |
| | | { |
| | | printf("æ ç¾ID: %d .\r\n",dev_id); |
| | | printf("é讯é´é: %d ms.\r\n",g_com_map[COM_INTERVAL]); |
| | | printf("忬¡é讯åºç«æ°é: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]); |
| | | }else{ |
| | | |
| | | anchor_type = dev_id%g_com_map[MAX_REPORT_ANC_NUM]; |
| | | printf("åºç«ID: %x .\r\n",dev_id); |
| | | printf("åºç«ç±»å: %c .\r\n",anchor_type+0x41); |
| | | printf("忬¡é讯åºç«æ°é: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]); |
| | | } |
| | | OUT485_DISABLE; |
| | | // printf("DEVICE PAIRID: %d .\r\n",g_com_map[PAIR_ID]); |
| | | // printf("DEVICE ALARM DISTANCE: 1.%d 2.%d 3.%d .\r\n",g_com_map[ALARM_DISTANCE1],g_com_map[ALARM_DISTANCE2],g_com_map[ALARM_DISTANCE3]); |
| | | |
| | | |
| | | for(i=0;i<255;i++) |
| | | { |
| | | g_Tagdist[i]=0xffff; |
| | | } |
| | | } |
| | | |
| | | /*! ------------------------------------------------------------------------------------------------------------------ |
| | |
| | | * |
| | | * @return none |
| | | */ |
| | | void HeatBeat(void) |
| | | { |
| | | UART_PushFrame(hbsend,16); |
| | | } |
| | | extern u8 g_start_sync_flag; |
| | | u16 heartbeat_timer,poll_timer,sync_timer; |
| | | void IdleTask(void) |
| | | { |
| | | g_start_sync_flag=0; |
| | | UART_CheckReceive(); |
| | | UART_CheckSend(); |
| | | if(heartbeat_timer>1000) |
| | | { |
| | | heartbeat_timer=0; |
| | | if(g_com_map[HEARTBEAT]&&g_com_map[DEV_ROLE]==0) |
| | | HeatBeat(); |
| | | } |
| | | |
| | | if(g_com_map[CNT_UPDATE]==1) |
| | | { |
| | | uint32_t result = 0; |
| | | u16 tmp = 0xAAAA; |
| | | __disable_irq(); |
| | | result = FLASH_Prepare(0x8004A38, 2); |
| | | if(result) |
| | | result = FLASH_Write(0x8004A38, (const uint8_t*)&tmp, 2); |
| | | __enable_irq(); |
| | | printf("è¿å
¥å级模å¼\r\n"); |
| | | g_com_map[CNT_UPDATE]=0; |
| | | save_com_map_to_flash(); |
| | | delay_ms(100); |
| | | // STMFLASH_Write_NoCheck(0x8004A38,0xAAAA); |
| | | // Delay_ms(100); |
| | | SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软å¤ä½åå°bootloader |
| | | } |
| | | |
| | | } |
| | | int main(void) |
| | | { |
| | | LPFilter_Frac* p_Dis_Filter; |
| | | |
| | | |
| | | Device_Init(); |
| | | Program_Init(); |
| | | Dw1000_Init(); |
| | | p_Dis_Filter = New_LP_Frac(0.7); |
| | | |
| | | delay_ms(10); |
| | | Dw1000_App_Init(); |
| | | /* Loop forever initiating ranging exchanges. */ |
| | | RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); |
| | | usart_send[0]=0x55; |
| | | usart_send[1]=0xAA; |
| | | Modbus_RegMap(); |
| | | while(1) |
| | | { |
| | | #ifdef WORK_MODE_TAG |
| | | if(g_start_send_flag) |
| | | { |
| | | g_start_send_flag = 0; |
| | | Tag_App(); |
| | | #else |
| | | }//else{ |
| | | IdleTask(); |
| | | // } |
| | | // |
| | | if(g_com_map[DEV_ROLE]==0) |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |