| | |
| | | #include "serial_at_cmd_app.h" |
| | | #include "global_param.h" |
| | | #include "ADC.h" |
| | | |
| | | #include "modbus.h" |
| | | #include "deca_device_api.h" |
| | | #include "Flash.h" |
| | | //#define DEBUG_MODE |
| | | |
| | | void Device_Init(void) |
| | | { |
| | | RCC_Configuration(); |
| | |
| | | } |
| | | u16 tyncpoll_time; |
| | | TrackingDiffClass *pUWBDistanceTrackingDiff; |
| | | u8 group_id,sync_mainbase=0,synclost_timer=0; |
| | | uint16_t vel_factor,pos_factor; |
| | | |
| | | extern u8 module_power; |
| | | u16 slottime,max_slotnum,current_slotpos,dist_threshold; |
| | | u16 supergroupid; |
| | | void Program_Init(void) |
| | | {uint16_t i; |
| | | float temp; |
| | |
| | | |
| | | #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; |
| | | // 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; |
| | | g_com_map[FILTER_COEFFICIENT]=12; |
| | | #endif |
| | | pUWBDistanceTrackingDiff = NewTrackingDiffClass(2, 4, 0.1); |
| | | //pUWBDistanceTrackingDiff = NewTrackingDiffClass(2, 4, 0.03); |
| | | dev_id = g_com_map[DEV_ID]; |
| | | g_com_map[VERSION] = 0x010b; |
| | | group_id=g_com_map[GROUP_ID]; |
| | | vel_factor=g_com_map[FILTER_COEFFICIENT]; |
| | | pos_factor=g_com_map[FILTER_COEFFICIENT]; |
| | | dist_threshold = (g_com_map[SPEEDFILTER_THRES]*10)/(1000/g_com_map[COM_INTERVAL]); |
| | | if(dist_threshold<300) |
| | | {dist_threshold = 300;} |
| | | if(dist_threshold>15000) |
| | | {dist_threshold = 15000;} |
| | | if(dev_id==0) |
| | | sync_mainbase=1; |
| | | module_power = g_com_map[POWER]; |
| | | if(module_power>67) |
| | | { |
| | | module_power=67; |
| | | } |
| | | supergroupid = g_com_map[IMU_THRES]; |
| | | g_com_map[VERSION] = 0x012d; |
| | | g_com_map[SW_TYPE] = SW_MODBUS; |
| | | 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; |
| | | temp2=g_com_map[MAX_REPORT_ANC_NUM]*4/3; |
| | | if(temp2<temp) |
| | | { |
| | | temp2++; |
| | | } |
| | | tyncpoll_time=g_com_map[DEV_ID]*(temp2); |
| | | slottime=temp2; |
| | | max_slotnum=g_com_map[COM_INTERVAL]/temp2; |
| | | current_slotpos=g_com_map[DEV_ID]; |
| | | tyncpoll_time=(current_slotpos%max_slotnum)*slottime; |
| | | 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); |
| | |
| | | |
| | | if(g_com_map[CNT_UPDATE]==1) |
| | | { |
| | | uint32_t result = 0; |
| | | 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 |
| | | __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 |
| | | } |
| | | // if(g_com_map[CNT_REBOOT]==1) |
| | | // { |
| | | // g_com_map[CNT_REBOOT]=0; |
| | | // g_com_map[MAP_SIGN_INDEX]=0; |
| | | // save_com_map_to_flash(); |
| | | // delay_ms(100); |
| | | // SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软å¤ä½åå°bootloader |
| | | // } |
| | | if(g_com_map[CNT_RESTART]==1) |
| | | { |
| | | g_com_map[CNT_RESTART]=0; |
| | | save_com_map_to_flash(); |
| | | delay_ms(100); |
| | | SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软å¤ä½åå°bootloader |
| | | } |
| | | |
| | | } |
| | | uint16_t temp; |
| | | float dw_vbat; |
| | | int main(void) |
| | | { |
| | | |
| | |
| | | Modbus_RegMap(); |
| | | while(1) |
| | | { |
| | | if(g_com_map[0] != 0x55AA) |
| | | { |
| | | while(1) |
| | | IdleTask(); |
| | | } |
| | | if(g_start_send_flag) |
| | | { |
| | | g_start_send_flag = 0; |
| | | g_start_send_flag = 0; |
| | | temp=dwt_readtempvbat(1); |
| | | dw_vbat=(float)((temp&0xff)-173)/173+3.3; |
| | | if(dw_vbat>2.8) |
| | | Tag_App(); |
| | | }//else{ |
| | | IdleTask(); |