From acce179c49a6a9c625e9402e6f9046d1325ffcea Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期三, 26 二月 2025 18:04:26 +0800 Subject: [PATCH] 初步写完键盘驱动和串口初始化 --- keil/include/main/main.c | 396 +++++++++++++++++++++++++++++++++---------------------- 1 files changed, 237 insertions(+), 159 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 027c49d..1784f47 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -62,7 +62,7 @@ #include "HIDO_Timer.h" #include "TCPClient.h" -//#define DEBUG_MODE +#define DEBUG_MODE extern int simple_main(void); extern int temp_main(void); #define TEST_UART_POLL_MODE 0 @@ -186,14 +186,14 @@ if(fVoltage_mv<3300) { power_low_flag=1; - gps_air780_power_change(gps_power_state,0);//gps原样,关闭4G +// gps_air780_power_change(gps_power_state,0);//gps原样,关闭4G LOG_INFO(TRACE_MODULE_APP, "电池电压低于3.3V,4G,GPS停止工作\r\n"); }else{ power_low_flag=0; - gps_air780_power_change(gps_power_state,1);//gps原样,开启4G +// gps_air780_power_change(gps_power_state,1);//gps原样,开启4G LOG_INFO(TRACE_MODULE_APP, "电池电压正常,4G,GPS,正常工作\r\n"); } - gpio_pin_set(ADC_GND_ENABLE);//在拉高 +// gpio_pin_set(ADC_GND_ENABLE);//在拉高 // LOG_INFO(TRACE_MODULE_APP, "The voltage is %%%d \r\n",bat_percent); } //void UartInit(void) @@ -225,34 +225,35 @@ } void IMUTask(void) { - if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1) - {power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH); - mcu_deep_sleep(); - } +// if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1) +// {power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH); +// mcu_deep_sleep(); +// } } void UserKeyTask(void) { - if(!GET_USERKEY) - { - if(HIDO_TimerGetTick() - keystarttime>3) - { - userkey_state = 1; - keystarttime = HIDO_TimerGetTick(); - UDPClient_UploadGPS(); - } - if(HIDO_TimerGetTick() - keystarttime2>10) - { - g_com_map[CNT_RESTART] = 1; - } - }else - { - keystarttime = HIDO_TimerGetTick(); - keystarttime2 = HIDO_TimerGetTick(); - } +// if(!GET_USERKEY) +// { +// if(HIDO_TimerGetTick() - keystarttime>3) +// { +// userkey_state = 1; +// keystarttime = HIDO_TimerGetTick(); +// //UDPClient_UploadGPS(); +// } +// if(HIDO_TimerGetTick() - keystarttime2>10) +// { +// g_com_map[CNT_RESTART] = 1; +// } +// }else +// { +// keystarttime = HIDO_TimerGetTick(); +// keystarttime2 = HIDO_TimerGetTick(); +// } } void MinuteTask(void) -{ gpio_pin_clr(ADC_GND_ENABLE);//拉低 - adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 +{ +//{ gpio_pin_clr(ADC_GND_ENABLE);//拉低 +// adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 } uint8_t link_error_time; void SecondTask(void) @@ -279,7 +280,7 @@ { if(IfTCPConnected()) { - link_error_time=0; +// link_error_time=0; TCP_reconnect_timer =0; flag_TCP_reconnectting = 0; } else { @@ -309,25 +310,12 @@ uint8_t uwb_enable_flag=0; static void sleep_timer_callback(void *dev, uint32_t time) { - IO_control_init(); - if(enbale_blink_flag) - { - green_charge_state=0; - charge_red_on(); - } - charge_state_change();//充电状态判断 if(secondtask_count++%2==0) { flag_secondtask = 1; }else{ flag_secondtask = 0; } - if(enbale_blink_flag) - { - delay_us(5000); - green_charge_state=0; - charge_red_off(); - } if(delaysleep_count>0) delaysleep_count--; //GPS工作逻辑 @@ -369,19 +357,19 @@ memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID send_struct.tagId=dev_id;//更新设备ID - if(g_com_map[BIND_DEV_ID]==0) - { - UWB_work_state = UN_BIND; - }else{ - UWB_work_state = SEARCH_DEV; - } +// if(g_com_map[BIND_DEV_ID]==0) +// { +// UWB_work_state = UN_BIND; +// }else{ +// UWB_work_state = SEARCH_DEV; +// } //g_com_map[SEND_4G_SECOND] - if(g_com_map[SEND_4G_SECOND]<30) - { - gps_open_flag=0; - }else{ - gps_open_flag=1; - } +// if(g_com_map[SEND_4G_SECOND]<30) +// { +// gps_open_flag=0; +// }else{ +// gps_open_flag=1; +// } g_com_map[MODBUS_MODE] = 0; log_4g_enable_flag=g_com_map[LOG_4G_ENABLE]; ip0 = (g_com_map[TCP_IP_0]>>12&0xf)*1000+(g_com_map[TCP_IP_0]>>8&0xf)*100+(g_com_map[TCP_IP_0]>>4&0xf)*10+(g_com_map[TCP_IP_0]&0xf); @@ -389,9 +377,9 @@ ip2 = (g_com_map[TCP_IP_2]>>12&0xf)*1000+(g_com_map[TCP_IP_2]>>8&0xf)*100+(g_com_map[TCP_IP_2]>>4&0xf)*10+(g_com_map[TCP_IP_2]&0xf); ip3 = (g_com_map[TCP_IP_3]>>12&0xf)*1000+(g_com_map[TCP_IP_3]>>8&0xf)*100+(g_com_map[TCP_IP_3]>>4&0xf)*10+(g_com_map[TCP_IP_3]&0xf); port = g_com_map[TCP_PORT]; - g_com_map[VERSION] = (1<<8)|9; + g_com_map[VERSION] = (1<<8)|0; LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); - LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位手环 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); + LOG_INFO(TRACE_MODULE_APP,"固件版本:MK_对讲机 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",ip0,ip1,ip2,ip3,port); } @@ -399,54 +387,33 @@ void IdleTask(void) { - if(gpio_pin_get_val(INPUT_5V_Pin)) - { +// if(gpio_pin_get_val(INPUT_5V_Pin)) +// { - if(state5v==0) - { - state5v=1; - state5V_prase_flag=state5v; - gps_prase_flag=0;//解除gps解析 - uart1_change_from_gps_to_debug();//测试 - // uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma - //UartInit(); - } +// if(state5v==0) +// { +// state5v=1; +// state5V_prase_flag=state5v; +// gps_prase_flag=0;//解除gps解析 +// uart1_change_from_gps_to_debug();//测试 +// // uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma +// //UartInit(); +// } - //UART_CheckSend(); - } else { - if(state5v==1) - { - g_com_map[MODBUS_MODE] = 0; - state5v=0; - state5V_prase_flag=state5v; - gps_prase_flag=1;//恢复gps解析 - uart1_change_from_debug_to_gps();//测试 - // uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma - //UartDeinit(); - } - } +// //UART_CheckSend(); +// } else { +// if(state5v==1) +// { +// g_com_map[MODBUS_MODE] = 0; +// state5v=0; +// state5V_prase_flag=state5v; +// gps_prase_flag=1;//恢复gps解析 +// uart1_change_from_debug_to_gps();//测试 +// // uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma +// //UartDeinit(); +// } +// } UART_CheckReceive(); -} -int bind_check(void) -{ - if(g_com_map[BIND_DEV_ID]!=0x00) - { - return 1; -//绑定信息为1说明设备已经被下发绑定 - } else { - return 0; -//绑定信息为0说明设备未被绑定 - } -} -void check_if_in_search(void) -{ - if(link_success_flag==1) { //如果第一次测距收包成功那么则进入连接测距模式 - UWB_work_state=LINK_SUCCESS; - } else { //否则进入搜索模式 - UWB_work_state=SEARCH_DEV; - if(first_search_flag==0) - first_search_flag=1; - } } void boot_deinit(void) { @@ -479,12 +446,136 @@ .int_en = true, .callback = app_wdt_callback, }; + void board_key_scan(uint8_t *key) + { + uint8_t key_down_flag=0; + //第一行拉低做检测 + gpio_pin_clr(CN1); + gpio_pin_set(CN2); + gpio_pin_set(CN3); + gpio_pin_set(CN4); + if(!gpio_pin_get_val(COM1)||!gpio_pin_get_val(COM2)||!gpio_pin_get_val(COM3)||!gpio_pin_get_val(COM4)) + { + if(!gpio_pin_get_val(COM1)) + { + key_down_flag=1; + *key=1; + while(!gpio_pin_get_val(COM1)); + }else if(!gpio_pin_get_val(COM2)) + { + key_down_flag=1; + *key=2; + while(!gpio_pin_get_val(COM2)); + }else if (!gpio_pin_get_val(COM3)) + { + key_down_flag=1; + *key=3; + while(!gpio_pin_get_val(COM3)); + }else if (!gpio_pin_get_val(COM4)) + { + key_down_flag=1; + *key=4; + while(!gpio_pin_get_val(COM4)); + }else{ + key_down_flag=0; + + } + //第二行拉低做检测 + gpio_pin_set(CN1); + gpio_pin_clr(CN2); + gpio_pin_set(CN3); + gpio_pin_set(CN4); + if(!gpio_pin_get_val(COM1)) + { + key_down_flag=1; + *key=5; + while(!gpio_pin_get_val(COM1)); + }else if(!gpio_pin_get_val(COM2)) + { + key_down_flag=1; + *key=6; + while(!gpio_pin_get_val(COM2)); + }else if (!gpio_pin_get_val(COM3)) + { + key_down_flag=1; + *key=7; + while(!gpio_pin_get_val(COM3)); + }else if (!gpio_pin_get_val(COM4)) + { + key_down_flag=1; + *key=8; + while(!gpio_pin_get_val(COM4)); + }else{ + key_down_flag=0; + + } + + //第三行拉低做检测 + gpio_pin_set(CN1); + gpio_pin_set(CN2); + gpio_pin_clr(CN3); + gpio_pin_set(CN4); + if(!gpio_pin_get_val(COM1)) + { + key_down_flag=1; + *key=9; + while(!gpio_pin_get_val(COM1)); + }else if(!gpio_pin_get_val(COM2)) + { + key_down_flag=1; + *key=10; + while(!gpio_pin_get_val(COM2)); + }else if (!gpio_pin_get_val(COM3)) + { + key_down_flag=1; + *key=11; + while(!gpio_pin_get_val(COM3)); + }else if (!gpio_pin_get_val(COM4)) + { + key_down_flag=1; + *key=12; + while(!gpio_pin_get_val(COM4)); + }else{ + key_down_flag=0; + + } + //第四行拉低做检测 + gpio_pin_set(CN1); + gpio_pin_set(CN2); + gpio_pin_set(CN3); + gpio_pin_clr(CN4); + if(!gpio_pin_get_val(COM1)) + { + key_down_flag=1; + *key=13; + while(!gpio_pin_get_val(COM1)); + }else if(!gpio_pin_get_val(COM2)) + { + key_down_flag=1; + *key=14; + while(!gpio_pin_get_val(COM2)); + }else if (!gpio_pin_get_val(COM3)) + { + key_down_flag=1; + *key=15; + while(!gpio_pin_get_val(COM3)); + }else if (!gpio_pin_get_val(COM4)) + { + key_down_flag=1; + *key=16; + while(!gpio_pin_get_val(COM4)); + }else{ + key_down_flag=0; + + } + } + } int main(void) { board_clock_run(); boot_deinit(); board_pins_config(); - board_debug_console_open(TRACE_PORT_UART1); + board_debug_console_open(TRACE_PORT_UART0);//4G串口 // Reset reason reset_cause_get(); reset_cause_clear(); @@ -508,39 +599,27 @@ // Disable watchdog timer wdt_close(WDT_ID0); - wdt_open(WDT_ID0,&app_wdt_cfg);//30s检测喂狗 + LOG_INFO(TRACE_MODULE_APP, "UWB simple example\r\n"); // open system timer //sys_timer_open(); - // TODO 4G - Uart_Register(UART_ID_4G, UART_ID0); - Internet_Init(); - TCPClient_Init(); - gpio_open(); - board_output_init();//配置adcGND引脚 -// battery_monitor_open(); -// Voltage_input=battery_monitor_get(); -// battery_monitor_close(); - adc_open(&usr_adc_cfg); - - IIC2_Init(); - Accelerometer_Init(); - IO_control_init(); - io_pin_mux_set(SCL_PIN, IO_FUNC0);//测试测距波形 - gpio_pin_set_dir(SCL_PIN , GPIO_DIR_IN, 0); - io_pull_set(SCL_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL4); + +// adc_open(&usr_adc_cfg); + board_gpio_init(); + key_board_init(); +// IIC2_Init(); +// Accelerometer_Init(); +// io_pin_mux_set(SCL_PIN, IO_FUNC0);//测试测距波形 +// gpio_pin_set_dir(SCL_PIN , GPIO_DIR_IN, 0); +// io_pull_set(SCL_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL4); //gps_air780_power_change(0,1);//开启gps,4G //加速度计初始化必须在IO_control_init之前因为复用SDA引脚 - gpio_pin_clr(ADC_GND_ENABLE); Program_Init(); - //uart_open(UART_ID1, &test_uart_cfg); - - // uart1_change_from_gps_to_debug(); - //Uart1GpsRecDebugSend(); + uart_open(UART_ID1, &test_uart_cfg); uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); // Initialize low power mode @@ -550,44 +629,43 @@ //sleep_timer_start(__MS_TO_32K_CNT(g_com_map[COM_INTERVAL]));//测试 sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试 // board_5V_input_init(voltage_input_handler); - adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 - board_acceleration_detection_init(move_handler); +// adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 + //board_acceleration_detection_init(move_handler); // LOG_INFO(TRACE_MODULE_APP, "测试进入app"); - board_4GUsart_detection_init(_4gUsart_handler); + //board_4GUsart_detection_init(_4gUsart_handler); while (1) - { test4=gpio_pin_get_val(SCL_PIN); - wdt_ping(WDT_ID0);//喂狗 - if(!power_low_flag)//确认是否休眠下才开启功能 - { - if(flag_TCP_reconnectting||IfTCPConnected()) - { -// if(flag_TCP_reconnectting) -// { -// link_error_time++; -// }//后加的 - // LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n"); - -// if(flag_4guart_needinit) + { +// if(!power_low_flag)//确认是否休眠下才开启功能 +// { +// if(flag_TCP_reconnectting||IfTCPConnected()) +// { +//// if(flag_TCP_reconnectting) +//// { +//// link_error_time++; +//// }//后加的 +// // LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n"); +// +//// if(flag_4guart_needinit) +//// { +//// flag_4guart_needinit = 0; +//// AIR780EUartInit(); +//// }//yuan +// if(flag_4G_recdata==1) // { -// flag_4guart_needinit = 0; -// AIR780EUartInit(); -// }//yuan - if(flag_4G_recdata==1) - { - flag_4G_recdata = 2; - - //LOG_INFO(TRACE_MODULE_APP, "运行Socket_RecvAll tt2 %d\r\n",tt2); - Socket_RecvAll(); - } -// air780_led_on(); - Internet_Poll(); - HIDO_ATLitePoll(); - HIDO_TimerPoll(); - TCPClient_Poll(); -// air780_led_off(); - } - } +// flag_4G_recdata = 2; +// +// //LOG_INFO(TRACE_MODULE_APP, "运行Socket_RecvAll tt2 %d\r\n",tt2); +// Socket_RecvAll(); +// } +//// air780_led_on(); +// Internet_Poll(); +// HIDO_ATLitePoll(); +// HIDO_TimerPoll(); +// TCPClient_Poll(); +//// air780_led_off(); +// } +// } if(flag_secondtask) { flag_secondtask = 0; @@ -595,7 +673,7 @@ // time_count++; } UserKeyTask(); - IMUTask(); + //IMUTask(); IdleTask(); #ifndef DEBUG_MODE //if(flag_sleeptimer) -- Gitblit v1.9.3