Browse Source

at指令下发可解析有返回值,at指令处理数据相关参考赵老师的modbus写的。

external_Interrupt
tianjialong 2 years ago
parent
commit
77b1e659e5
  1. 32
      MDK-ARM/LWIP.uvguix.29643
  2. 54
      usersrc/atcmd.c
  3. 3
      usersrc/atcmd.h
  4. 4
      usersrc/usermain.c
  5. 19
      usersrc/zport.c
  6. 7
      usersrc/zport.h

32
MDK-ARM/LWIP.uvguix.29643
File diff suppressed because it is too large
View File

54
usersrc/atcmd.c

@ -1,4 +1,16 @@
#include "atcmd.h"
#include "zport.h"
#define at_processer_rx_buf_size 128
#define at_processer_tx_buf_size 128
//
volatile uint16_t s_at_cmd_uart_rx_off = 0;
//
volatile bool s_at_cmd_uart_rx_buf_is_processing = false;
static uint8_t at_rx_buf[at_processer_rx_buf_size];
//static uint8_t at_tx_buf[at_processer_tx_buf_size];
/* AT指令表 */
const AT_cmd_func at_cmd_func[] = {
@ -132,3 +144,45 @@ unsigned char at_cmd_parse(unsigned char *p, unsigned char len)
return ret;
}
void at_cmd_processer_push_data(uint8_t rxdata)
{
if (!s_at_cmd_uart_rx_buf_is_processing)
{
if (s_at_cmd_uart_rx_off < at_processer_rx_buf_size)
{
at_rx_buf[s_at_cmd_uart_rx_off] = rxdata;
s_at_cmd_uart_rx_off++;
}
}
}
void at_cmd_processer_try_process_data(void)
{
/**
* @brief
* modbus协议3.5
*/
if (s_at_cmd_uart_rx_off != 0)
{
uint16_t modbus_uart_rx_off_before = s_at_cmd_uart_rx_off;
HAL_Delay(1);
sys_critical_enter();
if (s_at_cmd_uart_rx_off == modbus_uart_rx_off_before)
{
s_at_cmd_uart_rx_buf_is_processing = true;
}
sys_critical_exit();
if (s_at_cmd_uart_rx_buf_is_processing)
{
at_cmd_parse(at_rx_buf, s_at_cmd_uart_rx_off);
sys_critical_enter();
s_at_cmd_uart_rx_off = 0;
s_at_cmd_uart_rx_buf_is_processing = false;
sys_critical_exit();
}
}
}

3
usersrc/atcmd.h

@ -1,6 +1,7 @@
#pragma once
#include "main.h"
#include <stdio.h>
#include <stdbool.h>
#define AT_SUCCESS (0) /* 指令正常 */
#define AT_ERR (1) /* 指令异常 */
@ -33,3 +34,5 @@ unsigned char at_cmd_test(unsigned char *p, unsigned char len);
unsigned char at_cmd_ip(unsigned char *p, unsigned char len);
unsigned char AT_cmd_search(unsigned char *p, unsigned char len);
unsigned char at_cmd_parse(unsigned char *p, unsigned char len);
void at_cmd_processer_push_data(uint8_t rxdata);
void at_cmd_processer_try_process_data(void);

4
usersrc/usermain.c

@ -14,6 +14,7 @@
#include "zflash.h"
#include "config.h"
#include "zkey.h"
#include "atcmd.h"
#define KEY_SCAN_PERIOD 20
@ -76,7 +77,7 @@ void port_mock_on_uart_rx(uart_t *uart)
//
if (uart->uarthandler == &DEBUG_UART)
{
printf("%c", uart->rxbuf);
at_cmd_processer_push_data(uart->rxbuf);
}
}
@ -96,6 +97,7 @@ void user_main()
zkey_schedule();
udp_client_recv();
encoder_read_printf();
at_cmd_processer_try_process_data();
port_do_debug_light_state();
osDelay(1);
}

19
usersrc/zport.c

@ -4,6 +4,8 @@
#include <stdio.h>
#include "zboard.h"
uint8_t g_port_exit_critical_count;
uint32_t sys_haspassedms(uint32_t ticket)
{
uint32_t nowticket = HAL_GetTick();
@ -80,3 +82,20 @@ void port_uart_start_all_uart_receive(void)
uarts_start_receive(&m_uarts[i]);
}
}
void sys_critical_enter(void)
{
if (g_port_exit_critical_count == 0)
{
__disable_irq();
}
g_port_exit_critical_count++;
}
void sys_critical_exit(void)
{
g_port_exit_critical_count--;
if (g_port_exit_critical_count == 0)
{
__enable_irq();
}
}

7
usersrc/zport.h

@ -15,6 +15,11 @@ void port_do_debug_light_state(void);
/***********************************************************************************************************************
* *************************************************************************************************************** *
***********************************************************************************************************************/
// usart.c中对应的位置
// #define at_cmd_baundrate 115200
/*modebus判断一帧是以是否3.5byte时间内是否收到新的数据*/
// #define kat_cmd_baundrate_one_packet_delay_us ((1000000 / (at_cmd_baundrate / 8) + 1) * 3) // 211
typedef struct
{
UART_HandleTypeDef *uarthandler;
@ -23,3 +28,5 @@ typedef struct
void port_mock_on_uart_rx(uart_t *uart);
void port_uart_start_all_uart_receive(void);
void sys_critical_enter(void);
void sys_critical_exit(void);
Loading…
Cancel
Save