This commit is contained in:
parent
3892c7740f
commit
ca8dbca12b
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"C_Cpp.errorSquiggles": "disabled"
|
||||
}
|
398
CH395Q/ch395.c
398
CH395Q/ch395.c
|
@ -4,45 +4,45 @@
|
|||
struct ch395q_t g_ch395q_sta;
|
||||
|
||||
/**
|
||||
* @brief ch395_gpio初始化
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief ch395_gpio初始化
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_gpio_init( void )
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_struct;
|
||||
|
||||
CH395_SCS_GPIO_CLK_ENABLE(); /* 使能SCS时钟 */
|
||||
CH395_INT_GPIO_CLK_ENABLE(); /* 使能INT时钟 */
|
||||
CH395_RST_GPIO_CLK_ENABLE(); /* 使能RST时钟 */
|
||||
CH395_SCS_GPIO_CLK_ENABLE(); /* 使能SCS时钟 */
|
||||
CH395_INT_GPIO_CLK_ENABLE(); /* 使能INT时钟 */
|
||||
CH395_RST_GPIO_CLK_ENABLE(); /* 使能RST时钟 */
|
||||
|
||||
/* SCS */
|
||||
gpio_init_struct.Pin = CH395_SCS_GPIO_PIN;
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推拉输出 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推拉输出 */
|
||||
HAL_GPIO_Init( CH395_SCS_GPIO_PORT, &gpio_init_struct );
|
||||
ch395_scs_low;
|
||||
|
||||
/* 初始化中断引脚 */
|
||||
/* 初始化中断引脚 */
|
||||
gpio_init_struct.Pin = CH395_INT_GPIO_PIN;
|
||||
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* 输入 */
|
||||
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* 输入 */
|
||||
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
|
||||
HAL_GPIO_Init( CH395_INT_GPIO_PORT, &gpio_init_struct );
|
||||
|
||||
gpio_init_struct.Pin = CH395_RST_GPIO_PIN;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 输出 */
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
|
||||
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 输出 */
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
|
||||
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
|
||||
HAL_GPIO_Init( CH395_RST_GPIO_PORT, &gpio_init_struct );
|
||||
HAL_GPIO_WritePin(CH395_RST_GPIO_PORT, CH395_RST_GPIO_PIN, GPIO_PIN_SET);
|
||||
HAL_Delay(20);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ch395关闭spi
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief ch395关闭spi
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_spi_off( void )
|
||||
{
|
||||
|
@ -53,76 +53,76 @@ void ch395_spi_off( void )
|
|||
/* SCK\SDI\SDO */
|
||||
gpio_init_struct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_OD; /* 开漏输出 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_OD; /* 开漏输出 */
|
||||
HAL_GPIO_Init( GPIOC, &gpio_init_struct );
|
||||
|
||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SPI1读写一个字节数据
|
||||
* @param txdata : 要发送的数据(1字节)
|
||||
* @retval 接收到的数据(1字节)
|
||||
* @brief SPI1读写一个字节数据
|
||||
* @param txdata : 要发送的数据(1字节)
|
||||
* @retval 接收到的数据(1字节)
|
||||
*/
|
||||
uint8_t spi2_read_write_byte(uint8_t txdata)
|
||||
{
|
||||
uint8_t rxdata;
|
||||
HAL_SPI_TransmitReceive(&hspi2, &txdata, &rxdata, 1, 1000);
|
||||
return rxdata; /* 返回收到的数据 */
|
||||
return rxdata; /* 返回收到的数据 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 硬件SPI输出且输入8个位数据
|
||||
* @param d:将要送入到ch395的数据
|
||||
* @retval 无
|
||||
* @brief 硬件SPI输出且输入8个位数据
|
||||
* @param d:将要送入到ch395的数据
|
||||
* @retval 无
|
||||
*/
|
||||
uint8_t ch395_read_write_byte( uint8_t data )
|
||||
{
|
||||
uint8_t rxdata;
|
||||
rxdata = spi2_read_write_byte(data); /* SPI写入一个CH395Q数据并返回一个数据 */
|
||||
return rxdata; /* 返回收到的数据 */
|
||||
rxdata = spi2_read_write_byte(data); /* SPI写入一个CH395Q数据并返回一个数据 */
|
||||
return rxdata; /* 返回收到的数据 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 向ch395写命令
|
||||
* @param 将要写入ch395的命令码
|
||||
* @retval 无
|
||||
* @brief 向ch395写命令
|
||||
* @param 将要写入ch395的命令码
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_write_cmd( uint8_t mcmd )
|
||||
{
|
||||
ch395_scs_hign; /* 防止CS原来为低,先将CS置高 */
|
||||
ch395_scs_low; /* 命令开始,CS拉低 */
|
||||
ch395_scs_hign; /* 防止CS原来为低,先将CS置高 */
|
||||
ch395_scs_low; /* 命令开始,CS拉低 */
|
||||
delay_us(2);
|
||||
ch395_read_write_byte(mcmd); /* SPI发送命令码 */
|
||||
delay_us(2); /* 必要延时,延时1.5uS确保读写周期不小于1.5uS */
|
||||
ch395_read_write_byte(mcmd); /* SPI发送命令码 */
|
||||
delay_us(2); /* 必要延时,延时1.5uS确保读写周期不小于1.5uS */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 向ch395写数据
|
||||
* @param 将要写入ch395的数据
|
||||
* @retval 无
|
||||
* @brief 向ch395写数据
|
||||
* @param 将要写入ch395的数据
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_write_data( uint8_t mdata )
|
||||
{
|
||||
ch395_read_write_byte(mdata); /* SPI发送数据 */
|
||||
ch395_read_write_byte(mdata); /* SPI发送数据 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 从ch395读数据
|
||||
* @param 无
|
||||
* @retval 返回读取的数据
|
||||
* @brief 从ch395读数据
|
||||
* @param 无
|
||||
* @retval 返回读取的数据
|
||||
*/
|
||||
uint8_t ch395_read_data( void )
|
||||
{
|
||||
uint8_t i;
|
||||
i = ch395_read_write_byte(0xff); /* SPI读数据 */
|
||||
i = ch395_read_write_byte(0xff); /* SPI读数据 */
|
||||
return i;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ch395_keeplive_set 保活定时器参数设置
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief ch395_keeplive_set 保活定时器参数设置
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_keeplive_set(void)
|
||||
{
|
||||
|
@ -132,9 +132,9 @@ void ch395_keeplive_set(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief ch395 socket配置
|
||||
* @param ch395_sokect:Socket配置信息
|
||||
* @retval 无
|
||||
* @brief ch395 socket配置
|
||||
* @param ch395_sokect:Socket配置信息
|
||||
* @retval 无
|
||||
*/
|
||||
uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
|
||||
{
|
||||
|
@ -143,7 +143,7 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
|
|||
return 0;
|
||||
}
|
||||
|
||||
// if (g_ch395q_sta.dhcp_status == DHCP_UP) /* DHCP获取成功状态 */
|
||||
// if (g_ch395q_sta.dhcp_status == DHCP_UP) /* DHCP获取成功状态 */
|
||||
// {
|
||||
// ch395_sokect->net_info.ip[0] = g_ch395q_sta.ipinf_buf[0];
|
||||
// ch395_sokect->net_info.ip[1] = g_ch395q_sta.ipinf_buf[1];
|
||||
|
@ -170,12 +170,12 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
|
|||
// ch395_sokect->net_info.dns2[2] = g_ch395q_sta.ipinf_buf[18];
|
||||
// ch395_sokect->net_info.dns2[3] = g_ch395q_sta.ipinf_buf[19];
|
||||
// }
|
||||
// else /* DHCP获取失败状态,设置静态IP地址信息 */
|
||||
// else /* DHCP获取失败状态,设置静态IP地址信息 */
|
||||
// {
|
||||
// ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的IP地址 */
|
||||
// ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */
|
||||
// ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码,默认为255.255.255.0*/
|
||||
// printf("静态IP信息.....................................\r\n");
|
||||
// ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的IP地址 */
|
||||
// ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */
|
||||
// ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码,默认为255.255.255.0*/
|
||||
// printf("静态IP信息.....................................\r\n");
|
||||
// printf("IP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.ipaddr[0], (uint16_t)ch395_sokect->net_config.ipaddr[1], (uint16_t)ch395_sokect->net_config.ipaddr[2], (uint16_t)ch395_sokect->net_config.ipaddr[3]);
|
||||
// printf("GWIP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.gwipaddr[0], (uint16_t)ch395_sokect->net_config.gwipaddr[1], (uint16_t)ch395_sokect->net_config.gwipaddr[2], (uint16_t)ch395_sokect->net_config.gwipaddr[3]);
|
||||
// printf("Mask:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.maskaddr[0], (uint16_t)ch395_sokect->net_config.maskaddr[1], (uint16_t)ch395_sokect->net_config.maskaddr[2], (uint16_t)ch395_sokect->net_config.maskaddr[3]);
|
||||
|
@ -183,51 +183,51 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
|
|||
// HAL_Delay(10);
|
||||
// }
|
||||
|
||||
ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的IP地址 */
|
||||
ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */
|
||||
ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码,默认为255.255.255.0*/
|
||||
printf("静态IP信息.....................................\r\n");
|
||||
ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的IP地址 */
|
||||
ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */
|
||||
ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码,默认为255.255.255.0*/
|
||||
printf("静态IP信息.....................................\r\n");
|
||||
printf("IP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.ipaddr[0], (uint16_t)ch395_sokect->net_config.ipaddr[1], (uint16_t)ch395_sokect->net_config.ipaddr[2], (uint16_t)ch395_sokect->net_config.ipaddr[3]);
|
||||
printf("GWIP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.gwipaddr[0], (uint16_t)ch395_sokect->net_config.gwipaddr[1], (uint16_t)ch395_sokect->net_config.gwipaddr[2], (uint16_t)ch395_sokect->net_config.gwipaddr[3]);
|
||||
printf("Mask:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.maskaddr[0], (uint16_t)ch395_sokect->net_config.maskaddr[1], (uint16_t)ch395_sokect->net_config.maskaddr[2], (uint16_t)ch395_sokect->net_config.maskaddr[3]);
|
||||
ch395_cmd_init();
|
||||
HAL_Delay(10);
|
||||
|
||||
//ch395_cmd_set_macaddr(ch395_sokect->net_config.macaddr); /* 设置MAC地址 */
|
||||
//ch395_cmd_set_macaddr(ch395_sokect->net_config.macaddr); /* 设置MAC地址 */
|
||||
|
||||
memcpy(&g_ch395q_sta.socket[ch395_sokect->socket_index].config, ch395_sokect, sizeof(ch395_socket));
|
||||
|
||||
switch(ch395_sokect->proto)
|
||||
{
|
||||
case CH395Q_SOCKET_UDP:
|
||||
/* socket 为UDP模式 */
|
||||
ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_UDP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查是否成功 */
|
||||
/* socket 为UDP模式 */
|
||||
ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_UDP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查是否成功 */
|
||||
break;
|
||||
case CH395Q_SOCKET_TCP_CLIENT:
|
||||
/* socket 为TCPClient模式 */
|
||||
ch395_keeplive_set(); /* 保活设置 */
|
||||
ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_connect(ch395_sokect->socket_index)); /* 检查tcp连接是否成功 */
|
||||
/* socket 为TCPClient模式 */
|
||||
ch395_keeplive_set(); /* 保活设置 */
|
||||
ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_connect(ch395_sokect->socket_index)); /* 检查tcp连接是否成功 */
|
||||
break;
|
||||
case CH395Q_SOCKET_TCP_SERVER:
|
||||
/* socket 为TCPServer模式 */
|
||||
//ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_listen(ch395_sokect->socket_index)); /* 监听tcp连接 */
|
||||
/* socket 为TCPServer模式 */
|
||||
//ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_listen(ch395_sokect->socket_index)); /* 监听tcp连接 */
|
||||
break;
|
||||
case CH395Q_SOCKET_MAC_RAW:
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
|
||||
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -235,18 +235,18 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 调试使用,显示错误代码,并停机
|
||||
* @param ierror 检测命令
|
||||
* @retval 无
|
||||
* @brief 调试使用,显示错误代码,并停机
|
||||
* @param ierror 检测命令
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_error(uint8_t ierror)
|
||||
{
|
||||
if (ierror == CMD_ERR_SUCCESS)
|
||||
{
|
||||
return; /* 操作成功 */
|
||||
return; /* 操作成功 */
|
||||
}
|
||||
|
||||
printf("Error: %02X\r\n", (uint16_t)ierror); /* 显示错误 */
|
||||
printf("Error: %02X\r\n", (uint16_t)ierror); /* 显示错误 */
|
||||
|
||||
// while ( 1 )
|
||||
// {
|
||||
|
@ -256,9 +256,9 @@ void ch395_error(uint8_t ierror)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief CH395 PHY状态
|
||||
* @param phy_status:PHY状态值
|
||||
* @retval 无
|
||||
* @brief CH395 PHY状态
|
||||
* @param phy_status:PHY状态值
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_phy_status(uint8_t phy_status)
|
||||
{
|
||||
|
@ -287,13 +287,13 @@ void ch395_phy_status(uint8_t phy_status)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置socket接口的接收与发送缓冲区
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief 设置socket接口的接收与发送缓冲区
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_socket_r_s_buf_modify(void)
|
||||
{
|
||||
ch395_set_socket_recv_buf(0,0,4); /* Socket 0 ,接收缓冲区4*512 = 2K,发送缓冲区2*512 = 1K*/
|
||||
ch395_set_socket_recv_buf(0,0,4); /* Socket 0 ,接收缓冲区4*512 = 2K,发送缓冲区2*512 = 1K*/
|
||||
ch395_set_socket_send_buf(0,4,2);
|
||||
|
||||
ch395_set_socket_recv_buf(1,6,4); /* Socket 1 */
|
||||
|
@ -320,9 +320,9 @@ void ch395_socket_r_s_buf_modify(void)
|
|||
|
||||
int re_cnt = 0;
|
||||
/**
|
||||
* @brief ch395_tcp初始化
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief ch395_tcp初始化
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_hardware_init(void)
|
||||
{
|
||||
|
@ -335,25 +335,25 @@ void ch395_hardware_init(void)
|
|||
g_ch395q_sta.ch395_reconnection = ch395_reconnection;
|
||||
g_ch395q_sta.dhcp_status = DHCP_STA;
|
||||
|
||||
i = ch395_cmd_check_exist(0x65); /* 测试命令,用于测试硬件以及接口通讯 */
|
||||
i = ch395_cmd_check_exist(0x65); /* 测试命令,用于测试硬件以及接口通讯 */
|
||||
|
||||
if (i != 0x9a)
|
||||
{
|
||||
g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */
|
||||
g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */
|
||||
}
|
||||
|
||||
ch395_cmd_reset(); /* 对ch395q复位 */
|
||||
HAL_Delay(100); /* 这里必须等待100以上延时 */
|
||||
ch395_cmd_reset(); /* 对ch395q复位 */
|
||||
HAL_Delay(100); /* 这里必须等待100以上延时 */
|
||||
|
||||
g_ch395q_sta.ch395_error(ch395_cmd_init()); /* 初始化ch395q命令 */
|
||||
g_ch395q_sta.ch395_error(ch395_cmd_init()); /* 初始化ch395q命令 */
|
||||
ch395_socket_r_s_buf_modify();
|
||||
// ch395_set_tcpmss(536);
|
||||
// ch395_set_start_para(FUN_PARA_FLAG_TCP_SERVER | SOCK_CTRL_FLAG_SOCKET_CLOSE);
|
||||
|
||||
do
|
||||
{
|
||||
g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* 获取PHY状态 */
|
||||
g_ch395q_sta.ch395_phy_cb(g_ch395q_sta.phy_status); /* 判断双工和网速模式 */
|
||||
g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* 获取PHY状态 */
|
||||
g_ch395q_sta.ch395_phy_cb(g_ch395q_sta.phy_status); /* 判断双工和网速模式 */
|
||||
|
||||
re_cnt++;
|
||||
if(re_cnt > 50)
|
||||
|
@ -362,58 +362,58 @@ void ch395_hardware_init(void)
|
|||
}
|
||||
while(g_ch395q_sta.phy_status == PHY_DISCONN);
|
||||
|
||||
g_ch395q_sta.version = ch395_cmd_get_ver(); /* 获取版本 */
|
||||
g_ch395q_sta.version = ch395_cmd_get_ver(); /* 获取版本 */
|
||||
printf("CH395VER : %2x\r\n", (uint16_t)g_ch395q_sta.version);
|
||||
|
||||
// i = ch395_dhcp_enable(1); /* 开启DHCP */
|
||||
// g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */
|
||||
// i = ch395_dhcp_enable(1); /* 开启DHCP */
|
||||
// g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */
|
||||
|
||||
HAL_Delay(1000); /* ch395q初始化延时 */
|
||||
HAL_Delay(1000); /* ch395q初始化延时 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief CH395 socket 中断,在全局中断中被调用
|
||||
* @param sockindex (0~7)
|
||||
* @retval 无
|
||||
* @brief CH395 socket 中断,在全局中断中被调用
|
||||
* @param sockindex (0~7)
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_socket_interrupt(uint8_t sockindex)
|
||||
{
|
||||
uint8_t sock_int_socket;
|
||||
uint16_t rx_len = 0;
|
||||
|
||||
sock_int_socket = ch395_get_socket_int(sockindex); /* 获取socket 的中断状态 */
|
||||
sock_int_socket = ch395_get_socket_int(sockindex); /* 获取socket 的中断状态 */
|
||||
|
||||
if (sock_int_socket & SINT_STAT_SENBUF_FREE) /* 发送缓冲区空闲,可以继续写入要发送的数据 */
|
||||
if (sock_int_socket & SINT_STAT_SENBUF_FREE) /* 发送缓冲区空闲,可以继续写入要发送的数据 */
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
if (sock_int_socket & SINT_STAT_SEND_OK) /* 发送完成中断 */
|
||||
if (sock_int_socket & SINT_STAT_SEND_OK) /* 发送完成中断 */
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
if (sock_int_socket & SINT_STAT_RECV) /* 接收中断 */
|
||||
if (sock_int_socket & SINT_STAT_RECV) /* 接收中断 */
|
||||
{
|
||||
g_ch395q_sta.socket[sockindex].config.recv.size = ch395_get_recv_length(sockindex); /* 获取当前缓冲区内数据长度 */
|
||||
g_ch395q_sta.socket[sockindex].config.recv.size = ch395_get_recv_length(sockindex); /* 获取当前缓冲区内数据长度 */
|
||||
rx_len = g_ch395q_sta.socket[sockindex].config.recv.size;
|
||||
ch395_get_recv_data(sockindex, rx_len, g_ch395q_sta.socket[sockindex].config.recv.buf); /* 读取数据 */
|
||||
ch395_get_recv_data(sockindex, rx_len, g_ch395q_sta.socket[sockindex].config.recv.buf); /* 读取数据 */
|
||||
g_ch395q_sta.socket[sockindex].config.recv.buf[rx_len] = '\0';
|
||||
modbus_process_tcp();
|
||||
printf("%s", g_ch395q_sta.socket[sockindex].config.recv.buf);
|
||||
g_ch395q_sta.socket[sockindex].config.recv.recv_flag |= 0x04;
|
||||
}
|
||||
|
||||
if (sock_int_socket & SINT_STAT_CONNECT) /* 连接中断,仅在TCP模式下有效 */
|
||||
if (sock_int_socket & SINT_STAT_CONNECT) /* 连接中断,仅在TCP模式下有效 */
|
||||
{
|
||||
if (g_ch395q_sta.socket[sockindex].config.proto == CH395Q_SOCKET_TCP_CLIENT)
|
||||
{
|
||||
ch395_set_keeplive(sockindex,1); /* 打开KEEPALIVE保活定时器 */
|
||||
ch395_setttl_num(sockindex,60); /* 设置TTL */
|
||||
ch395_set_keeplive(sockindex,1); /* 打开KEEPALIVE保活定时器 */
|
||||
ch395_setttl_num(sockindex,60); /* 设置TTL */
|
||||
}
|
||||
}
|
||||
|
||||
if (sock_int_socket & SINT_STAT_DISCONNECT) /* 断开中断,仅在TCP模式下有效 */
|
||||
if (sock_int_socket & SINT_STAT_DISCONNECT) /* 断开中断,仅在TCP模式下有效 */
|
||||
{
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(g_ch395q_sta.socket[sockindex].config.socket_index));
|
||||
|
||||
|
@ -428,14 +428,14 @@ void ch395_socket_interrupt(uint8_t sockindex)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
HAL_Delay(200); /* 延时200MS后再次重试,没有必要过于频繁连接 */
|
||||
HAL_Delay(200); /* 延时200MS后再次重试,没有必要过于频繁连接 */
|
||||
}
|
||||
|
||||
if (sock_int_socket & SINT_STAT_TIM_OUT) /* 超时中断,仅在TCP模式下有效 */
|
||||
if (sock_int_socket & SINT_STAT_TIM_OUT) /* 超时中断,仅在TCP模式下有效 */
|
||||
{
|
||||
if (g_ch395q_sta.socket[sockindex].config.proto == CH395Q_SOCKET_TCP_CLIENT)
|
||||
{
|
||||
HAL_Delay(200); /* 延时200MS后再次重试,没有必要过于频繁连接 */
|
||||
HAL_Delay(200); /* 延时200MS后再次重试,没有必要过于频繁连接 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(g_ch395q_sta.socket[sockindex].config.socket_index));
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_connect(g_ch395q_sta.socket[sockindex].config.socket_index));
|
||||
}
|
||||
|
@ -443,9 +443,9 @@ void ch395_socket_interrupt(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief CH395全局中断函数
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief CH395全局中断函数
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_interrupt_handler(void)
|
||||
{
|
||||
|
@ -454,22 +454,22 @@ void ch395_interrupt_handler(void)
|
|||
|
||||
init_status = ch395_cmd_get_glob_int_status_all();
|
||||
|
||||
if (init_status & GINT_STAT_UNREACH) /* 不可达中断,读取不可达信息 */
|
||||
if (init_status & GINT_STAT_UNREACH) /* 不可达中断,读取不可达信息 */
|
||||
{
|
||||
ch395_cmd_get_unreachippt(g_ch395q_sta.ipinf_buf);
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_IP_CONFLI) /* 产生IP冲突中断,建议重新修改CH395的 IP,并初始化CH395 */
|
||||
if (init_status & GINT_STAT_IP_CONFLI) /* 产生IP冲突中断,建议重新修改CH395的 IP,并初始化CH395 */
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_PHY_CHANGE) /* 产生PHY改变中断 */
|
||||
if (init_status & GINT_STAT_PHY_CHANGE) /* 产生PHY改变中断 */
|
||||
{
|
||||
g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* 获取PHY状态 */
|
||||
g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* 获取PHY状态 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_DHCP) /* 处理DHCP中断 */
|
||||
if (init_status & GINT_STAT_DHCP) /* 处理DHCP中断 */
|
||||
{
|
||||
g_ch395q_sta.dhcp_status = DHCP_DOWN;
|
||||
return;
|
||||
|
@ -488,72 +488,72 @@ void ch395_interrupt_handler(void)
|
|||
// break;
|
||||
// default:
|
||||
// g_ch395q_sta.dhcp_status = DHCP_DOWN;
|
||||
// /* 设置默认IP地址信息 */
|
||||
// printf("静态IP信息.....................................\r\n");
|
||||
// /* 设置默认IP地址信息 */
|
||||
// printf("静态IP信息.....................................\r\n");
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK0)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_0); /* 处理socket 0中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_0); /* 处理socket 0中断 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK1)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_1); /* 处理socket 1中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_1); /* 处理socket 1中断 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK2)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_2); /* 处理socket 2中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_2); /* 处理socket 2中断 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK3)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_3); /* 处理socket 3中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_3); /* 处理socket 3中断 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK4)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_4); /* 处理socket 4中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_4); /* 处理socket 4中断 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK5)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_5); /* 处理socket 5中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_5); /* 处理socket 5中断 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK6)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_6); /* 处理socket 6中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_6); /* 处理socket 6中断 */
|
||||
}
|
||||
|
||||
if (init_status & GINT_STAT_SOCK7)
|
||||
{
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_7); /* 处理socket 7中断 */
|
||||
ch395_socket_interrupt(CH395Q_SOCKET_7); /* 处理socket 7中断 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief CH395全局管理函数
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief CH395全局管理函数
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395q_handler(void)
|
||||
{
|
||||
if (ch395_int_pin_wire == 0)
|
||||
{
|
||||
ch395_interrupt_handler(); /* 中断处理函数 */
|
||||
ch395_interrupt_handler(); /* 中断处理函数 */
|
||||
}
|
||||
|
||||
g_ch395q_sta.ch395_reconnection(); /* 检测PHY状态,并重新连接 */
|
||||
g_ch395q_sta.ch395_reconnection(); /* 检测PHY状态,并重新连接 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 检测PHY状态,并重新连接
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief 检测PHY状态,并重新连接
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_reconnection(void)
|
||||
{
|
||||
|
@ -564,7 +564,7 @@ void ch395_reconnection(void)
|
|||
if (g_ch395q_sta.socket[socket_index].config.socket_enable == CH395Q_ENABLE)
|
||||
{
|
||||
ch395_close_socket(g_ch395q_sta.socket[socket_index].config.socket_index);
|
||||
g_ch395q_sta.ch395_error(ch395_dhcp_enable(0)); /* ch395q检测错误 */
|
||||
g_ch395q_sta.ch395_error(ch395_dhcp_enable(0)); /* ch395q检测错误 */
|
||||
g_ch395q_sta.socket[socket_index].config.socket_enable = CH395Q_DISABLE;
|
||||
g_ch395q_sta.dhcp_status = DHCP_STA;
|
||||
}
|
||||
|
@ -575,60 +575,60 @@ void ch395_reconnection(void)
|
|||
{
|
||||
if (g_ch395q_sta.dhcp_status == DHCP_STA)
|
||||
{
|
||||
ch395_cmd_reset(); /* 对ch395q复位 */
|
||||
HAL_Delay(100); /* 这里必须等待100以上延时 */
|
||||
ch395_cmd_reset(); /* 对ch395q复位 */
|
||||
HAL_Delay(100); /* 这里必须等待100以上延时 */
|
||||
ch395_cmd_init();
|
||||
HAL_Delay(100); /* 这里必须等待100以上延时 */
|
||||
HAL_Delay(100); /* 这里必须等待100以上延时 */
|
||||
ch395_socket_r_s_buf_modify();
|
||||
// ch395_set_tcpmss(536);
|
||||
// ch395_set_start_para(FUN_PARA_FLAG_TCP_SERVER | SOCK_CTRL_FLAG_SOCKET_CLOSE);
|
||||
g_ch395q_sta.ch395_error(ch395_dhcp_enable(1)); /* 开启DHCP */
|
||||
g_ch395q_sta.ch395_error(ch395_dhcp_enable(1)); /* 开启DHCP */
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
if (ch395_int_pin_wire == 0)
|
||||
{
|
||||
ch395_interrupt_handler(); /* 中断处理函数 */
|
||||
ch395_interrupt_handler(); /* 中断处理函数 */
|
||||
}
|
||||
}
|
||||
while (g_ch395q_sta.dhcp_status == DHCP_STA); /* 获取DHCP */
|
||||
while (g_ch395q_sta.dhcp_status == DHCP_STA); /* 获取DHCP */
|
||||
|
||||
switch(g_ch395q_sta.socket[socket_index].config.proto)
|
||||
{
|
||||
case CH395Q_SOCKET_UDP:
|
||||
/* socket 为UDP模式 */
|
||||
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_UDP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(socket_index, g_ch395q_sta.socket[socket_index].config.des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查是否成功 */
|
||||
/* socket 为UDP模式 */
|
||||
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_UDP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(socket_index, g_ch395q_sta.socket[socket_index].config.des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查是否成功 */
|
||||
break;
|
||||
case CH395Q_SOCKET_TCP_CLIENT:
|
||||
/* socket 为TCPClient模式 */
|
||||
ch395_keeplive_set(); /* 保活设置 */
|
||||
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(socket_index,g_ch395q_sta.socket[socket_index].config.des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(socket_index,g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_connect(socket_index)); /* 检查tcp连接是否成功 */
|
||||
/* socket 为TCPClient模式 */
|
||||
ch395_keeplive_set(); /* 保活设置 */
|
||||
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_desport(socket_index,g_ch395q_sta.socket[socket_index].config.des_port); /* 设置socket 0目的端口 */
|
||||
ch395_set_socket_sourport(socket_index,g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_connect(socket_index)); /* 检查tcp连接是否成功 */
|
||||
break;
|
||||
case CH395Q_SOCKET_TCP_SERVER:
|
||||
/* socket 为TCPServer模式 */
|
||||
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_listen(socket_index)); /* 监听tcp连接 */
|
||||
/* socket 为TCPServer模式 */
|
||||
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */
|
||||
ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */
|
||||
g_ch395q_sta.ch395_error(ch395_tcp_listen(socket_index)); /* 监听tcp连接 */
|
||||
break;
|
||||
case CH395Q_SOCKET_MAC_RAW:
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */
|
||||
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */
|
||||
break;
|
||||
default:
|
||||
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP);
|
||||
ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 1~7源端口 */
|
||||
ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 1~7源端口 */
|
||||
break;
|
||||
}
|
||||
g_ch395q_sta.socket[socket_index].config.socket_enable = CH395Q_ENABLE;
|
||||
|
@ -638,21 +638,21 @@ void ch395_reconnection(void)
|
|||
}
|
||||
|
||||
|
||||
/* 本地网络信息:IP地址、网关地址、子网掩码和MAC地址 */
|
||||
/* 本地网络信息:IP地址、网关地址、子网掩码和MAC地址 */
|
||||
uint8_t ch395_ipaddr[4] = {192,168,114,194};
|
||||
uint8_t ch395_gw_ipaddr[4] = {192,168,114,110};
|
||||
uint8_t ch395_ipmask[4] = {255,255,255,0};
|
||||
uint8_t ch395_macaddr[6] = {0x5C,0x53,0x10,0x6C,0x18,0x49};
|
||||
/* 远程IP地址设置 */
|
||||
/* 远程IP地址设置 */
|
||||
//uint8_t ch395_des_ipaddr[4] = {192,168,1,111};
|
||||
static uint8_t socket0_send_buf[] = {"This is from CH395Q\r\n"};
|
||||
static uint8_t socket0_recv_buf[1024];
|
||||
ch395_socket cha95_sockct_sta[8];
|
||||
|
||||
/**
|
||||
* @brief 例程测试
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief 例程测试
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_init(void)
|
||||
{
|
||||
|
@ -660,22 +660,22 @@ void ch395_init(void)
|
|||
// {
|
||||
// ch395q_handler();
|
||||
// }
|
||||
// while (g_ch395q_sta.dhcp_status == DHCP_STA); /* 获取DHCP */
|
||||
// while (g_ch395q_sta.dhcp_status == DHCP_STA); /* 获取DHCP */
|
||||
|
||||
cha95_sockct_sta[0].socket_enable = CH395Q_ENABLE; /* 使能socket对 */
|
||||
cha95_sockct_sta[0].socket_index = CH395Q_SOCKET_0; /* 设置socket对 */
|
||||
//memcpy(cha95_sockct_sta[0].des_ip, ch395_des_ipaddr, sizeof(cha95_sockct_sta[0].des_ip)); /* 设置目标IP地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.ipaddr, ch395_ipaddr, sizeof(cha95_sockct_sta[0].net_config.ipaddr)); /* 设置静态本地IP地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.gwipaddr, ch395_gw_ipaddr, sizeof(cha95_sockct_sta[0].net_config.gwipaddr)); /* 设置静态网关IP地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.maskaddr, ch395_ipmask, sizeof(cha95_sockct_sta[0].net_config.maskaddr)); /* 设置静态子网掩码地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.macaddr, ch395_macaddr, sizeof(cha95_sockct_sta[0].net_config.macaddr)); /* 设置静态MAC地址 */
|
||||
cha95_sockct_sta[0].sour_port = 8080; /* 源端口 */
|
||||
cha95_sockct_sta[0].proto = CH395Q_SOCKET_TCP_SERVER; /* 设置协议 */
|
||||
cha95_sockct_sta[0].send.buf = socket0_send_buf; /* 发送数据 */
|
||||
cha95_sockct_sta[0].send.size = sizeof(socket0_send_buf); /* 发送数据大小 */
|
||||
cha95_sockct_sta[0].recv.buf = socket0_recv_buf; /* 接收数据缓冲区 */
|
||||
cha95_sockct_sta[0].recv.size = sizeof(socket0_recv_buf); /* 接收数据大小 */
|
||||
ch395q_socket_config(&cha95_sockct_sta[0]); /* 配置socket参数 */
|
||||
cha95_sockct_sta[0].socket_enable = CH395Q_ENABLE; /* 使能socket对 */
|
||||
cha95_sockct_sta[0].socket_index = CH395Q_SOCKET_0; /* 设置socket对 */
|
||||
//memcpy(cha95_sockct_sta[0].des_ip, ch395_des_ipaddr, sizeof(cha95_sockct_sta[0].des_ip)); /* 设置目标IP地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.ipaddr, ch395_ipaddr, sizeof(cha95_sockct_sta[0].net_config.ipaddr)); /* 设置静态本地IP地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.gwipaddr, ch395_gw_ipaddr, sizeof(cha95_sockct_sta[0].net_config.gwipaddr)); /* 设置静态网关IP地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.maskaddr, ch395_ipmask, sizeof(cha95_sockct_sta[0].net_config.maskaddr)); /* 设置静态子网掩码地址 */
|
||||
memcpy(cha95_sockct_sta[0].net_config.macaddr, ch395_macaddr, sizeof(cha95_sockct_sta[0].net_config.macaddr)); /* 设置静态MAC地址 */
|
||||
cha95_sockct_sta[0].sour_port = 8080; /* 源端口 */
|
||||
cha95_sockct_sta[0].proto = CH395Q_SOCKET_TCP_SERVER; /* 设置协议 */
|
||||
cha95_sockct_sta[0].send.buf = socket0_send_buf; /* 发送数据 */
|
||||
cha95_sockct_sta[0].send.size = sizeof(socket0_send_buf); /* 发送数据大小 */
|
||||
cha95_sockct_sta[0].recv.buf = socket0_recv_buf; /* 接收数据缓冲区 */
|
||||
cha95_sockct_sta[0].recv.size = sizeof(socket0_recv_buf); /* 接收数据大小 */
|
||||
ch395q_socket_config(&cha95_sockct_sta[0]); /* 配置socket参数 */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
#include "ch395.h"
|
||||
|
||||
/**
|
||||
* @brief 复位ch395芯片
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief 复位ch395芯片
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_reset(void)
|
||||
{
|
||||
|
@ -14,9 +14,9 @@ void ch395_cmd_reset(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 使ch395进入睡眠状态
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @brief 使ch395进入睡眠状态
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_sleep(void)
|
||||
{
|
||||
|
@ -25,9 +25,9 @@ void ch395_cmd_sleep(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取芯片以及固件版本号,1字节,高四位表示芯片版本,
|
||||
* @param 无
|
||||
* @retval 1字节芯片及固件版本号
|
||||
* @brief 获取芯片以及固件版本号,1字节,高四位表示芯片版本,
|
||||
* @param 无
|
||||
* @retval 1字节芯片及固件版本号
|
||||
*/
|
||||
uint8_t ch395_cmd_get_ver(void)
|
||||
{
|
||||
|
@ -39,9 +39,9 @@ uint8_t ch395_cmd_get_ver(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 测试命令,用于测试硬件以及接口通讯,
|
||||
* @param 1字节测试数据
|
||||
* @retval 硬件ok,返回 testdata按位取反
|
||||
* @brief 测试命令,用于测试硬件以及接口通讯,
|
||||
* @param 1字节测试数据
|
||||
* @retval 硬件ok,返回 testdata按位取反
|
||||
*/
|
||||
uint8_t ch395_cmd_check_exist(uint8_t testdata)
|
||||
{
|
||||
|
@ -55,9 +55,9 @@ uint8_t ch395_cmd_check_exist(uint8_t testdata)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置phy,主要设置ch395 phy为100/10m 或者全双工半双工,ch395默为自动协商。
|
||||
* @param 参考phy 命令参数/状态
|
||||
* @retval 无
|
||||
* @brief 设置phy,主要设置ch395 phy为100/10m 或者全双工半双工,ch395默为自动协商。
|
||||
* @param 参考phy 命令参数/状态
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_phy(uint8_t phystat)
|
||||
{
|
||||
|
@ -67,9 +67,9 @@ void ch395_cmd_set_phy(uint8_t phystat)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取phy的状态
|
||||
* @param 无
|
||||
* @retval 当前ch395phy状态,参考phy参数/状态定义
|
||||
* @brief 获取phy的状态
|
||||
* @param 无
|
||||
* @retval 当前ch395phy状态,参考phy参数/状态定义
|
||||
*/
|
||||
uint8_t ch395_cmd_get_phy_status(void)
|
||||
{
|
||||
|
@ -82,9 +82,9 @@ uint8_t ch395_cmd_get_phy_status(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取全局中断状态,收到此命令ch395自动取消中断,0x43及以下版本使用
|
||||
* @param 无
|
||||
* @retval 返回当前的全局中断状态
|
||||
* @brief 获取全局中断状态,收到此命令ch395自动取消中断,0x43及以下版本使用
|
||||
* @param 无
|
||||
* @retval 返回当前的全局中断状态
|
||||
*/
|
||||
uint8_t ch395_cmd_get_glob_int_status(void)
|
||||
{
|
||||
|
@ -97,9 +97,9 @@ uint8_t ch395_cmd_get_glob_int_status(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化ch395芯片
|
||||
* @param 无
|
||||
* @retval 返回执行结果
|
||||
* @brief 初始化ch395芯片
|
||||
* @param 无
|
||||
* @retval 返回执行结果
|
||||
*/
|
||||
uint8_t ch395_cmd_init(void)
|
||||
{
|
||||
|
@ -111,17 +111,17 @@ uint8_t ch395_cmd_init(void)
|
|||
|
||||
while (1)
|
||||
{
|
||||
HAL_Delay(10); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
HAL_Delay(10); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
|
||||
if (s != CH395_ERR_BUSY)
|
||||
{
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
}
|
||||
|
||||
if (i++ > 200)
|
||||
{
|
||||
return CH395_ERR_UNKNOW; /* 超时退出,本函数需要500MS以上执行完毕 */
|
||||
return CH395_ERR_UNKNOW; /* 超时退出,本函数需要500MS以上执行完毕 */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -129,9 +129,9 @@ uint8_t ch395_cmd_init(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置ch395串口波特率,仅在串口模式下有效
|
||||
* @param baudrate 串口波特率
|
||||
* @retval 无
|
||||
* @brief 设置ch395串口波特率,仅在串口模式下有效
|
||||
* @param baudrate 串口波特率
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_uart_baud_rate(uint32_t baudrate)
|
||||
{
|
||||
|
@ -144,9 +144,9 @@ void ch395_cmd_set_uart_baud_rate(uint32_t baudrate)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取命令执行状态,某些命令需要等待命令执行结果
|
||||
* @param 无
|
||||
* @retval 返回上一条命令执行状态
|
||||
* @brief 获取命令执行状态,某些命令需要等待命令执行结果
|
||||
* @param 无
|
||||
* @retval 返回上一条命令执行状态
|
||||
*/
|
||||
uint8_t ch395_get_cmd_status(void)
|
||||
{
|
||||
|
@ -159,9 +159,9 @@ uint8_t ch395_get_cmd_status(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置ch395的ip地址
|
||||
* @param ipaddr 指ip地址
|
||||
* @retval 无
|
||||
* @brief 设置ch395的ip地址
|
||||
* @param ipaddr 指ip地址
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_ipaddr(uint8_t *ipaddr)
|
||||
{
|
||||
|
@ -178,9 +178,9 @@ void ch395_cmd_set_ipaddr(uint8_t *ipaddr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置ch395的网关ip地址
|
||||
* @param ipaddr 指向网关ip地址
|
||||
* @retval 无
|
||||
* @brief 设置ch395的网关ip地址
|
||||
* @param ipaddr 指向网关ip地址
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_gw_ipaddr(uint8_t *gwipaddr)
|
||||
{
|
||||
|
@ -197,9 +197,9 @@ void ch395_cmd_set_gw_ipaddr(uint8_t *gwipaddr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置ch395的子网掩码,默认为255.255.255.0
|
||||
* @param maskaddr 指子网掩码地址
|
||||
* @retval 无
|
||||
* @brief 设置ch395的子网掩码,默认为255.255.255.0
|
||||
* @param maskaddr 指子网掩码地址
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_maskaddr(uint8_t *maskaddr)
|
||||
{
|
||||
|
@ -216,9 +216,9 @@ void ch395_cmd_set_maskaddr(uint8_t *maskaddr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置ch395的mac地址。
|
||||
* @param mcaddr mac地址指针
|
||||
* @retval 无
|
||||
* @brief 设置ch395的mac地址。
|
||||
* @param mcaddr mac地址指针
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_macaddr(uint8_t *amcaddr)
|
||||
{
|
||||
|
@ -236,9 +236,9 @@ void ch395_cmd_set_macaddr(uint8_t *amcaddr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取ch395的mac地址。
|
||||
* @param amcaddr mac地址指针
|
||||
* @retval 无
|
||||
* @brief 获取ch395的mac地址。
|
||||
* @param amcaddr mac地址指针
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_get_macaddr(uint8_t *amcaddr)
|
||||
{
|
||||
|
@ -255,11 +255,11 @@ void ch395_cmd_get_macaddr(uint8_t *amcaddr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置mac过滤。
|
||||
* @param filtype 参考 mac过滤
|
||||
* @brief 设置mac过滤。
|
||||
* @param filtype 参考 mac过滤
|
||||
* @param table0 hash0
|
||||
* @param table1 hash1
|
||||
* @retval 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_macfilt(uint8_t filtype, uint32_t table0, uint32_t table1)
|
||||
{
|
||||
|
@ -278,13 +278,13 @@ void ch395_cmd_set_macfilt(uint8_t filtype, uint32_t table0, uint32_t table1)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取不可达信息 (ip,port,protocol type)
|
||||
* @param list 保存获取到的不可达
|
||||
@arg 第1个字节为不可达代码,请参考 不可达代码(ch395inc.h)
|
||||
@arg 第2个字节为ip包协议类型
|
||||
@arg 第3-4字节为端口号
|
||||
@arg 第4-8字节为ip地址
|
||||
* @retval 无
|
||||
* @brief 获取不可达信息 (ip,port,protocol type)
|
||||
* @param list 保存获取到的不可达
|
||||
@arg 第1个字节为不可达代码,请参考 不可达代码(ch395inc.h)
|
||||
@arg 第2个字节为ip包协议类型
|
||||
@arg 第3-4字节为端口号
|
||||
@arg 第4-8字节为ip地址
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_get_unreachippt(uint8_t *list)
|
||||
{
|
||||
|
@ -301,10 +301,10 @@ void ch395_cmd_get_unreachippt(uint8_t *list)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取远端的ip和端口地址,一般在tcp server模式下使用
|
||||
* @param sockindex socket索引
|
||||
* @param list 保存ip和端口
|
||||
* @retval 无
|
||||
* @brief 获取远端的ip和端口地址,一般在tcp server模式下使用
|
||||
* @param sockindex socket索引
|
||||
* @param list 保存ip和端口
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_get_remoteipp(uint8_t sockindex, uint8_t *list)
|
||||
{
|
||||
|
@ -322,10 +322,10 @@ void ch395_cmd_get_remoteipp(uint8_t sockindex, uint8_t *list)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置socket n的目的ip地址
|
||||
* @param sockindex socket索引
|
||||
* @param ipaddr 指向ip地址
|
||||
* @retval 无
|
||||
* @brief 设置socket n的目的ip地址
|
||||
* @param sockindex socket索引
|
||||
* @param ipaddr 指向ip地址
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_socket_desip(uint8_t sockindex, uint8_t *ipaddr)
|
||||
{
|
||||
|
@ -339,10 +339,10 @@ void ch395_set_socket_desip(uint8_t sockindex, uint8_t *ipaddr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置socket 的协议类型
|
||||
* @param sockindex socket索引,prottype 协议类型
|
||||
* @param 请参考 socket协议类型定义(ch395inc.h)
|
||||
* @retval 无
|
||||
* @brief 设置socket 的协议类型
|
||||
* @param sockindex socket索引,prottype 协议类型
|
||||
* @param 请参考 socket协议类型定义(ch395inc.h)
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_socket_prot_type(uint8_t sockindex, uint8_t prottype)
|
||||
{
|
||||
|
@ -353,10 +353,10 @@ void ch395_set_socket_prot_type(uint8_t sockindex, uint8_t prottype)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置socket n的协议类型
|
||||
* @param sockindex socket索引
|
||||
* @param desprot 2字节目的端口
|
||||
* @retval 无
|
||||
* @brief 设置socket n的协议类型
|
||||
* @param sockindex socket索引
|
||||
* @param desprot 2字节目的端口
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_socket_desport(uint8_t sockindex, uint16_t desprot)
|
||||
{
|
||||
|
@ -368,10 +368,10 @@ void ch395_set_socket_desport(uint8_t sockindex, uint16_t desprot)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置socket n的协议类型
|
||||
* @param sockindex socket索引
|
||||
* @param desprot 2字节源端口
|
||||
* @retval 无
|
||||
* @brief 设置socket n的协议类型
|
||||
* @param sockindex socket索引
|
||||
* @param desprot 2字节源端口
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_socket_sourport(uint8_t sockindex, uint16_t surprot)
|
||||
{
|
||||
|
@ -383,10 +383,10 @@ void ch395_set_socket_sourport(uint8_t sockindex, uint16_t surprot)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief ip模式下,socket ip包协议字段
|
||||
* @param sockindex socket索引
|
||||
* @param prototype ipraw模式1字节协议字段
|
||||
* @retval 无
|
||||
* @brief ip模式下,socket ip包协议字段
|
||||
* @param sockindex socket索引
|
||||
* @param prototype ipraw模式1字节协议字段
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_socket_ipraw_proto(uint8_t sockindex, uint8_t prototype)
|
||||
{
|
||||
|
@ -397,11 +397,11 @@ void ch395_set_socket_ipraw_proto(uint8_t sockindex, uint8_t prototype)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 开启/关闭 ping
|
||||
* @param senable :0 / 1, 具体含义如下:
|
||||
* @arg 1: 开启ping
|
||||
* @arg 0: 关闭ping
|
||||
* @retval 无
|
||||
* @brief 开启/关闭 ping
|
||||
* @param senable :0 / 1, 具体含义如下:
|
||||
* @arg 1: 开启ping
|
||||
* @arg 0: 关闭ping
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_enable_ping(uint8_t enable)
|
||||
{
|
||||
|
@ -411,11 +411,11 @@ void ch395_enable_ping(uint8_t enable)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 向发送缓冲区写数据
|
||||
* @param sockindex socket索引
|
||||
* @param databuf 数据缓冲区
|
||||
* @param len 长度
|
||||
* @retval 无
|
||||
* @brief 向发送缓冲区写数据
|
||||
* @param sockindex socket索引
|
||||
* @param databuf 数据缓冲区
|
||||
* @param len 长度
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_send_data(uint8_t sockindex, uint8_t *databuf, uint16_t len)
|
||||
{
|
||||
|
@ -435,9 +435,9 @@ void ch395_send_data(uint8_t sockindex, uint8_t *databuf, uint16_t len)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取接收缓冲区长度
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回接收缓冲区有效长度
|
||||
* @brief 获取接收缓冲区长度
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回接收缓冲区有效长度
|
||||
*/
|
||||
uint16_t ch395_get_recv_length(uint8_t sockindex)
|
||||
{
|
||||
|
@ -452,9 +452,9 @@ uint16_t ch395_get_recv_length(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 清除接收缓冲区
|
||||
* @param sockindex socket索引
|
||||
* @retval 无
|
||||
* @brief 清除接收缓冲区
|
||||
* @param sockindex socket索引
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_clear_recv_buf(uint8_t sockindex)
|
||||
{
|
||||
|
@ -464,11 +464,11 @@ void ch395_clear_recv_buf(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 读取接收缓冲区数据
|
||||
* @param sockindex socket索引
|
||||
* @param len 长度
|
||||
* @param pbuf 缓冲区
|
||||
* @retval 无
|
||||
* @brief 读取接收缓冲区数据
|
||||
* @param sockindex socket索引
|
||||
* @param len 长度
|
||||
* @param pbuf 缓冲区
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_get_recv_data(uint8_t sockindex, uint16_t len, uint8_t *pbuf)
|
||||
{
|
||||
|
@ -492,9 +492,9 @@ void ch395_get_recv_data(uint8_t sockindex, uint16_t len, uint8_t *pbuf)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置重试次数
|
||||
* @param count 重试值,最大为20次
|
||||
* @retval 无
|
||||
* @brief 设置重试次数
|
||||
* @param count 重试值,最大为20次
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_retry_count(uint8_t count)
|
||||
{
|
||||
|
@ -504,9 +504,9 @@ void ch395_cmd_set_retry_count(uint8_t count)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置重试周期
|
||||
* @param period 重试周期单位为毫秒,最大1000ms
|
||||
* @retval 无
|
||||
* @brief 设置重试周期
|
||||
* @param period 重试周期单位为毫秒,最大1000ms
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_cmd_set_retry_period(uint16_t period)
|
||||
{
|
||||
|
@ -517,9 +517,9 @@ void ch395_cmd_set_retry_period(uint16_t period)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取socket
|
||||
* @param sockindex socket索引
|
||||
* @retval socket n的状态信息,第1字节为socket 打开或者关闭,第2字节为tcp状态
|
||||
* @brief 获取socket
|
||||
* @param sockindex socket索引
|
||||
* @retval socket n的状态信息,第1字节为socket 打开或者关闭,第2字节为tcp状态
|
||||
*/
|
||||
void ch395_cmd_get_socket_status(uint8_t sockindex, uint8_t *status)
|
||||
{
|
||||
|
@ -531,9 +531,9 @@ void ch395_cmd_get_socket_status(uint8_t sockindex, uint8_t *status)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 打开socket,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
* @brief 打开socket,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
*/
|
||||
uint8_t ch395_open_socket(uint8_t sockindex)
|
||||
{
|
||||
|
@ -545,17 +545,17 @@ uint8_t ch395_open_socket(uint8_t sockindex)
|
|||
|
||||
while (1)
|
||||
{
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
|
||||
if (s != CH395_ERR_BUSY)
|
||||
{
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
}
|
||||
|
||||
if (i++ > 200)
|
||||
{
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -563,9 +563,9 @@ uint8_t ch395_open_socket(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 关闭socket,
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
* @brief 关闭socket,
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
*/
|
||||
uint8_t ch395_close_socket(uint8_t sockindex)
|
||||
{
|
||||
|
@ -577,17 +577,17 @@ uint8_t ch395_close_socket(uint8_t sockindex)
|
|||
|
||||
while (1)
|
||||
{
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
|
||||
if (s != CH395_ERR_BUSY)
|
||||
{
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
}
|
||||
|
||||
if (i++ > 200)
|
||||
{
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -595,9 +595,9 @@ uint8_t ch395_close_socket(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief tcp连接,仅在tcp模式下有效,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
* @brief tcp连接,仅在tcp模式下有效,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
*/
|
||||
uint8_t ch395_tcp_connect(uint8_t sockindex)
|
||||
{
|
||||
|
@ -609,17 +609,17 @@ uint8_t ch395_tcp_connect(uint8_t sockindex)
|
|||
|
||||
while (1)
|
||||
{
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
|
||||
if (s != CH395_ERR_BUSY)
|
||||
{
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
}
|
||||
|
||||
if (i++ > 200)
|
||||
{
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -627,9 +627,9 @@ uint8_t ch395_tcp_connect(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief tcp监听,仅在tcp模式下有效,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
* @brief tcp监听,仅在tcp模式下有效,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 返回执行结果
|
||||
*/
|
||||
uint8_t ch395_tcp_listen(uint8_t sockindex)
|
||||
{
|
||||
|
@ -641,17 +641,17 @@ uint8_t ch395_tcp_listen(uint8_t sockindex)
|
|||
|
||||
while (1)
|
||||
{
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
|
||||
if (s != CH395_ERR_BUSY)
|
||||
{
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
}
|
||||
|
||||
if (i++ > 200)
|
||||
{
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -659,9 +659,9 @@ uint8_t ch395_tcp_listen(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief tcp断开,仅在tcp模式下有效,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 无
|
||||
* @brief tcp断开,仅在tcp模式下有效,此命令需要等待执行成功
|
||||
* @param sockindex socket索引
|
||||
* @retval 无
|
||||
*/
|
||||
uint8_t ch395_tcp_disconnect(uint8_t sockindex)
|
||||
{
|
||||
|
@ -673,26 +673,26 @@ uint8_t ch395_tcp_disconnect(uint8_t sockindex)
|
|||
|
||||
while (1)
|
||||
{
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
HAL_Delay(5); /* 延时查询,建议2MS以上 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
|
||||
if (s != CH395_ERR_BUSY)
|
||||
{
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
break; /* 如果CH395芯片返回忙状态 */
|
||||
}
|
||||
|
||||
if (i++ > 200)
|
||||
{
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取socket n的中断状态
|
||||
* @param sockindex socket索引
|
||||
* @retval 中断状态
|
||||
* @brief 获取socket n的中断状态
|
||||
* @param sockindex socket索引
|
||||
* @retval 中断状态
|
||||
*/
|
||||
uint8_t ch395_get_socket_int(uint8_t sockindex)
|
||||
{
|
||||
|
@ -706,9 +706,9 @@ uint8_t ch395_get_socket_int(uint8_t sockindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 对多播地址进行crc运算,并取高6位。
|
||||
* @param mac_addr mac地址
|
||||
* @retval 返回crc32的高6位
|
||||
* @brief 对多播地址进行crc运算,并取高6位。
|
||||
* @param mac_addr mac地址
|
||||
* @retval 返回crc32的高6位
|
||||
*/
|
||||
uint8_t ch395_crcret_6bit(uint8_t *mac_addr)
|
||||
{
|
||||
|
@ -734,11 +734,11 @@ uint8_t ch395_crcret_6bit(uint8_t *mac_addr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 启动/停止dhcp
|
||||
* @param flag:0 / 1, 具体含义如下:
|
||||
* @arg 1:启动dhcp
|
||||
* @arg 0:停止dhcp
|
||||
* @retval 执行状态
|
||||
* @brief 启动/停止dhcp
|
||||
* @param flag:0 / 1, 具体含义如下:
|
||||
* @arg 1:启动dhcp
|
||||
* @arg 0:停止dhcp
|
||||
* @retval 执行状态
|
||||
*/
|
||||
uint8_t ch395_dhcp_enable(uint8_t flag)
|
||||
{
|
||||
|
@ -751,16 +751,16 @@ uint8_t ch395_dhcp_enable(uint8_t flag)
|
|||
while (1)
|
||||
{
|
||||
HAL_Delay(20);
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
|
||||
|
||||
if(s != CH395_ERR_BUSY)
|
||||
{
|
||||
break; /* 如果ch395芯片返回忙状态 */
|
||||
break; /* 如果ch395芯片返回忙状态 */
|
||||
}
|
||||
|
||||
if(i++ > 200)
|
||||
{
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
return CH395_ERR_UNKNOW; /* 超时退出 */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -768,9 +768,9 @@ uint8_t ch395_dhcp_enable(uint8_t flag)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取dhcp状态
|
||||
* @param 无
|
||||
* @retval dhcp状态,0为成功,其他值表示错误
|
||||
* @brief 获取dhcp状态
|
||||
* @param 无
|
||||
* @retval dhcp状态,0为成功,其他值表示错误
|
||||
*/
|
||||
uint8_t ch395_get_dhcp_status(void)
|
||||
{
|
||||
|
@ -782,9 +782,9 @@ uint8_t ch395_get_dhcp_status(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取ip,子网掩码和网关地址
|
||||
* @param sockindex socket索引
|
||||
* @retval 12个字节的ip,子网掩码和网关地址
|
||||
* @brief 获取ip,子网掩码和网关地址
|
||||
* @param sockindex socket索引
|
||||
* @retval 12个字节的ip,子网掩码和网关地址
|
||||
*/
|
||||
void ch395_get_ipinf(uint8_t *addr)
|
||||
{
|
||||
|
@ -800,10 +800,10 @@ void ch395_get_ipinf(uint8_t *addr)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 写gpio寄存器
|
||||
* @param regadd 寄存器地址
|
||||
* @param regval 寄存器值
|
||||
* @retval 无
|
||||
* @brief 写gpio寄存器
|
||||
* @param regadd 寄存器地址
|
||||
* @param regval 寄存器值
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_write_gpio_addr(uint8_t regadd, uint8_t regval)
|
||||
{
|
||||
|
@ -813,9 +813,9 @@ void ch395_write_gpio_addr(uint8_t regadd, uint8_t regval)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 读gpio寄存器
|
||||
* @param regadd 寄存器地址
|
||||
* @retval 寄存器的值
|
||||
* @brief 读gpio寄存器
|
||||
* @param regadd 寄存器地址
|
||||
* @retval 寄存器的值
|
||||
*/
|
||||
uint8_t ch395_read_gpio_addr(uint8_t regadd)
|
||||
{
|
||||
|
@ -828,9 +828,9 @@ uint8_t ch395_read_gpio_addr(uint8_t regadd)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 擦除eeprom
|
||||
* @param 无
|
||||
* @retval 执行状态
|
||||
* @brief 擦除eeprom
|
||||
* @param 无
|
||||
* @retval 执行状态
|
||||
*/
|
||||
uint8_t ch395_eeprom_erase(void)
|
||||
{
|
||||
|
@ -854,11 +854,11 @@ uint8_t ch395_eeprom_erase(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 写eeprom
|
||||
* @param eepaddr eeprom地址
|
||||
* @param buf 缓冲区地址
|
||||
* @param len 长度
|
||||
* @retval 无
|
||||
* @brief 写eeprom
|
||||
* @param eepaddr eeprom地址
|
||||
* @param buf 缓冲区地址
|
||||
* @param len 长度
|
||||
* @retval 无
|
||||
*/
|
||||
uint8_t ch395_eeprom_write(uint16_t eepaddr, uint8_t *buf, uint8_t len)
|
||||
{
|
||||
|
@ -887,11 +887,11 @@ uint8_t ch395_eeprom_write(uint16_t eepaddr, uint8_t *buf, uint8_t len)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 写eeprom
|
||||
* @param eepaddr eeprom地址
|
||||
* @param buf 缓冲区地址
|
||||
* @param len 长度
|
||||
* @retval 无
|
||||
* @brief 写eeprom
|
||||
* @param eepaddr eeprom地址
|
||||
* @param buf 缓冲区地址
|
||||
* @param len 长度
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_eeprom_read(uint16_t eepaddr, uint8_t *buf, uint8_t len)
|
||||
{
|
||||
|
@ -908,9 +908,9 @@ void ch395_eeprom_read(uint16_t eepaddr, uint8_t *buf, uint8_t len)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置tcp mss值
|
||||
* @brief 设置tcp mss值
|
||||
* @param tcpmss
|
||||
* @retval 无
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_tcpmss(uint16_t tcpmss)
|
||||
{
|
||||
|
@ -920,11 +920,11 @@ void ch395_set_tcpmss(uint16_t tcpmss)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置socket接收缓冲区
|
||||
* @param sockindex socket索引,址,blknum
|
||||
* @param startblk 起始地
|
||||
* @param 单位缓冲区个数 ,单位为512字节
|
||||
* @retval 无
|
||||
* @brief 设置socket接收缓冲区
|
||||
* @param sockindex socket索引,址,blknum
|
||||
* @param startblk 起始地
|
||||
* @param 单位缓冲区个数 ,单位为512字节
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_socket_recv_buf(uint8_t sockindex, uint8_t startblk, uint8_t blknum)
|
||||
{
|
||||
|
@ -935,11 +935,11 @@ void ch395_set_socket_recv_buf(uint8_t sockindex, uint8_t startblk, uint8_t blkn
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置socket发送缓冲区
|
||||
* @param sockindex socket索引
|
||||
* @param startblk 起始地址
|
||||
* @param blknum 单位缓冲区个数
|
||||
* @retval 无
|
||||
* @brief 设置socket发送缓冲区
|
||||
* @param sockindex socket索引
|
||||
* @param startblk 起始地址
|
||||
* @param blknum 单位缓冲区个数
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_socket_send_buf(uint8_t sockindex, uint8_t startblk, uint8_t blknum)
|
||||
{
|
||||
|
@ -950,25 +950,25 @@ void ch395_set_socket_send_buf(uint8_t sockindex, uint8_t startblk, uint8_t blkn
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief udp向指定的ip和端口发送数据
|
||||
* @param buf : 发送数据缓冲区
|
||||
* @param len : 发送数据长度
|
||||
* @param ip : 目标ip
|
||||
* @param port : 目标端口
|
||||
* @param sockeid : socket索引值
|
||||
* @retval 无
|
||||
* @brief udp向指定的ip和端口发送数据
|
||||
* @param buf : 发送数据缓冲区
|
||||
* @param len : 发送数据长度
|
||||
* @param ip : 目标ip
|
||||
* @param port : 目标端口
|
||||
* @param sockeid : socket索引值
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_udp_send_data(uint8_t *buf, uint32_t len, uint8_t *ip, uint16_t port, uint8_t sockindex)
|
||||
{
|
||||
ch395_set_socket_desip(sockindex, ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_desip(sockindex, ip); /* 设置socket 0目标IP地址 */
|
||||
ch395_set_socket_desport(sockindex, port);
|
||||
ch395_send_data(sockindex, buf, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置ch395启动参数
|
||||
* @param mdata 设置的参数
|
||||
* @retval 无
|
||||
* @brief 设置ch395启动参数
|
||||
* @param mdata 设置的参数
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_start_para(uint32_t mdata)
|
||||
{
|
||||
|
@ -980,9 +980,9 @@ void ch395_set_start_para(uint32_t mdata)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 获取全局中断状态,收到此命令ch395自动取消中断,0x44及以上版本使用
|
||||
* @param 无
|
||||
* @retval 返回当前的全局中断状态
|
||||
* @brief 获取全局中断状态,收到此命令ch395自动取消中断,0x44及以上版本使用
|
||||
* @param 无
|
||||
* @retval 返回当前的全局中断状态
|
||||
*/
|
||||
uint16_t ch395_cmd_get_glob_int_status_all(void)
|
||||
{
|
||||
|
@ -996,10 +996,10 @@ uint16_t ch395_cmd_get_glob_int_status_all(void)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置keepalive功能
|
||||
* @param sockindex socket号
|
||||
* @param cmd 0:关闭 1:开启
|
||||
* @retval 无
|
||||
* @brief 设置keepalive功能
|
||||
* @param sockindex socket号
|
||||
* @param cmd 0:关闭 1:开启
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_set_keeplive(uint8_t sockindex, uint8_t cmd)
|
||||
{
|
||||
|
@ -1009,9 +1009,9 @@ void ch395_set_keeplive(uint8_t sockindex, uint8_t cmd)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置keepalive重试次数
|
||||
* @param cnt 重试次数()
|
||||
* @retval 无
|
||||
* @brief 设置keepalive重试次数
|
||||
* @param cnt 重试次数()
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_keeplive_cnt(uint8_t cnt)
|
||||
{
|
||||
|
@ -1020,9 +1020,9 @@ void ch395_keeplive_cnt(uint8_t cnt)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置keeplive空闲
|
||||
* @param idle 空闲时间(单位:ms)
|
||||
* @retval 无
|
||||
* @brief 设置keeplive空闲
|
||||
* @param idle 空闲时间(单位:ms)
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_keeplive_idle(uint32_t idle)
|
||||
{
|
||||
|
@ -1034,9 +1034,9 @@ void ch395_keeplive_idle(uint32_t idle)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置keeplive间隔时间
|
||||
* @param intvl 间隔时间(单位:ms)
|
||||
* @retval 无
|
||||
* @brief 设置keeplive间隔时间
|
||||
* @param intvl 间隔时间(单位:ms)
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_keeplive_intvl(uint32_t intvl)
|
||||
{
|
||||
|
@ -1048,10 +1048,10 @@ void ch395_keeplive_intvl(uint32_t intvl)
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 设置ttl
|
||||
* @param ssockindex socket号
|
||||
* @param ttlnum:ttl数
|
||||
* @retval 无
|
||||
* @brief 设置ttl
|
||||
* @param ssockindex socket号
|
||||
* @param ttlnum:ttl数
|
||||
* @retval 无
|
||||
*/
|
||||
void ch395_setttl_num(uint8_t sockindex, uint8_t ttlnum)
|
||||
{
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "usart.h"
|
||||
#include "spi.h"
|
||||
/* ********************************************************************************************************************* */
|
||||
/* 常用类型和常量定义 */
|
||||
/* 常用类型和常量定义 */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -20,225 +20,225 @@ extern "C" {
|
|||
#define NULL 0
|
||||
#endif
|
||||
|
||||
/* 命令代码:
|
||||
* 一个命令操作顺序包含:
|
||||
* 一个命令码(对于串口方式,命令码之前还需要两个同步码)
|
||||
* 若干个输入数据(可以是0个)
|
||||
* 若干个输出数据(可以是0个)
|
||||
* 命令码起名规则: CMDxy_NAME
|
||||
* 其中的x和y都是数字, x说明最少输入数据个数(字节数), y说明最少输出数据个数(字节数), y如果是W表示需要等待命令执行成功
|
||||
* 有些命令能够实现0到多个字节的数据块读写, 数据块本身的字节数未包含在上述x或y之内
|
||||
/* 命令代码:
|
||||
* 一个命令操作顺序包含:
|
||||
* 一个命令码(对于串口方式,命令码之前还需要两个同步码)
|
||||
* 若干个输入数据(可以是0个)
|
||||
* 若干个输出数据(可以是0个)
|
||||
* 命令码起名规则: CMDxy_NAME
|
||||
* 其中的x和y都是数字, x说明最少输入数据个数(字节数), y说明最少输出数据个数(字节数), y如果是W表示需要等待命令执行成功
|
||||
* 有些命令能够实现0到多个字节的数据块读写, 数据块本身的字节数未包含在上述x或y之内
|
||||
*/
|
||||
#define CMD01_GET_IC_VER 0x01 /* 获取芯片以及固件版本号 */
|
||||
#define CMD01_GET_IC_VER 0x01 /* 获取芯片以及固件版本号 */
|
||||
|
||||
#define CMD31_SET_BAUDRATE 0x02 /* 串口方式: 设置串口通讯波特率(上电或者复位后的默认波特率为9600bps */
|
||||
#define CMD31_SET_BAUDRATE 0x02 /* 串口方式: 设置串口通讯波特率(上电或者复位后的默认波特率为9600bps */
|
||||
|
||||
#define CMD00_ENTER_SLEEP 0x03 /* 进入睡眠状态 */
|
||||
#define CMD00_ENTER_SLEEP 0x03 /* 进入睡眠状态 */
|
||||
|
||||
#define CMD00_RESET_ALL 0x05 /* 执行硬件复位 */
|
||||
#define CMD00_RESET_ALL 0x05 /* 执行硬件复位 */
|
||||
|
||||
#define CMD11_CHECK_EXIST 0x06 /* 测试通讯接口以及工作状态 */
|
||||
#define CMD11_CHECK_EXIST 0x06 /* 测试通讯接口以及工作状态 */
|
||||
|
||||
#define CMD02_GET_GLOB_INT_STATUS_ALL 0x19 /* 获取全局中断状态,V44版本以后的程序由于增加了socket数量需要用此命令获取全部的中断 */
|
||||
#define CMD02_GET_GLOB_INT_STATUS_ALL 0x19 /* 获取全局中断状态,V44版本以后的程序由于增加了socket数量需要用此命令获取全部的中断 */
|
||||
|
||||
#define CMD10_SET_PHY 0x20 /* 设置PHY,默认为Auto,自动协商 */
|
||||
#define CMD10_SET_PHY 0x20 /* 设置PHY,默认为Auto,自动协商 */
|
||||
|
||||
#define CMD60_SET_MAC_ADDR 0x21 /* 设置MAC地址 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
#define CMD60_SET_MAC_ADDR 0x21 /* 设置MAC地址 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
|
||||
#define CMD40_SET_IP_ADDR 0x22 /* 设置IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
#define CMD40_SET_IP_ADDR 0x22 /* 设置IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
|
||||
#define CMD40_SET_GWIP_ADDR 0x23 /* 设置网关IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
#define CMD40_SET_GWIP_ADDR 0x23 /* 设置网关IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
|
||||
#define CMD40_SET_MASK_ADDR 0x24 /* 设置子网掩码, 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
#define CMD40_SET_MASK_ADDR 0x24 /* 设置子网掩码, 必须在CMD00H_INIT_CH395之前设置完毕 */
|
||||
|
||||
#define CMD90_SET_MAC_FILT 0x25 /* 设置MAC过滤 可以进行广播,多播等过滤 */
|
||||
#define CMD90_SET_MAC_FILT 0x25 /* 设置MAC过滤 可以进行广播,多播等过滤 */
|
||||
|
||||
#define CMD01_GET_PHY_STATUS 0x26 /* 获取PHY当前状态,如断开连接,10/100M FULL/HALF */
|
||||
#define CMD01_GET_PHY_STATUS 0x26 /* 获取PHY当前状态,如断开连接,10/100M FULL/HALF */
|
||||
|
||||
#define CMD0W_INIT_CH395 0x27 /* 初始化CH395 */
|
||||
#define CMD0W_INIT_CH395 0x27 /* 初始化CH395 */
|
||||
|
||||
#define CMD08_GET_UNREACH_IPPORT 0x28 /* 获取不可达信息 */
|
||||
#define CMD08_GET_UNREACH_IPPORT 0x28 /* 获取不可达信息 */
|
||||
|
||||
#define CMD01_GET_GLOB_INT_STATUS 0x29 /* 获取全局中断状态,最大值为1S,不可以设置为0 */
|
||||
#define CMD01_GET_GLOB_INT_STATUS 0x29 /* 获取全局中断状态,最大值为1S,不可以设置为0 */
|
||||
|
||||
#define CMD10_SET_RETRAN_COUNT 0x2A /* 重试次数,仅在TCP模式下有效 */
|
||||
#define CMD10_SET_RETRAN_COUNT 0x2A /* 重试次数,仅在TCP模式下有效 */
|
||||
|
||||
#define CMD20_SET_RETRAN_PERIOD 0x2B /* 重试周期,最大值为20,仅在TCP模式下有效,不可以设置为0 */
|
||||
#define CMD20_SET_RETRAN_PERIOD 0x2B /* 重试周期,最大值为20,仅在TCP模式下有效,不可以设置为0 */
|
||||
|
||||
#define CMD01_GET_CMD_STATUS 0x2C /* 获取命令执行状态 */
|
||||
#define CMD01_GET_CMD_STATUS 0x2C /* 获取命令执行状态 */
|
||||
|
||||
#define CMD06_GET_REMOT_IPP_SN 0x2D /* 获取远端的端口以及IP地址,该命令在TCP服务器模式下使用 */
|
||||
#define CMD06_GET_REMOT_IPP_SN 0x2D /* 获取远端的端口以及IP地址,该命令在TCP服务器模式下使用 */
|
||||
|
||||
#define CMD10_CLEAR_RECV_BUF_SN 0x2E /* 清除接收缓冲区 */
|
||||
#define CMD10_CLEAR_RECV_BUF_SN 0x2E /* 清除接收缓冲区 */
|
||||
|
||||
#define CMD12_GET_SOCKET_STATUS_SN 0x2F /* 获取socket n状态 */
|
||||
#define CMD12_GET_SOCKET_STATUS_SN 0x2F /* 获取socket n状态 */
|
||||
|
||||
#define CMD11_GET_INT_STATUS_SN 0x30 /* 获取socket n的中断状态 */
|
||||
#define CMD11_GET_INT_STATUS_SN 0x30 /* 获取socket n的中断状态 */
|
||||
|
||||
#define CMD50_SET_IP_ADDR_SN 0x31 /* 设置socket n的目的IP地址 */
|
||||
#define CMD50_SET_IP_ADDR_SN 0x31 /* 设置socket n的目的IP地址 */
|
||||
|
||||
#define CMD30_SET_DES_PORT_SN 0x32 /* 设置socket n的目的端口 */
|
||||
#define CMD30_SET_DES_PORT_SN 0x32 /* 设置socket n的目的端口 */
|
||||
|
||||
#define CMD30_SET_SOUR_PORT_SN 0x33 /* 设置socket n的源端口 */
|
||||
#define CMD30_SET_SOUR_PORT_SN 0x33 /* 设置socket n的源端口 */
|
||||
|
||||
#define CMD20_SET_PROTO_TYPE_SN 0x34 /* 设置socket n的协议类型 */
|
||||
#define CMD20_SET_PROTO_TYPE_SN 0x34 /* 设置socket n的协议类型 */
|
||||
|
||||
#define CMD1W_OPEN_SOCKET_SN 0x35 /* 打开socket n */
|
||||
#define CMD1W_OPEN_SOCKET_SN 0x35 /* 打开socket n */
|
||||
|
||||
#define CMD1W_TCP_LISTEN_SN 0x36 /* socket n监听,收到此命令,socket n进入服务器模式,仅对TCP模式有效 */
|
||||
#define CMD1W_TCP_LISTEN_SN 0x36 /* socket n监听,收到此命令,socket n进入服务器模式,仅对TCP模式有效 */
|
||||
|
||||
#define CMD1W_TCP_CONNECT_SN 0x37 /* socket n连接,收到此命令,socket n进入客户端模式,仅对TCP模式有效 */
|
||||
#define CMD1W_TCP_CONNECT_SN 0x37 /* socket n连接,收到此命令,socket n进入客户端模式,仅对TCP模式有效 */
|
||||
|
||||
#define CMD1W_TCP_DISNCONNECT_SN 0x38 /* socket n断开连接,收到此命令,socket n断开已有连接,仅对TCP模式有效 */
|
||||
#define CMD1W_TCP_DISNCONNECT_SN 0x38 /* socket n断开连接,收到此命令,socket n断开已有连接,仅对TCP模式有效 */
|
||||
|
||||
#define CMD30_WRITE_SEND_BUF_SN 0x39 /* 向socket n缓冲区写入数据 */
|
||||
#define CMD30_WRITE_SEND_BUF_SN 0x39 /* 向socket n缓冲区写入数据 */
|
||||
|
||||
#define CMD12_GET_RECV_LEN_SN 0x3B /* 获取socket n接收数据的长度 */
|
||||
#define CMD12_GET_RECV_LEN_SN 0x3B /* 获取socket n接收数据的长度 */
|
||||
|
||||
#define CMD30_READ_RECV_BUF_SN 0x3C /* 读取socket n接收缓冲区数据 */
|
||||
#define CMD30_READ_RECV_BUF_SN 0x3C /* 读取socket n接收缓冲区数据 */
|
||||
|
||||
#define CMD1W_CLOSE_SOCKET_SN 0x3D /* 关闭socket n */
|
||||
#define CMD1W_CLOSE_SOCKET_SN 0x3D /* 关闭socket n */
|
||||
|
||||
#define CMD20_SET_IPRAW_PRO_SN 0x3E /* 在IP RAW下,设置socket n的IP包协议类型 */
|
||||
#define CMD20_SET_IPRAW_PRO_SN 0x3E /* 在IP RAW下,设置socket n的IP包协议类型 */
|
||||
|
||||
#define CMD01_PING_ENABLE 0x3F /* 开启/关闭PING */
|
||||
#define CMD01_PING_ENABLE 0x3F /* 开启/关闭PING */
|
||||
|
||||
#define CMD06_GET_MAC_ADDR 0x40 /* 获取MAC地址 */
|
||||
#define CMD06_GET_MAC_ADDR 0x40 /* 获取MAC地址 */
|
||||
|
||||
#define CMD10_DHCP_ENABLE 0x41 /* DHCP使能 */
|
||||
#define CMD10_DHCP_ENABLE 0x41 /* DHCP使能 */
|
||||
|
||||
#define CMD01_GET_DHCP_STATUS 0x42 /* 获取DHCP状态 */
|
||||
#define CMD01_GET_DHCP_STATUS 0x42 /* 获取DHCP状态 */
|
||||
|
||||
#define CMD014_GET_IP_INF 0x43 /* IP,子网掩码,网关 */
|
||||
#define CMD014_GET_IP_INF 0x43 /* IP,子网掩码,网关 */
|
||||
|
||||
#define CMD00_PPPOE_SET_USER_NAME 0x44 /* 设置PPPOE用户名 */
|
||||
#define CMD00_PPPOE_SET_USER_NAME 0x44 /* 设置PPPOE用户名 */
|
||||
|
||||
#define CMD00_PPPOE_SET_PASSWORD 0x45 /* 设置密码 */
|
||||
#define CMD00_PPPOE_SET_PASSWORD 0x45 /* 设置密码 */
|
||||
|
||||
#define CMD10_PPPOE_ENABLE 0x46 /* PPPOE使能 */
|
||||
#define CMD10_PPPOE_ENABLE 0x46 /* PPPOE使能 */
|
||||
|
||||
#define CMD01_GET_PPPOE_STATUS 0x47 /* 获取pppoe状态 */
|
||||
#define CMD01_GET_PPPOE_STATUS 0x47 /* 获取pppoe状态 */
|
||||
|
||||
#define CMD20_SET_TCP_MSS 0x50 /* 设置TCP MSS */
|
||||
#define CMD20_SET_TCP_MSS 0x50 /* 设置TCP MSS */
|
||||
|
||||
#define CMD20_SET_TTL 0x51 /* 设置TTL,TTL最大值为128 */
|
||||
#define CMD20_SET_TTL 0x51 /* 设置TTL,TTL最大值为128 */
|
||||
|
||||
#define CMD30_SET_RECV_BUF 0x52 /* 设置SOCKET接收缓冲区 */
|
||||
#define CMD30_SET_RECV_BUF 0x52 /* 设置SOCKET接收缓冲区 */
|
||||
|
||||
#define CMD30_SET_SEND_BUF 0x53 /* 设置SOCKET发送缓冲区 */
|
||||
#define CMD30_SET_SEND_BUF 0x53 /* 设置SOCKET发送缓冲区 */
|
||||
|
||||
#define CMD10_SET_MAC_RECV_BUF 0x54 /* 设置MAC接收缓冲区 */
|
||||
#define CMD10_SET_MAC_RECV_BUF 0x54 /* 设置MAC接收缓冲区 */
|
||||
|
||||
#define CMD40_SET_FUN_PARA 0x55 /* 设置功能参数 */
|
||||
#define CMD40_SET_FUN_PARA 0x55 /* 设置功能参数 */
|
||||
|
||||
#define CMD40_SET_KEEP_LIVE_IDLE 0x56 /* 设置KEEPLIVE空闲 */
|
||||
#define CMD40_SET_KEEP_LIVE_IDLE 0x56 /* 设置KEEPLIVE空闲 */
|
||||
|
||||
#define CMD40_SET_KEEP_LIVE_INTVL 0x57 /* 设置间隔时间 */
|
||||
#define CMD40_SET_KEEP_LIVE_INTVL 0x57 /* 设置间隔时间 */
|
||||
|
||||
#define CMD10_SET_KEEP_LIVE_CNT 0x58 /* 重试次数 */
|
||||
#define CMD10_SET_KEEP_LIVE_CNT 0x58 /* 重试次数 */
|
||||
|
||||
#define CMD20_SET_KEEP_LIVE_SN 0X59 /* 设置socket nkeeplive功能*/
|
||||
#define CMD20_SET_KEEP_LIVE_SN 0X59 /* 设置socket nkeeplive功能*/
|
||||
|
||||
#define CMD00_EEPROM_ERASE 0xE9 /* 擦除EEPROM*/
|
||||
#define CMD00_EEPROM_ERASE 0xE9 /* 擦除EEPROM*/
|
||||
|
||||
#define CMD30_EEPROM_WRITE 0xEA /* 写EEPROM */
|
||||
#define CMD30_EEPROM_WRITE 0xEA /* 写EEPROM */
|
||||
|
||||
#define CMD30_EEPROM_READ 0xEB /* 读EEPROM */
|
||||
#define CMD30_EEPROM_READ 0xEB /* 读EEPROM */
|
||||
|
||||
#define CMD10_READ_GPIO_REG 0xEC /* 读GPIO寄存器 */
|
||||
#define CMD10_READ_GPIO_REG 0xEC /* 读GPIO寄存器 */
|
||||
|
||||
#define CMD20_WRITE_GPIO_REG 0xED /* 写GPIO寄存器 */
|
||||
#define CMD20_WRITE_GPIO_REG 0xED /* 写GPIO寄存器 */
|
||||
|
||||
/* 协议类型 */
|
||||
#define PROTO_TYPE_IP_RAW 0 /* IP层原始数据 */
|
||||
#define PROTO_TYPE_MAC_RAW 1 /* MAC层原始数据 */
|
||||
#define PROTO_TYPE_UDP 2 /* UDP协议类型 */
|
||||
#define PROTO_TYPE_TCP 3 /* TCP协议类型 */
|
||||
/* 协议类型 */
|
||||
#define PROTO_TYPE_IP_RAW 0 /* IP层原始数据 */
|
||||
#define PROTO_TYPE_MAC_RAW 1 /* MAC层原始数据 */
|
||||
#define PROTO_TYPE_UDP 2 /* UDP协议类型 */
|
||||
#define PROTO_TYPE_TCP 3 /* TCP协议类型 */
|
||||
|
||||
/* PHY 命令参数/状态 */
|
||||
#define PHY_DISCONN (1<<0) /* PHY断开 */
|
||||
#define PHY_10M_FLL (1<<1) /* 10M全双工 */
|
||||
#define PHY_10M_HALF (1<<2) /* 10M半双工 */
|
||||
#define PHY_100M_FLL (1<<3) /* 100M全双工 */
|
||||
#define PHY_100M_HALF (1<<4) /* 100M半双工 */
|
||||
#define PHY_AUTO (1<<5) /* PHY自动模式,CMD10H_SET_PHY */
|
||||
#define PHY_ERROR (1<<6) /* PHY错误 */
|
||||
/* PHY 命令参数/状态 */
|
||||
#define PHY_DISCONN (1<<0) /* PHY断开 */
|
||||
#define PHY_10M_FLL (1<<1) /* 10M全双工 */
|
||||
#define PHY_10M_HALF (1<<2) /* 10M半双工 */
|
||||
#define PHY_100M_FLL (1<<3) /* 100M全双工 */
|
||||
#define PHY_100M_HALF (1<<4) /* 100M半双工 */
|
||||
#define PHY_AUTO (1<<5) /* PHY自动模式,CMD10H_SET_PHY */
|
||||
#define PHY_ERROR (1<<6) /* PHY错误 */
|
||||
|
||||
/* CH395 MAC过滤 */
|
||||
#define MAC_FILT_RECV_BORADPKT (1<<0) /* 使能接收广播包 */
|
||||
#define MAC_FILT_RECV_ALL (1<<1) /* 使能接收所有数据包 */
|
||||
#define MAC_FILT_RECV_MULTIPKT (1<<2) /* 使能接收多播包 */
|
||||
#define MAC_FILT_RECV_ENABLE (1<<3) /* 使能接收 */
|
||||
#define MAC_FILT_SEND_ENABLE (1<<4) /* 使能发送 */
|
||||
/* CH395 MAC过滤 */
|
||||
#define MAC_FILT_RECV_BORADPKT (1<<0) /* 使能接收广播包 */
|
||||
#define MAC_FILT_RECV_ALL (1<<1) /* 使能接收所有数据包 */
|
||||
#define MAC_FILT_RECV_MULTIPKT (1<<2) /* 使能接收多播包 */
|
||||
#define MAC_FILT_RECV_ENABLE (1<<3) /* 使能接收 */
|
||||
#define MAC_FILT_SEND_ENABLE (1<<4) /* 使能发送 */
|
||||
|
||||
/* 中断状态 */
|
||||
/* 以下为GLOB_INT会产生的状态 */
|
||||
#define GINT_STAT_UNREACH (1<<0) /* 不可达中断 */
|
||||
#define GINT_STAT_IP_CONFLI (1<<1) /* IP冲突 */
|
||||
#define GINT_STAT_PHY_CHANGE (1<<2) /* PHY状态改变 */
|
||||
#define GINT_STAT_DHCP (1<<3) /* PHY状态改变 */
|
||||
#define GINT_STAT_SOCK0 (1<<4) /* socket0 产生中断 */
|
||||
#define GINT_STAT_SOCK1 (1<<5) /* socket1 产生中断 */
|
||||
#define GINT_STAT_SOCK2 (1<<6) /* socket2 产生中断 */
|
||||
#define GINT_STAT_SOCK3 (1<<7) /* socket3 产生中断 */
|
||||
#define GINT_STAT_SOCK4 (1<<8) /* scoket4 产生中断 */
|
||||
#define GINT_STAT_SOCK5 (1<<9) /* scoket5 产生中断 */
|
||||
#define GINT_STAT_SOCK6 (1<<10) /* scoket6 产生中断 */
|
||||
#define GINT_STAT_SOCK7 (1<<11) /* scoket7 产生中断 */
|
||||
/* 中断状态 */
|
||||
/* 以下为GLOB_INT会产生的状态 */
|
||||
#define GINT_STAT_UNREACH (1<<0) /* 不可达中断 */
|
||||
#define GINT_STAT_IP_CONFLI (1<<1) /* IP冲突 */
|
||||
#define GINT_STAT_PHY_CHANGE (1<<2) /* PHY状态改变 */
|
||||
#define GINT_STAT_DHCP (1<<3) /* PHY状态改变 */
|
||||
#define GINT_STAT_SOCK0 (1<<4) /* socket0 产生中断 */
|
||||
#define GINT_STAT_SOCK1 (1<<5) /* socket1 产生中断 */
|
||||
#define GINT_STAT_SOCK2 (1<<6) /* socket2 产生中断 */
|
||||
#define GINT_STAT_SOCK3 (1<<7) /* socket3 产生中断 */
|
||||
#define GINT_STAT_SOCK4 (1<<8) /* scoket4 产生中断 */
|
||||
#define GINT_STAT_SOCK5 (1<<9) /* scoket5 产生中断 */
|
||||
#define GINT_STAT_SOCK6 (1<<10) /* scoket6 产生中断 */
|
||||
#define GINT_STAT_SOCK7 (1<<11) /* scoket7 产生中断 */
|
||||
|
||||
/* 以下为Sn_INT会产生的状态 */
|
||||
#define SINT_STAT_SENBUF_FREE (1<<0) /* 发送缓冲区空闲 */
|
||||
#define SINT_STAT_SEND_OK (1<<1) /* 发送成功 */
|
||||
#define SINT_STAT_RECV (1<<2) /* socket端口接收到数据或者接收缓冲区不为空 */
|
||||
#define SINT_STAT_CONNECT (1<<3) /* 连接成功,TCP模式下产生此中断 */
|
||||
#define SINT_STAT_DISCONNECT (1<<4) /* 连接断开,TCP模式下产生此中断 */
|
||||
#define SINT_STAT_TIM_OUT (1<<6) /* ARP和TCP模式下会发生此中断 */
|
||||
/* 以下为Sn_INT会产生的状态 */
|
||||
#define SINT_STAT_SENBUF_FREE (1<<0) /* 发送缓冲区空闲 */
|
||||
#define SINT_STAT_SEND_OK (1<<1) /* 发送成功 */
|
||||
#define SINT_STAT_RECV (1<<2) /* socket端口接收到数据或者接收缓冲区不为空 */
|
||||
#define SINT_STAT_CONNECT (1<<3) /* 连接成功,TCP模式下产生此中断 */
|
||||
#define SINT_STAT_DISCONNECT (1<<4) /* 连接断开,TCP模式下产生此中断 */
|
||||
#define SINT_STAT_TIM_OUT (1<<6) /* ARP和TCP模式下会发生此中断 */
|
||||
|
||||
/* 获取命令状态 */
|
||||
#define CMD_ERR_SUCCESS 0x00 /* 命令操作成功 */
|
||||
#define CMD_RET_ABORT 0x5F /* 命令操作失败 */
|
||||
#define CH395_ERR_BUSY 0x10 /* 忙状态,表示当前正在执行命令 */
|
||||
#define CH395_ERR_MEM 0x11 /* 内存错误 */
|
||||
#define CH395_ERR_BUF 0x12 /* 缓冲区错误 */
|
||||
#define CH395_ERR_TIMEOUT 0x13 /* 超时 */
|
||||
#define CH395_ERR_RTE 0x14 /* 路由错误*/
|
||||
#define CH395_ERR_ABRT 0x15 /* 连接停止*/
|
||||
#define CH395_ERR_RST 0x16 /* 连接复位 */
|
||||
#define CH395_ERR_CLSD 0x17 /* 连接关闭/socket 在关闭状态 */
|
||||
#define CH395_ERR_CONN 0x18 /* 无连接 */
|
||||
#define CH395_ERR_VAL 0x19 /* 错误的值 */
|
||||
#define CH395_ERR_ARG 0x1a /* 错误的参数 */
|
||||
#define CH395_ERR_USE 0x1b /* 已经被使用 */
|
||||
#define CH395_ERR_IF 0x1c /* MAC错误 */
|
||||
#define CH395_ERR_ISCONN 0x1d /* 已连接 */
|
||||
#define CH395_ERR_OPEN 0X20 /* 已经打开 */
|
||||
#define CH395_ERR_UNKNOW 0xFA /* 未知错误 */
|
||||
|
||||
/* PPP状态 */
|
||||
#define CH395_PPP_SUCCESS 0 /* 成功 */
|
||||
#define CH395_PPPERR_PARM 1 /* 无效参数 */
|
||||
#define CH395_PPPERR_OPEN 2 /* 无法打开PPP会话 */
|
||||
#define CH395_PPPERR_DEVICE 3 /* 无效的PPP设备 */
|
||||
#define CH395_PPPERR_ALLOC 4 /* 资源分配失败 */
|
||||
#define CH395_PPPERR_USER 5 /* 用户中断 */
|
||||
#define CH395_PPPERR_CONNECT 6 /* 连接断开 */
|
||||
#define CH395_PPPERR_AUTHFAIL 7 /* 挑战鉴别失败 */
|
||||
#define CH395_PPPERR_PROTOCOL 8 /* 握手协议失败 */
|
||||
#define CH395_PPPERR_TIME_OUT 9 /* 超时失败 */
|
||||
#define CH395_PPPERR_CLOSE 10 /* 关闭失败 */
|
||||
|
||||
/* 不可达代码 */
|
||||
#define UNREACH_CODE_HOST 0 /* 主机不可达 */
|
||||
#define UNREACH_CODE_NET 1 /* 网络不可达 */
|
||||
#define UNREACH_CODE_PROTOCOL 2 /* 协议不可达 */
|
||||
#define UNREACH_CODE_PROT 3 /* 端口不可达 */
|
||||
/* 其他值请参考RFC792文档 */
|
||||
|
||||
/* 命令包头 */
|
||||
#define SER_SYNC_CODE1 0x57 /* 串口命令同步码1 */
|
||||
#define SER_SYNC_CODE2 0xAB /* 串口命令同步码2 */
|
||||
|
||||
/* TCP状态 */
|
||||
/* 获取命令状态 */
|
||||
#define CMD_ERR_SUCCESS 0x00 /* 命令操作成功 */
|
||||
#define CMD_RET_ABORT 0x5F /* 命令操作失败 */
|
||||
#define CH395_ERR_BUSY 0x10 /* 忙状态,表示当前正在执行命令 */
|
||||
#define CH395_ERR_MEM 0x11 /* 内存错误 */
|
||||
#define CH395_ERR_BUF 0x12 /* 缓冲区错误 */
|
||||
#define CH395_ERR_TIMEOUT 0x13 /* 超时 */
|
||||
#define CH395_ERR_RTE 0x14 /* 路由错误*/
|
||||
#define CH395_ERR_ABRT 0x15 /* 连接停止*/
|
||||
#define CH395_ERR_RST 0x16 /* 连接复位 */
|
||||
#define CH395_ERR_CLSD 0x17 /* 连接关闭/socket 在关闭状态 */
|
||||
#define CH395_ERR_CONN 0x18 /* 无连接 */
|
||||
#define CH395_ERR_VAL 0x19 /* 错误的值 */
|
||||
#define CH395_ERR_ARG 0x1a /* 错误的参数 */
|
||||
#define CH395_ERR_USE 0x1b /* 已经被使用 */
|
||||
#define CH395_ERR_IF 0x1c /* MAC错误 */
|
||||
#define CH395_ERR_ISCONN 0x1d /* 已连接 */
|
||||
#define CH395_ERR_OPEN 0X20 /* 已经打开 */
|
||||
#define CH395_ERR_UNKNOW 0xFA /* 未知错误 */
|
||||
|
||||
/* PPP状态 */
|
||||
#define CH395_PPP_SUCCESS 0 /* 成功 */
|
||||
#define CH395_PPPERR_PARM 1 /* 无效参数 */
|
||||
#define CH395_PPPERR_OPEN 2 /* 无法打开PPP会话 */
|
||||
#define CH395_PPPERR_DEVICE 3 /* 无效的PPP设备 */
|
||||
#define CH395_PPPERR_ALLOC 4 /* 资源分配失败 */
|
||||
#define CH395_PPPERR_USER 5 /* 用户中断 */
|
||||
#define CH395_PPPERR_CONNECT 6 /* 连接断开 */
|
||||
#define CH395_PPPERR_AUTHFAIL 7 /* 挑战鉴别失败 */
|
||||
#define CH395_PPPERR_PROTOCOL 8 /* 握手协议失败 */
|
||||
#define CH395_PPPERR_TIME_OUT 9 /* 超时失败 */
|
||||
#define CH395_PPPERR_CLOSE 10 /* 关闭失败 */
|
||||
|
||||
/* 不可达代码 */
|
||||
#define UNREACH_CODE_HOST 0 /* 主机不可达 */
|
||||
#define UNREACH_CODE_NET 1 /* 网络不可达 */
|
||||
#define UNREACH_CODE_PROTOCOL 2 /* 协议不可达 */
|
||||
#define UNREACH_CODE_PROT 3 /* 端口不可达 */
|
||||
/* 其他值请参考RFC792文档 */
|
||||
|
||||
/* 命令包头 */
|
||||
#define SER_SYNC_CODE1 0x57 /* 串口命令同步码1 */
|
||||
#define SER_SYNC_CODE2 0xAB /* 串口命令同步码2 */
|
||||
|
||||
/* TCP状态 */
|
||||
#define TCP_CLOSED 0
|
||||
#define TCP_LISTEN 1
|
||||
#define TCP_SYN_SENT 2
|
||||
|
@ -251,19 +251,19 @@ extern "C" {
|
|||
#define TCP_LAST_ACK 9
|
||||
#define TCP_TIME_WAIT 10
|
||||
|
||||
/* GPIO寄存器地址 */
|
||||
#define GPIO_DIR_REG 0x80 /* 寄存器方向寄存器,1:输出;0:输入 */
|
||||
#define GPIO_IN_REG 0x81 /* GPIO输入寄存器 */
|
||||
#define GPIO_OUT_REG 0x82 /* GPIO输出寄存器 */
|
||||
#define GPIO_CLR_REG 0x83 /* GPIO输出清除: 0=keep, 1=clear */
|
||||
#define GPIO_PU_REG 0x84 /* GPIO上拉使能寄存器 */
|
||||
#define GPIO_PD_REG 0x85 /* GPIO下拉使能寄存器 */
|
||||
/* GPIO寄存器地址 */
|
||||
#define GPIO_DIR_REG 0x80 /* 寄存器方向寄存器,1:输出;0:输入 */
|
||||
#define GPIO_IN_REG 0x81 /* GPIO输入寄存器 */
|
||||
#define GPIO_OUT_REG 0x82 /* GPIO输出寄存器 */
|
||||
#define GPIO_CLR_REG 0x83 /* GPIO输出清除: 0=keep, 1=clear */
|
||||
#define GPIO_PU_REG 0x84 /* GPIO上拉使能寄存器 */
|
||||
#define GPIO_PD_REG 0x85 /* GPIO下拉使能寄存器 */
|
||||
|
||||
/* 功能参数 */
|
||||
#define FUN_PARA_FLAG_TCP_SERVER (1<<1) /* tcp server 多连接模式标志,0X44版本及以后支持 */
|
||||
#define FUN_PARA_FLAG_LOW_PWR (1<<2) /* 低耗能模式 */
|
||||
#define SOCK_CTRL_FLAG_SOCKET_CLOSE (1<<3) /* CH395不主动关闭Socket */
|
||||
#define SOCK_DISABLE_SEND_OK_INT (1<<4) /* send ok中断控制位,为1表示关闭send ok中断 */
|
||||
/* 功能参数 */
|
||||
#define FUN_PARA_FLAG_TCP_SERVER (1<<1) /* tcp server 多连接模式标志,0X44版本及以后支持 */
|
||||
#define FUN_PARA_FLAG_LOW_PWR (1<<2) /* 低耗能模式 */
|
||||
#define SOCK_CTRL_FLAG_SOCKET_CLOSE (1<<3) /* CH395不主动关闭Socket */
|
||||
#define SOCK_DISABLE_SEND_OK_INT (1<<4) /* send ok中断控制位,为1表示关闭send ok中断 */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -185,6 +185,11 @@
|
|||
<WinNumber>1</WinNumber>
|
||||
<ItemText>p_flt_window,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>6</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>DisState</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
|
|
Binary file not shown.
|
@ -27,9 +27,11 @@ Project File Date: 08/20/2024
|
|||
<h2>Output:</h2>
|
||||
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\Bin'
|
||||
Build target 'VOQC'
|
||||
compiling encoder.c...
|
||||
compiling provalctrl.c...
|
||||
compiling main.c...
|
||||
linking...
|
||||
Program Size: Code=29850 RO-data=458 RW-data=364 ZI-data=6316
|
||||
Program Size: Code=29854 RO-data=458 RW-data=364 ZI-data=6316
|
||||
FromELF: creating hex file...
|
||||
"VOQC\VOQC.axf" - 0 Error(s), 0 Warning(s).
|
||||
|
||||
|
@ -54,7 +56,7 @@ Package Vendor: Keil
|
|||
<h2>Collection of Component Files used:</h2>
|
||||
|
||||
* Component: ARM::CMSIS:CORE@5.6.0
|
||||
Build Time Elapsed: 00:00:05
|
||||
Build Time Elapsed: 00:00:11
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,7 +3,7 @@
|
|||
<title>Static Call Graph - [VOQC\VOQC.axf]</title></head>
|
||||
<body><HR>
|
||||
<H1>Static Call Graph for image VOQC\VOQC.axf</H1><HR>
|
||||
<BR><P>#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Tue Aug 20 14:28:03 2024
|
||||
<BR><P>#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Tue Aug 20 15:07:19 2024
|
||||
<BR><P>
|
||||
<H3>Maximum Stack Usage = 452 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)</H3><H3>
|
||||
Call chain for Maximum Stack Depth:</H3>
|
||||
|
@ -487,8 +487,8 @@ Global Symbols
|
|||
<P><STRONG><a name="[7b]"></a>__aeabi_uldivmod</STRONG> (Thumb, 0 bytes, Stack size 48 bytes, lludivv7m.o(.text))
|
||||
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = __aeabi_uldivmod
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[af]">>></a> HAL_RCC_GetSysClockFreq
|
||||
<LI><a href="#[d3]">>></a> UART_SetConfig
|
||||
<BR>[Called By]<UL><LI><a href="#[d3]">>></a> UART_SetConfig
|
||||
<LI><a href="#[af]">>></a> HAL_RCC_GetSysClockFreq
|
||||
<LI><a href="#[7a]">>></a> _ll_sdiv
|
||||
</UL>
|
||||
|
||||
|
@ -590,10 +590,10 @@ Global Symbols
|
|||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[87]">>></a> HAL_GPIO_WritePin
|
||||
<LI><a href="#[89]">>></a> delay_us
|
||||
<LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
<LI><a href="#[88]">>></a> ads1256_write_byte
|
||||
<LI><a href="#[8a]">>></a> ads1256_read_byte
|
||||
<LI><a href="#[86]">>></a> ADS1256WREG
|
||||
<LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
<LI><a href="#[8c]">>></a> __aeabi_dmul
|
||||
<LI><a href="#[8b]">>></a> __aeabi_i2d
|
||||
</UL>
|
||||
|
@ -604,8 +604,8 @@ Global Symbols
|
|||
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = ADS1256WREG ⇒ ads1256_write_byte ⇒ delay_us
|
||||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[87]">>></a> HAL_GPIO_WritePin
|
||||
<LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
<LI><a href="#[88]">>></a> ads1256_write_byte
|
||||
<LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[103]">>></a> ads1256_init
|
||||
<LI><a href="#[84]">>></a> ADS1256ReadData
|
||||
|
@ -799,8 +799,8 @@ Global Symbols
|
|||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[a0]">>></a> DMA_SetConfig
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[9a]">>></a> HAL_ADC_Start_DMA
|
||||
<LI><a href="#[da]">>></a> HAL_UART_Transmit_DMA
|
||||
<BR>[Called By]<UL><LI><a href="#[da]">>></a> HAL_UART_Transmit_DMA
|
||||
<LI><a href="#[9a]">>></a> HAL_ADC_Start_DMA
|
||||
</UL>
|
||||
|
||||
<P><STRONG><a name="[a1]"></a>HAL_Delay</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, stm32f4xx_hal.o(i.HAL_Delay))
|
||||
|
@ -891,9 +891,9 @@ Global Symbols
|
|||
<LI><a href="#[b2]">>></a> HAL_RCC_OscConfig
|
||||
<LI><a href="#[ae]">>></a> HAL_RCC_ClockConfig
|
||||
<LI><a href="#[a1]">>></a> HAL_Delay
|
||||
<LI><a href="#[9c]">>></a> HAL_DMA_Abort
|
||||
<LI><a href="#[d8]">>></a> HAL_UART_Transmit
|
||||
<LI><a href="#[d9]">>></a> UART_WaitOnFlagUntilTimeout
|
||||
<LI><a href="#[9c]">>></a> HAL_DMA_Abort
|
||||
</UL>
|
||||
|
||||
<P><STRONG><a name="[a3]"></a>HAL_I2C_Init</STRONG> (Thumb, 446 bytes, Stack size 16 bytes, stm32f4xx_hal_i2c.o(i.HAL_I2C_Init))
|
||||
|
@ -1154,8 +1154,8 @@ Global Symbols
|
|||
<P><STRONG><a name="[c2]"></a>HAL_TIM_PeriodElapsedCallback</STRONG> (Thumb, 54 bytes, Stack size 8 bytes, timer.o(i.HAL_TIM_PeriodElapsedCallback))
|
||||
<BR><BR>[Stack]<UL><LI>Max Depth = 428<LI>Call Chain = HAL_TIM_PeriodElapsedCallback ⇒ modbus_process_rtu ⇒ modbus_analysis_rtu ⇒ writemulticoil_rtu ⇒ modbus_errfunction_rtu ⇒ uart_send ⇒ HAL_UART_Transmit_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig
|
||||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[c7]">>></a> HAL_TIM_Base_Stop_IT
|
||||
<LI><a href="#[c8]">>></a> modbus_process_rtu
|
||||
<BR>[Calls]<UL><LI><a href="#[c8]">>></a> modbus_process_rtu
|
||||
<LI><a href="#[c7]">>></a> HAL_TIM_Base_Stop_IT
|
||||
<LI><a href="#[c6]">>></a> tim6_cnt
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[be]">>></a> HAL_TIM_IRQHandler
|
||||
|
@ -1166,27 +1166,27 @@ Global Symbols
|
|||
</UL>
|
||||
|
||||
<P><STRONG><a name="[ce]"></a>HAL_UARTEx_RxEventCallback</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback))
|
||||
<BR><BR>[Called By]<UL><LI><a href="#[c9]">>></a> HAL_UART_IRQHandler
|
||||
<LI><a href="#[ca]">>></a> UART_Receive_IT
|
||||
<BR><BR>[Called By]<UL><LI><a href="#[ca]">>></a> UART_Receive_IT
|
||||
<LI><a href="#[c9]">>></a> HAL_UART_IRQHandler
|
||||
</UL>
|
||||
|
||||
<P><STRONG><a name="[cd]"></a>HAL_UART_ErrorCallback</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_hal_uart.o(i.HAL_UART_ErrorCallback))
|
||||
<BR><BR>[Called By]<UL><LI><a href="#[c9]">>></a> HAL_UART_IRQHandler
|
||||
<LI><a href="#[66]">>></a> UART_DMAError
|
||||
<BR><BR>[Called By]<UL><LI><a href="#[66]">>></a> UART_DMAError
|
||||
<LI><a href="#[63]">>></a> UART_DMAAbortOnError
|
||||
<LI><a href="#[c9]">>></a> HAL_UART_IRQHandler
|
||||
</UL>
|
||||
|
||||
<P><STRONG><a name="[c9]"></a>HAL_UART_IRQHandler</STRONG> (Thumb, 740 bytes, Stack size 40 bytes, stm32f4xx_hal_uart.o(i.HAL_UART_IRQHandler))
|
||||
<BR><BR>[Stack]<UL><LI>Max Depth = 152<LI>Call Chain = HAL_UART_IRQHandler ⇒ UART_Receive_IT ⇒ HAL_UART_RxCpltCallback ⇒ modbus_rx_cb ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
|
||||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[9c]">>></a> HAL_DMA_Abort
|
||||
<LI><a href="#[cc]">>></a> HAL_DMA_Abort_IT
|
||||
<LI><a href="#[cd]">>></a> HAL_UART_ErrorCallback
|
||||
<BR>[Calls]<UL><LI><a href="#[cd]">>></a> HAL_UART_ErrorCallback
|
||||
<LI><a href="#[ce]">>></a> HAL_UARTEx_RxEventCallback
|
||||
<LI><a href="#[cf]">>></a> UART_Transmit_IT
|
||||
<LI><a href="#[ca]">>></a> UART_Receive_IT
|
||||
<LI><a href="#[d0]">>></a> UART_EndTransmit_IT
|
||||
<LI><a href="#[cb]">>></a> UART_EndRxTransfer
|
||||
<LI><a href="#[9c]">>></a> HAL_DMA_Abort
|
||||
<LI><a href="#[cc]">>></a> HAL_DMA_Abort_IT
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[54]">>></a> USART6_IRQHandler
|
||||
<LI><a href="#[34]">>></a> USART3_IRQHandler
|
||||
|
@ -1241,8 +1241,8 @@ Global Symbols
|
|||
<P><STRONG><a name="[d8]"></a>HAL_UART_Transmit</STRONG> (Thumb, 190 bytes, Stack size 40 bytes, stm32f4xx_hal_uart.o(i.HAL_UART_Transmit))
|
||||
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
|
||||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[9d]">>></a> HAL_GetTick
|
||||
<LI><a href="#[d9]">>></a> UART_WaitOnFlagUntilTimeout
|
||||
<BR>[Calls]<UL><LI><a href="#[d9]">>></a> UART_WaitOnFlagUntilTimeout
|
||||
<LI><a href="#[9d]">>></a> HAL_GetTick
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[d7]">>></a> modbus_rx_cb
|
||||
</UL>
|
||||
|
@ -1628,9 +1628,9 @@ Global Symbols
|
|||
<P><STRONG><a name="[f8]"></a>ads1220_setchannl</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, ads1220.o(i.ads1220_setchannl))
|
||||
<BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = ads1220_setchannl ⇒ ads1220_writeregister ⇒ ads1220_write_byte ⇒ delay_us
|
||||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
<LI><a href="#[ff]">>></a> ads1220_writeregister
|
||||
<BR>[Calls]<UL><LI><a href="#[ff]">>></a> ads1220_writeregister
|
||||
<LI><a href="#[fe]">>></a> ads1220_write_byte
|
||||
<LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[f5]">>></a> ads1220_get_data
|
||||
</UL>
|
||||
|
@ -1810,10 +1810,10 @@ Global Symbols
|
|||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[87]">>></a> HAL_GPIO_WritePin
|
||||
<LI><a href="#[113]">>></a> encoder_init
|
||||
<LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
<LI><a href="#[f3]">>></a> _74hc165_read_byte
|
||||
<LI><a href="#[111]">>></a> hc595_write_data
|
||||
<LI><a href="#[112]">>></a> disp_out
|
||||
<LI><a href="#[85]">>></a> HAL_GPIO_ReadPin
|
||||
<LI><a href="#[110]">>></a> led_ctrl
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[74]">>></a> main
|
||||
|
@ -2054,9 +2054,9 @@ Global Symbols
|
|||
<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = modbus_rx_cb ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
|
||||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[11c]">>></a> HAL_TIM_Base_Start_IT
|
||||
<LI><a href="#[c7]">>></a> HAL_TIM_Base_Stop_IT
|
||||
<LI><a href="#[d8]">>></a> HAL_UART_Transmit
|
||||
<LI><a href="#[d4]">>></a> HAL_UART_Receive_IT
|
||||
<LI><a href="#[c7]">>></a> HAL_TIM_Base_Stop_IT
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[d6]">>></a> HAL_UART_RxCpltCallback
|
||||
</UL>
|
||||
|
@ -2416,9 +2416,9 @@ Local Symbols
|
|||
<BR>[Address Reference Count : 1]<UL><LI> stm32f4xx_hal_uart.o(i.HAL_UART_Transmit_DMA)
|
||||
</UL>
|
||||
<P><STRONG><a name="[cb]"></a>UART_EndRxTransfer</STRONG> (Thumb, 108 bytes, Stack size 0 bytes, stm32f4xx_hal_uart.o(i.UART_EndRxTransfer))
|
||||
<BR><BR>[Called By]<UL><LI><a href="#[c9]">>></a> HAL_UART_IRQHandler
|
||||
<LI><a href="#[d9]">>></a> UART_WaitOnFlagUntilTimeout
|
||||
<BR><BR>[Called By]<UL><LI><a href="#[d9]">>></a> UART_WaitOnFlagUntilTimeout
|
||||
<LI><a href="#[66]">>></a> UART_DMAError
|
||||
<LI><a href="#[c9]">>></a> HAL_UART_IRQHandler
|
||||
</UL>
|
||||
|
||||
<P><STRONG><a name="[d0]"></a>UART_EndTransmit_IT</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, stm32f4xx_hal_uart.o(i.UART_EndTransmit_IT))
|
||||
|
@ -2459,8 +2459,8 @@ Local Symbols
|
|||
<P><STRONG><a name="[d9]"></a>UART_WaitOnFlagUntilTimeout</STRONG> (Thumb, 140 bytes, Stack size 32 bytes, stm32f4xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout))
|
||||
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = UART_WaitOnFlagUntilTimeout
|
||||
</UL>
|
||||
<BR>[Calls]<UL><LI><a href="#[9d]">>></a> HAL_GetTick
|
||||
<LI><a href="#[cb]">>></a> UART_EndRxTransfer
|
||||
<BR>[Calls]<UL><LI><a href="#[cb]">>></a> UART_EndRxTransfer
|
||||
<LI><a href="#[9d]">>></a> HAL_GetTick
|
||||
</UL>
|
||||
<BR>[Called By]<UL><LI><a href="#[d8]">>></a> HAL_UART_Transmit
|
||||
</UL>
|
||||
|
|
|
@ -3104,83 +3104,83 @@ Image Symbol Table
|
|||
i.ads1256_read_byte 0x08004e24 Section 0 ads1256.o(i.ads1256_read_byte)
|
||||
i.ads1256_write_byte 0x08004e7c Section 0 ads1256.o(i.ads1256_write_byte)
|
||||
i.analog_ctrl 0x08004ef0 Section 0 provalctrl.o(i.analog_ctrl)
|
||||
i.analog_gather 0x080050e8 Section 0 adcs.o(i.analog_gather)
|
||||
i.ao_blf1_set 0x08005138 Section 0 dac7311.o(i.ao_blf1_set)
|
||||
i.ao_blf2_set 0x08005184 Section 0 dac7311.o(i.ao_blf2_set)
|
||||
i.ao_dwq_set 0x080051d0 Section 0 dac7311.o(i.ao_dwq_set)
|
||||
i.ao_write 0x08005224 Section 0 dac7311.o(i.ao_write)
|
||||
i.clrcs 0x08005378 Section 0 ms5803.o(i.clrcs)
|
||||
i.dac7311_init 0x08005410 Section 0 dac7311.o(i.dac7311_init)
|
||||
i.delay_ms 0x08005450 Section 0 main.o(i.delay_ms)
|
||||
i.delay_tick 0x0800545a Section 0 main.o(i.delay_tick)
|
||||
i.delay_us 0x08005468 Section 0 main.o(i.delay_us)
|
||||
i.digital_ctrl 0x080054c8 Section 0 gpios.o(i.digital_ctrl)
|
||||
i.disp_out 0x080055e8 Section 0 hc595.o(i.disp_out)
|
||||
i.ds18b20_check 0x08005614 Section 0 ds18b20.o(i.ds18b20_check)
|
||||
i.ds18b20_get_temp 0x08005674 Section 0 ds18b20.o(i.ds18b20_get_temp)
|
||||
i.ds18b20_init 0x080056e0 Section 0 ds18b20.o(i.ds18b20_init)
|
||||
i.ds18b20_read_bit 0x080056fc Section 0 ds18b20.o(i.ds18b20_read_bit)
|
||||
i.ds18b20_read_byte 0x08005760 Section 0 ds18b20.o(i.ds18b20_read_byte)
|
||||
i.ds18b20_rst 0x08005784 Section 0 ds18b20.o(i.ds18b20_rst)
|
||||
i.ds18b20_start 0x080057c4 Section 0 ds18b20.o(i.ds18b20_start)
|
||||
i.ds18b20_write_byte 0x080057dc Section 0 ds18b20.o(i.ds18b20_write_byte)
|
||||
i.encoder_init 0x08005854 Section 0 encoder.o(i.encoder_init)
|
||||
i.encoder_run 0x080058ac Section 0 encoder.o(i.encoder_run)
|
||||
i.hc595_write_data 0x0800593c Section 0 hc595.o(i.hc595_write_data)
|
||||
i.led_ctrl 0x080059a8 Section 0 gpios.o(i.led_ctrl)
|
||||
i.main 0x080059cc Section 0 main.o(i.main)
|
||||
i.mf5803_loop 0x08005a50 Section 0 mf5803.o(i.mf5803_loop)
|
||||
i.mf5803_setup 0x08005bf8 Section 0 mf5803.o(i.mf5803_setup)
|
||||
i.modbus_analysis_rtu 0x08005cb8 Section 0 modbus_rtu.o(i.modbus_analysis_rtu)
|
||||
i.modbus_errfunction_rtu 0x08005d6c Section 0 modbus_rtu.o(i.modbus_errfunction_rtu)
|
||||
i.modbus_process_rtu 0x08005dec Section 0 modbus_rtu.o(i.modbus_process_rtu)
|
||||
i.modbus_rtu_init 0x08005e30 Section 0 modbus_rtu.o(i.modbus_rtu_init)
|
||||
i.modbus_rx_cb 0x08005e84 Section 0 modbus_rtu.o(i.modbus_rx_cb)
|
||||
i.prov_calibrate_step 0x08005f04 Section 0 provalctrl.o(i.prov_calibrate_step)
|
||||
i.prov_ctrl 0x08006038 Section 0 provalctrl.o(i.prov_ctrl)
|
||||
i.prov_init 0x080060f8 Section 0 provalctrl.o(i.prov_init)
|
||||
i.readcoilstate_rtu 0x08006200 Section 0 modbus_rtu.o(i.readcoilstate_rtu)
|
||||
i.readdisinputstate_rtu 0x08006350 Section 0 modbus_rtu.o(i.readdisinputstate_rtu)
|
||||
i.readholdreg_rtu 0x0800649c Section 0 modbus_rtu.o(i.readholdreg_rtu)
|
||||
i.readinputreg_rtu 0x080065a8 Section 0 modbus_rtu.o(i.readinputreg_rtu)
|
||||
i.setcs 0x080066ac Section 0 ms5803.o(i.setcs)
|
||||
i.tim6_cnt 0x08006714 Section 0 timer.o(i.tim6_cnt)
|
||||
i.uart_send 0x08006898 Section 0 uarts.o(i.uart_send)
|
||||
i.wf5803_ReadReg 0x080068ac Section 0 mf5803.o(i.wf5803_ReadReg)
|
||||
i.wf5803_WriteReg 0x080068ce Section 0 mf5803.o(i.wf5803_WriteReg)
|
||||
i.writemulticoil_rtu 0x080068f0 Section 0 modbus_rtu.o(i.writemulticoil_rtu)
|
||||
i.writemultireg_rtu 0x08006a3c Section 0 modbus_rtu.o(i.writemultireg_rtu)
|
||||
i.writesinglecoil_rtu 0x08006b40 Section 0 modbus_rtu.o(i.writesinglecoil_rtu)
|
||||
i.writesinglereg_rtu 0x08006c04 Section 0 modbus_rtu.o(i.writesinglereg_rtu)
|
||||
x$fpl$dadd 0x08006cbc Section 336 daddsub_clz.o(x$fpl$dadd)
|
||||
$v0 0x08006cbc Number 0 daddsub_clz.o(x$fpl$dadd)
|
||||
_dadd1 0x08006ccd Thumb Code 0 daddsub_clz.o(x$fpl$dadd)
|
||||
x$fpl$ddiv 0x08006e0c Section 688 ddiv.o(x$fpl$ddiv)
|
||||
$v0 0x08006e0c Number 0 ddiv.o(x$fpl$ddiv)
|
||||
ddiv_entry 0x08006e13 Thumb Code 0 ddiv.o(x$fpl$ddiv)
|
||||
x$fpl$dfix 0x080070bc Section 94 dfix.o(x$fpl$dfix)
|
||||
$v0 0x080070bc Number 0 dfix.o(x$fpl$dfix)
|
||||
x$fpl$dfixu 0x0800711c Section 90 dfixu.o(x$fpl$dfixu)
|
||||
$v0 0x0800711c Number 0 dfixu.o(x$fpl$dfixu)
|
||||
x$fpl$dflt 0x08007176 Section 46 dflt_clz.o(x$fpl$dflt)
|
||||
$v0 0x08007176 Number 0 dflt_clz.o(x$fpl$dflt)
|
||||
x$fpl$dfltll 0x080071a4 Section 162 dfltll_clz.o(x$fpl$dfltll)
|
||||
$v0 0x080071a4 Number 0 dfltll_clz.o(x$fpl$dfltll)
|
||||
x$fpl$dmul 0x08007248 Section 340 dmul.o(x$fpl$dmul)
|
||||
$v0 0x08007248 Number 0 dmul.o(x$fpl$dmul)
|
||||
x$fpl$dnaninf 0x0800739c Section 156 dnaninf.o(x$fpl$dnaninf)
|
||||
$v0 0x0800739c Number 0 dnaninf.o(x$fpl$dnaninf)
|
||||
x$fpl$dretinf 0x08007438 Section 12 dretinf.o(x$fpl$dretinf)
|
||||
$v0 0x08007438 Number 0 dretinf.o(x$fpl$dretinf)
|
||||
x$fpl$dsub 0x08007444 Section 468 daddsub_clz.o(x$fpl$dsub)
|
||||
$v0 0x08007444 Number 0 daddsub_clz.o(x$fpl$dsub)
|
||||
_dsub1 0x08007455 Thumb Code 0 daddsub_clz.o(x$fpl$dsub)
|
||||
x$fpl$fpinit 0x08007618 Section 10 fpinit.o(x$fpl$fpinit)
|
||||
$v0 0x08007618 Number 0 fpinit.o(x$fpl$fpinit)
|
||||
.constdata 0x08007622 Section 8 stm32f4xx_hal_dma.o(.constdata)
|
||||
x$fpl$usenofp 0x08007622 Section 0 usenofp.o(x$fpl$usenofp)
|
||||
flagBitshiftOffset 0x08007622 Data 8 stm32f4xx_hal_dma.o(.constdata)
|
||||
.constdata 0x0800762a Section 24 system_stm32f4xx.o(.constdata)
|
||||
i.analog_gather 0x080050ec Section 0 adcs.o(i.analog_gather)
|
||||
i.ao_blf1_set 0x0800513c Section 0 dac7311.o(i.ao_blf1_set)
|
||||
i.ao_blf2_set 0x08005188 Section 0 dac7311.o(i.ao_blf2_set)
|
||||
i.ao_dwq_set 0x080051d4 Section 0 dac7311.o(i.ao_dwq_set)
|
||||
i.ao_write 0x08005228 Section 0 dac7311.o(i.ao_write)
|
||||
i.clrcs 0x0800537c Section 0 ms5803.o(i.clrcs)
|
||||
i.dac7311_init 0x08005414 Section 0 dac7311.o(i.dac7311_init)
|
||||
i.delay_ms 0x08005454 Section 0 main.o(i.delay_ms)
|
||||
i.delay_tick 0x0800545e Section 0 main.o(i.delay_tick)
|
||||
i.delay_us 0x0800546c Section 0 main.o(i.delay_us)
|
||||
i.digital_ctrl 0x080054cc Section 0 gpios.o(i.digital_ctrl)
|
||||
i.disp_out 0x080055ec Section 0 hc595.o(i.disp_out)
|
||||
i.ds18b20_check 0x08005618 Section 0 ds18b20.o(i.ds18b20_check)
|
||||
i.ds18b20_get_temp 0x08005678 Section 0 ds18b20.o(i.ds18b20_get_temp)
|
||||
i.ds18b20_init 0x080056e4 Section 0 ds18b20.o(i.ds18b20_init)
|
||||
i.ds18b20_read_bit 0x08005700 Section 0 ds18b20.o(i.ds18b20_read_bit)
|
||||
i.ds18b20_read_byte 0x08005764 Section 0 ds18b20.o(i.ds18b20_read_byte)
|
||||
i.ds18b20_rst 0x08005788 Section 0 ds18b20.o(i.ds18b20_rst)
|
||||
i.ds18b20_start 0x080057c8 Section 0 ds18b20.o(i.ds18b20_start)
|
||||
i.ds18b20_write_byte 0x080057e0 Section 0 ds18b20.o(i.ds18b20_write_byte)
|
||||
i.encoder_init 0x08005858 Section 0 encoder.o(i.encoder_init)
|
||||
i.encoder_run 0x080058b0 Section 0 encoder.o(i.encoder_run)
|
||||
i.hc595_write_data 0x08005940 Section 0 hc595.o(i.hc595_write_data)
|
||||
i.led_ctrl 0x080059ac Section 0 gpios.o(i.led_ctrl)
|
||||
i.main 0x080059d0 Section 0 main.o(i.main)
|
||||
i.mf5803_loop 0x08005a54 Section 0 mf5803.o(i.mf5803_loop)
|
||||
i.mf5803_setup 0x08005bfc Section 0 mf5803.o(i.mf5803_setup)
|
||||
i.modbus_analysis_rtu 0x08005cbc Section 0 modbus_rtu.o(i.modbus_analysis_rtu)
|
||||
i.modbus_errfunction_rtu 0x08005d70 Section 0 modbus_rtu.o(i.modbus_errfunction_rtu)
|
||||
i.modbus_process_rtu 0x08005df0 Section 0 modbus_rtu.o(i.modbus_process_rtu)
|
||||
i.modbus_rtu_init 0x08005e34 Section 0 modbus_rtu.o(i.modbus_rtu_init)
|
||||
i.modbus_rx_cb 0x08005e88 Section 0 modbus_rtu.o(i.modbus_rx_cb)
|
||||
i.prov_calibrate_step 0x08005f08 Section 0 provalctrl.o(i.prov_calibrate_step)
|
||||
i.prov_ctrl 0x0800603c Section 0 provalctrl.o(i.prov_ctrl)
|
||||
i.prov_init 0x080060fc Section 0 provalctrl.o(i.prov_init)
|
||||
i.readcoilstate_rtu 0x08006204 Section 0 modbus_rtu.o(i.readcoilstate_rtu)
|
||||
i.readdisinputstate_rtu 0x08006354 Section 0 modbus_rtu.o(i.readdisinputstate_rtu)
|
||||
i.readholdreg_rtu 0x080064a0 Section 0 modbus_rtu.o(i.readholdreg_rtu)
|
||||
i.readinputreg_rtu 0x080065ac Section 0 modbus_rtu.o(i.readinputreg_rtu)
|
||||
i.setcs 0x080066b0 Section 0 ms5803.o(i.setcs)
|
||||
i.tim6_cnt 0x08006718 Section 0 timer.o(i.tim6_cnt)
|
||||
i.uart_send 0x0800689c Section 0 uarts.o(i.uart_send)
|
||||
i.wf5803_ReadReg 0x080068b0 Section 0 mf5803.o(i.wf5803_ReadReg)
|
||||
i.wf5803_WriteReg 0x080068d2 Section 0 mf5803.o(i.wf5803_WriteReg)
|
||||
i.writemulticoil_rtu 0x080068f4 Section 0 modbus_rtu.o(i.writemulticoil_rtu)
|
||||
i.writemultireg_rtu 0x08006a40 Section 0 modbus_rtu.o(i.writemultireg_rtu)
|
||||
i.writesinglecoil_rtu 0x08006b44 Section 0 modbus_rtu.o(i.writesinglecoil_rtu)
|
||||
i.writesinglereg_rtu 0x08006c08 Section 0 modbus_rtu.o(i.writesinglereg_rtu)
|
||||
x$fpl$dadd 0x08006cc0 Section 336 daddsub_clz.o(x$fpl$dadd)
|
||||
$v0 0x08006cc0 Number 0 daddsub_clz.o(x$fpl$dadd)
|
||||
_dadd1 0x08006cd1 Thumb Code 0 daddsub_clz.o(x$fpl$dadd)
|
||||
x$fpl$ddiv 0x08006e10 Section 688 ddiv.o(x$fpl$ddiv)
|
||||
$v0 0x08006e10 Number 0 ddiv.o(x$fpl$ddiv)
|
||||
ddiv_entry 0x08006e17 Thumb Code 0 ddiv.o(x$fpl$ddiv)
|
||||
x$fpl$dfix 0x080070c0 Section 94 dfix.o(x$fpl$dfix)
|
||||
$v0 0x080070c0 Number 0 dfix.o(x$fpl$dfix)
|
||||
x$fpl$dfixu 0x08007120 Section 90 dfixu.o(x$fpl$dfixu)
|
||||
$v0 0x08007120 Number 0 dfixu.o(x$fpl$dfixu)
|
||||
x$fpl$dflt 0x0800717a Section 46 dflt_clz.o(x$fpl$dflt)
|
||||
$v0 0x0800717a Number 0 dflt_clz.o(x$fpl$dflt)
|
||||
x$fpl$dfltll 0x080071a8 Section 162 dfltll_clz.o(x$fpl$dfltll)
|
||||
$v0 0x080071a8 Number 0 dfltll_clz.o(x$fpl$dfltll)
|
||||
x$fpl$dmul 0x0800724c Section 340 dmul.o(x$fpl$dmul)
|
||||
$v0 0x0800724c Number 0 dmul.o(x$fpl$dmul)
|
||||
x$fpl$dnaninf 0x080073a0 Section 156 dnaninf.o(x$fpl$dnaninf)
|
||||
$v0 0x080073a0 Number 0 dnaninf.o(x$fpl$dnaninf)
|
||||
x$fpl$dretinf 0x0800743c Section 12 dretinf.o(x$fpl$dretinf)
|
||||
$v0 0x0800743c Number 0 dretinf.o(x$fpl$dretinf)
|
||||
x$fpl$dsub 0x08007448 Section 468 daddsub_clz.o(x$fpl$dsub)
|
||||
$v0 0x08007448 Number 0 daddsub_clz.o(x$fpl$dsub)
|
||||
_dsub1 0x08007459 Thumb Code 0 daddsub_clz.o(x$fpl$dsub)
|
||||
x$fpl$fpinit 0x0800761c Section 10 fpinit.o(x$fpl$fpinit)
|
||||
$v0 0x0800761c Number 0 fpinit.o(x$fpl$fpinit)
|
||||
.constdata 0x08007626 Section 8 stm32f4xx_hal_dma.o(.constdata)
|
||||
x$fpl$usenofp 0x08007626 Section 0 usenofp.o(x$fpl$usenofp)
|
||||
flagBitshiftOffset 0x08007626 Data 8 stm32f4xx_hal_dma.o(.constdata)
|
||||
.constdata 0x0800762e Section 24 system_stm32f4xx.o(.constdata)
|
||||
.data 0x20000000 Section 9 stm32f4xx_hal.o(.data)
|
||||
.data 0x2000000c Section 4 system_stm32f4xx.o(.data)
|
||||
.data 0x20000010 Section 24 ads1256.o(.data)
|
||||
|
@ -3542,80 +3542,80 @@ Image Symbol Table
|
|||
ads1256_read_byte 0x08004e25 Thumb Code 78 ads1256.o(i.ads1256_read_byte)
|
||||
ads1256_write_byte 0x08004e7d Thumb Code 108 ads1256.o(i.ads1256_write_byte)
|
||||
analog_ctrl 0x08004ef1 Thumb Code 452 provalctrl.o(i.analog_ctrl)
|
||||
analog_gather 0x080050e9 Thumb Code 64 adcs.o(i.analog_gather)
|
||||
ao_blf1_set 0x08005139 Thumb Code 64 dac7311.o(i.ao_blf1_set)
|
||||
ao_blf2_set 0x08005185 Thumb Code 64 dac7311.o(i.ao_blf2_set)
|
||||
ao_dwq_set 0x080051d1 Thumb Code 68 dac7311.o(i.ao_dwq_set)
|
||||
ao_write 0x08005225 Thumb Code 326 dac7311.o(i.ao_write)
|
||||
clrcs 0x08005379 Thumb Code 130 ms5803.o(i.clrcs)
|
||||
dac7311_init 0x08005411 Thumb Code 56 dac7311.o(i.dac7311_init)
|
||||
delay_ms 0x08005451 Thumb Code 10 main.o(i.delay_ms)
|
||||
delay_tick 0x0800545b Thumb Code 14 main.o(i.delay_tick)
|
||||
delay_us 0x08005469 Thumb Code 90 main.o(i.delay_us)
|
||||
digital_ctrl 0x080054c9 Thumb Code 260 gpios.o(i.digital_ctrl)
|
||||
disp_out 0x080055e9 Thumb Code 38 hc595.o(i.disp_out)
|
||||
ds18b20_check 0x08005615 Thumb Code 90 ds18b20.o(i.ds18b20_check)
|
||||
ds18b20_get_temp 0x08005675 Thumb Code 108 ds18b20.o(i.ds18b20_get_temp)
|
||||
ds18b20_init 0x080056e1 Thumb Code 22 ds18b20.o(i.ds18b20_init)
|
||||
ds18b20_read_bit 0x080056fd Thumb Code 94 ds18b20.o(i.ds18b20_read_bit)
|
||||
ds18b20_read_byte 0x08005761 Thumb Code 34 ds18b20.o(i.ds18b20_read_byte)
|
||||
ds18b20_rst 0x08005785 Thumb Code 60 ds18b20.o(i.ds18b20_rst)
|
||||
ds18b20_start 0x080057c5 Thumb Code 24 ds18b20.o(i.ds18b20_start)
|
||||
ds18b20_write_byte 0x080057dd Thumb Code 114 ds18b20.o(i.ds18b20_write_byte)
|
||||
encoder_init 0x08005855 Thumb Code 62 encoder.o(i.encoder_init)
|
||||
encoder_run 0x080058ad Thumb Code 116 encoder.o(i.encoder_run)
|
||||
hc595_write_data 0x0800593d Thumb Code 98 hc595.o(i.hc595_write_data)
|
||||
led_ctrl 0x080059a9 Thumb Code 26 gpios.o(i.led_ctrl)
|
||||
main 0x080059cd Thumb Code 126 main.o(i.main)
|
||||
mf5803_loop 0x08005a51 Thumb Code 376 mf5803.o(i.mf5803_loop)
|
||||
mf5803_setup 0x08005bf9 Thumb Code 184 mf5803.o(i.mf5803_setup)
|
||||
modbus_analysis_rtu 0x08005cb9 Thumb Code 180 modbus_rtu.o(i.modbus_analysis_rtu)
|
||||
modbus_errfunction_rtu 0x08005d6d Thumb Code 118 modbus_rtu.o(i.modbus_errfunction_rtu)
|
||||
modbus_process_rtu 0x08005ded Thumb Code 64 modbus_rtu.o(i.modbus_process_rtu)
|
||||
modbus_rtu_init 0x08005e31 Thumb Code 58 modbus_rtu.o(i.modbus_rtu_init)
|
||||
modbus_rx_cb 0x08005e85 Thumb Code 98 modbus_rtu.o(i.modbus_rx_cb)
|
||||
prov_calibrate_step 0x08005f05 Thumb Code 306 provalctrl.o(i.prov_calibrate_step)
|
||||
prov_ctrl 0x08006039 Thumb Code 180 provalctrl.o(i.prov_ctrl)
|
||||
prov_init 0x080060f9 Thumb Code 240 provalctrl.o(i.prov_init)
|
||||
readcoilstate_rtu 0x08006201 Thumb Code 326 modbus_rtu.o(i.readcoilstate_rtu)
|
||||
readdisinputstate_rtu 0x08006351 Thumb Code 322 modbus_rtu.o(i.readdisinputstate_rtu)
|
||||
readholdreg_rtu 0x0800649d Thumb Code 258 modbus_rtu.o(i.readholdreg_rtu)
|
||||
readinputreg_rtu 0x080065a9 Thumb Code 252 modbus_rtu.o(i.readinputreg_rtu)
|
||||
setcs 0x080066ad Thumb Code 86 ms5803.o(i.setcs)
|
||||
tim6_cnt 0x08006715 Thumb Code 308 timer.o(i.tim6_cnt)
|
||||
uart_send 0x08006899 Thumb Code 20 uarts.o(i.uart_send)
|
||||
wf5803_ReadReg 0x080068ad Thumb Code 34 mf5803.o(i.wf5803_ReadReg)
|
||||
wf5803_WriteReg 0x080068cf Thumb Code 34 mf5803.o(i.wf5803_WriteReg)
|
||||
writemulticoil_rtu 0x080068f1 Thumb Code 322 modbus_rtu.o(i.writemulticoil_rtu)
|
||||
writemultireg_rtu 0x08006a3d Thumb Code 252 modbus_rtu.o(i.writemultireg_rtu)
|
||||
writesinglecoil_rtu 0x08006b41 Thumb Code 188 modbus_rtu.o(i.writesinglecoil_rtu)
|
||||
writesinglereg_rtu 0x08006c05 Thumb Code 176 modbus_rtu.o(i.writesinglereg_rtu)
|
||||
__aeabi_dadd 0x08006cbd Thumb Code 0 daddsub_clz.o(x$fpl$dadd)
|
||||
_dadd 0x08006cbd Thumb Code 332 daddsub_clz.o(x$fpl$dadd)
|
||||
__aeabi_ddiv 0x08006e0d Thumb Code 0 ddiv.o(x$fpl$ddiv)
|
||||
_ddiv 0x08006e0d Thumb Code 552 ddiv.o(x$fpl$ddiv)
|
||||
__aeabi_d2iz 0x080070bd Thumb Code 0 dfix.o(x$fpl$dfix)
|
||||
_dfix 0x080070bd Thumb Code 94 dfix.o(x$fpl$dfix)
|
||||
__aeabi_d2uiz 0x0800711d Thumb Code 0 dfixu.o(x$fpl$dfixu)
|
||||
_dfixu 0x0800711d Thumb Code 90 dfixu.o(x$fpl$dfixu)
|
||||
__aeabi_i2d 0x08007177 Thumb Code 0 dflt_clz.o(x$fpl$dflt)
|
||||
_dflt 0x08007177 Thumb Code 46 dflt_clz.o(x$fpl$dflt)
|
||||
__aeabi_l2d 0x080071a5 Thumb Code 0 dfltll_clz.o(x$fpl$dfltll)
|
||||
_ll_sto_d 0x080071a5 Thumb Code 162 dfltll_clz.o(x$fpl$dfltll)
|
||||
__aeabi_dmul 0x08007249 Thumb Code 0 dmul.o(x$fpl$dmul)
|
||||
_dmul 0x08007249 Thumb Code 332 dmul.o(x$fpl$dmul)
|
||||
__fpl_dnaninf 0x0800739d Thumb Code 156 dnaninf.o(x$fpl$dnaninf)
|
||||
__fpl_dretinf 0x08007439 Thumb Code 12 dretinf.o(x$fpl$dretinf)
|
||||
__aeabi_dsub 0x08007445 Thumb Code 0 daddsub_clz.o(x$fpl$dsub)
|
||||
_dsub 0x08007445 Thumb Code 464 daddsub_clz.o(x$fpl$dsub)
|
||||
_fp_init 0x08007619 Thumb Code 10 fpinit.o(x$fpl$fpinit)
|
||||
__fplib_config_fpu_vfp 0x08007621 Thumb Code 0 fpinit.o(x$fpl$fpinit)
|
||||
__fplib_config_pureend_doubles 0x08007621 Thumb Code 0 fpinit.o(x$fpl$fpinit)
|
||||
__I$use$fp 0x08007622 Number 0 usenofp.o(x$fpl$usenofp)
|
||||
AHBPrescTable 0x0800762a Data 16 system_stm32f4xx.o(.constdata)
|
||||
APBPrescTable 0x0800763a Data 8 system_stm32f4xx.o(.constdata)
|
||||
Region$$Table$$Base 0x08007644 Number 0 anon$$obj.o(Region$$Table)
|
||||
Region$$Table$$Limit 0x08007664 Number 0 anon$$obj.o(Region$$Table)
|
||||
analog_gather 0x080050ed Thumb Code 64 adcs.o(i.analog_gather)
|
||||
ao_blf1_set 0x0800513d Thumb Code 64 dac7311.o(i.ao_blf1_set)
|
||||
ao_blf2_set 0x08005189 Thumb Code 64 dac7311.o(i.ao_blf2_set)
|
||||
ao_dwq_set 0x080051d5 Thumb Code 68 dac7311.o(i.ao_dwq_set)
|
||||
ao_write 0x08005229 Thumb Code 326 dac7311.o(i.ao_write)
|
||||
clrcs 0x0800537d Thumb Code 130 ms5803.o(i.clrcs)
|
||||
dac7311_init 0x08005415 Thumb Code 56 dac7311.o(i.dac7311_init)
|
||||
delay_ms 0x08005455 Thumb Code 10 main.o(i.delay_ms)
|
||||
delay_tick 0x0800545f Thumb Code 14 main.o(i.delay_tick)
|
||||
delay_us 0x0800546d Thumb Code 90 main.o(i.delay_us)
|
||||
digital_ctrl 0x080054cd Thumb Code 260 gpios.o(i.digital_ctrl)
|
||||
disp_out 0x080055ed Thumb Code 38 hc595.o(i.disp_out)
|
||||
ds18b20_check 0x08005619 Thumb Code 90 ds18b20.o(i.ds18b20_check)
|
||||
ds18b20_get_temp 0x08005679 Thumb Code 108 ds18b20.o(i.ds18b20_get_temp)
|
||||
ds18b20_init 0x080056e5 Thumb Code 22 ds18b20.o(i.ds18b20_init)
|
||||
ds18b20_read_bit 0x08005701 Thumb Code 94 ds18b20.o(i.ds18b20_read_bit)
|
||||
ds18b20_read_byte 0x08005765 Thumb Code 34 ds18b20.o(i.ds18b20_read_byte)
|
||||
ds18b20_rst 0x08005789 Thumb Code 60 ds18b20.o(i.ds18b20_rst)
|
||||
ds18b20_start 0x080057c9 Thumb Code 24 ds18b20.o(i.ds18b20_start)
|
||||
ds18b20_write_byte 0x080057e1 Thumb Code 114 ds18b20.o(i.ds18b20_write_byte)
|
||||
encoder_init 0x08005859 Thumb Code 62 encoder.o(i.encoder_init)
|
||||
encoder_run 0x080058b1 Thumb Code 116 encoder.o(i.encoder_run)
|
||||
hc595_write_data 0x08005941 Thumb Code 98 hc595.o(i.hc595_write_data)
|
||||
led_ctrl 0x080059ad Thumb Code 26 gpios.o(i.led_ctrl)
|
||||
main 0x080059d1 Thumb Code 126 main.o(i.main)
|
||||
mf5803_loop 0x08005a55 Thumb Code 376 mf5803.o(i.mf5803_loop)
|
||||
mf5803_setup 0x08005bfd Thumb Code 184 mf5803.o(i.mf5803_setup)
|
||||
modbus_analysis_rtu 0x08005cbd Thumb Code 180 modbus_rtu.o(i.modbus_analysis_rtu)
|
||||
modbus_errfunction_rtu 0x08005d71 Thumb Code 118 modbus_rtu.o(i.modbus_errfunction_rtu)
|
||||
modbus_process_rtu 0x08005df1 Thumb Code 64 modbus_rtu.o(i.modbus_process_rtu)
|
||||
modbus_rtu_init 0x08005e35 Thumb Code 58 modbus_rtu.o(i.modbus_rtu_init)
|
||||
modbus_rx_cb 0x08005e89 Thumb Code 98 modbus_rtu.o(i.modbus_rx_cb)
|
||||
prov_calibrate_step 0x08005f09 Thumb Code 306 provalctrl.o(i.prov_calibrate_step)
|
||||
prov_ctrl 0x0800603d Thumb Code 180 provalctrl.o(i.prov_ctrl)
|
||||
prov_init 0x080060fd Thumb Code 240 provalctrl.o(i.prov_init)
|
||||
readcoilstate_rtu 0x08006205 Thumb Code 326 modbus_rtu.o(i.readcoilstate_rtu)
|
||||
readdisinputstate_rtu 0x08006355 Thumb Code 322 modbus_rtu.o(i.readdisinputstate_rtu)
|
||||
readholdreg_rtu 0x080064a1 Thumb Code 258 modbus_rtu.o(i.readholdreg_rtu)
|
||||
readinputreg_rtu 0x080065ad Thumb Code 252 modbus_rtu.o(i.readinputreg_rtu)
|
||||
setcs 0x080066b1 Thumb Code 86 ms5803.o(i.setcs)
|
||||
tim6_cnt 0x08006719 Thumb Code 308 timer.o(i.tim6_cnt)
|
||||
uart_send 0x0800689d Thumb Code 20 uarts.o(i.uart_send)
|
||||
wf5803_ReadReg 0x080068b1 Thumb Code 34 mf5803.o(i.wf5803_ReadReg)
|
||||
wf5803_WriteReg 0x080068d3 Thumb Code 34 mf5803.o(i.wf5803_WriteReg)
|
||||
writemulticoil_rtu 0x080068f5 Thumb Code 322 modbus_rtu.o(i.writemulticoil_rtu)
|
||||
writemultireg_rtu 0x08006a41 Thumb Code 252 modbus_rtu.o(i.writemultireg_rtu)
|
||||
writesinglecoil_rtu 0x08006b45 Thumb Code 188 modbus_rtu.o(i.writesinglecoil_rtu)
|
||||
writesinglereg_rtu 0x08006c09 Thumb Code 176 modbus_rtu.o(i.writesinglereg_rtu)
|
||||
__aeabi_dadd 0x08006cc1 Thumb Code 0 daddsub_clz.o(x$fpl$dadd)
|
||||
_dadd 0x08006cc1 Thumb Code 332 daddsub_clz.o(x$fpl$dadd)
|
||||
__aeabi_ddiv 0x08006e11 Thumb Code 0 ddiv.o(x$fpl$ddiv)
|
||||
_ddiv 0x08006e11 Thumb Code 552 ddiv.o(x$fpl$ddiv)
|
||||
__aeabi_d2iz 0x080070c1 Thumb Code 0 dfix.o(x$fpl$dfix)
|
||||
_dfix 0x080070c1 Thumb Code 94 dfix.o(x$fpl$dfix)
|
||||
__aeabi_d2uiz 0x08007121 Thumb Code 0 dfixu.o(x$fpl$dfixu)
|
||||
_dfixu 0x08007121 Thumb Code 90 dfixu.o(x$fpl$dfixu)
|
||||
__aeabi_i2d 0x0800717b Thumb Code 0 dflt_clz.o(x$fpl$dflt)
|
||||
_dflt 0x0800717b Thumb Code 46 dflt_clz.o(x$fpl$dflt)
|
||||
__aeabi_l2d 0x080071a9 Thumb Code 0 dfltll_clz.o(x$fpl$dfltll)
|
||||
_ll_sto_d 0x080071a9 Thumb Code 162 dfltll_clz.o(x$fpl$dfltll)
|
||||
__aeabi_dmul 0x0800724d Thumb Code 0 dmul.o(x$fpl$dmul)
|
||||
_dmul 0x0800724d Thumb Code 332 dmul.o(x$fpl$dmul)
|
||||
__fpl_dnaninf 0x080073a1 Thumb Code 156 dnaninf.o(x$fpl$dnaninf)
|
||||
__fpl_dretinf 0x0800743d Thumb Code 12 dretinf.o(x$fpl$dretinf)
|
||||
__aeabi_dsub 0x08007449 Thumb Code 0 daddsub_clz.o(x$fpl$dsub)
|
||||
_dsub 0x08007449 Thumb Code 464 daddsub_clz.o(x$fpl$dsub)
|
||||
_fp_init 0x0800761d Thumb Code 10 fpinit.o(x$fpl$fpinit)
|
||||
__fplib_config_fpu_vfp 0x08007625 Thumb Code 0 fpinit.o(x$fpl$fpinit)
|
||||
__fplib_config_pureend_doubles 0x08007625 Thumb Code 0 fpinit.o(x$fpl$fpinit)
|
||||
__I$use$fp 0x08007626 Number 0 usenofp.o(x$fpl$usenofp)
|
||||
AHBPrescTable 0x0800762e Data 16 system_stm32f4xx.o(.constdata)
|
||||
APBPrescTable 0x0800763e Data 8 system_stm32f4xx.o(.constdata)
|
||||
Region$$Table$$Base 0x08007648 Number 0 anon$$obj.o(Region$$Table)
|
||||
Region$$Table$$Limit 0x08007668 Number 0 anon$$obj.o(Region$$Table)
|
||||
uwTick 0x20000000 Data 4 stm32f4xx_hal.o(.data)
|
||||
uwTickPrio 0x20000004 Data 4 stm32f4xx_hal.o(.data)
|
||||
uwTickFreq 0x20000008 Data 1 stm32f4xx_hal.o(.data)
|
||||
|
@ -3720,9 +3720,9 @@ Memory Map of the image
|
|||
|
||||
Image Entry point : 0x08000189
|
||||
|
||||
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000077d0, Max: 0x00100000, ABSOLUTE, COMPRESSED[0x00007678])
|
||||
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000077d4, Max: 0x00100000, ABSOLUTE, COMPRESSED[0x0000767c])
|
||||
|
||||
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00007664, Max: 0x00100000, ABSOLUTE)
|
||||
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00007668, Max: 0x00100000, ABSOLUTE)
|
||||
|
||||
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
||||
|
||||
|
@ -3954,78 +3954,78 @@ Memory Map of the image
|
|||
0x08004dd4 0x08004dd4 0x00000050 Code RO 4451 i.ads1256_init ads1256.o
|
||||
0x08004e24 0x08004e24 0x00000058 Code RO 4452 i.ads1256_read_byte ads1256.o
|
||||
0x08004e7c 0x08004e7c 0x00000074 Code RO 4453 i.ads1256_write_byte ads1256.o
|
||||
0x08004ef0 0x08004ef0 0x000001f8 Code RO 5945 i.analog_ctrl provalctrl.o
|
||||
0x080050e8 0x080050e8 0x00000050 Code RO 5776 i.analog_gather adcs.o
|
||||
0x08005138 0x08005138 0x0000004c Code RO 4572 i.ao_blf1_set dac7311.o
|
||||
0x08005184 0x08005184 0x0000004c Code RO 4573 i.ao_blf2_set dac7311.o
|
||||
0x080051d0 0x080051d0 0x00000054 Code RO 4574 i.ao_dwq_set dac7311.o
|
||||
0x08005224 0x08005224 0x00000154 Code RO 4575 i.ao_write dac7311.o
|
||||
0x08005378 0x08005378 0x00000098 Code RO 4725 i.clrcs ms5803.o
|
||||
0x08005410 0x08005410 0x00000040 Code RO 4576 i.dac7311_init dac7311.o
|
||||
0x08005450 0x08005450 0x0000000a Code RO 15 i.delay_ms main.o
|
||||
0x0800545a 0x0800545a 0x0000000e Code RO 16 i.delay_tick main.o
|
||||
0x08005468 0x08005468 0x00000060 Code RO 17 i.delay_us main.o
|
||||
0x080054c8 0x080054c8 0x00000120 Code RO 5816 i.digital_ctrl gpios.o
|
||||
0x080055e8 0x080055e8 0x0000002c Code RO 4888 i.disp_out hc595.o
|
||||
0x08005614 0x08005614 0x00000060 Code RO 4822 i.ds18b20_check ds18b20.o
|
||||
0x08005674 0x08005674 0x0000006c Code RO 4823 i.ds18b20_get_temp ds18b20.o
|
||||
0x080056e0 0x080056e0 0x0000001c Code RO 4824 i.ds18b20_init ds18b20.o
|
||||
0x080056fc 0x080056fc 0x00000064 Code RO 4825 i.ds18b20_read_bit ds18b20.o
|
||||
0x08005760 0x08005760 0x00000022 Code RO 4826 i.ds18b20_read_byte ds18b20.o
|
||||
0x08005782 0x08005782 0x00000002 PAD
|
||||
0x08005784 0x08005784 0x00000040 Code RO 4827 i.ds18b20_rst ds18b20.o
|
||||
0x080057c4 0x080057c4 0x00000018 Code RO 4828 i.ds18b20_start ds18b20.o
|
||||
0x080057dc 0x080057dc 0x00000078 Code RO 4829 i.ds18b20_write_byte ds18b20.o
|
||||
0x08005854 0x08005854 0x00000058 Code RO 5994 i.encoder_init encoder.o
|
||||
0x080058ac 0x080058ac 0x00000090 Code RO 5995 i.encoder_run encoder.o
|
||||
0x0800593c 0x0800593c 0x0000006c Code RO 4889 i.hc595_write_data hc595.o
|
||||
0x080059a8 0x080059a8 0x00000024 Code RO 5817 i.led_ctrl gpios.o
|
||||
0x080059cc 0x080059cc 0x00000084 Code RO 18 i.main main.o
|
||||
0x08005a50 0x08005a50 0x000001a8 Code RO 4952 i.mf5803_loop mf5803.o
|
||||
0x08005bf8 0x08005bf8 0x000000c0 Code RO 4953 i.mf5803_setup mf5803.o
|
||||
0x08005cb8 0x08005cb8 0x000000b4 Code RO 5092 i.modbus_analysis_rtu modbus_rtu.o
|
||||
0x08005d6c 0x08005d6c 0x00000080 Code RO 5093 i.modbus_errfunction_rtu modbus_rtu.o
|
||||
0x08005dec 0x08005dec 0x00000044 Code RO 5094 i.modbus_process_rtu modbus_rtu.o
|
||||
0x08005e30 0x08005e30 0x00000054 Code RO 5095 i.modbus_rtu_init modbus_rtu.o
|
||||
0x08005e84 0x08005e84 0x00000080 Code RO 5096 i.modbus_rx_cb modbus_rtu.o
|
||||
0x08005f04 0x08005f04 0x00000132 Code RO 5946 i.prov_calibrate_step provalctrl.o
|
||||
0x08006036 0x08006036 0x00000002 PAD
|
||||
0x08006038 0x08006038 0x000000c0 Code RO 5947 i.prov_ctrl provalctrl.o
|
||||
0x080060f8 0x080060f8 0x00000108 Code RO 5948 i.prov_init provalctrl.o
|
||||
0x08006200 0x08006200 0x00000150 Code RO 5097 i.readcoilstate_rtu modbus_rtu.o
|
||||
0x08006350 0x08006350 0x0000014c Code RO 5098 i.readdisinputstate_rtu modbus_rtu.o
|
||||
0x0800649c 0x0800649c 0x0000010c Code RO 5099 i.readholdreg_rtu modbus_rtu.o
|
||||
0x080065a8 0x080065a8 0x00000104 Code RO 5100 i.readinputreg_rtu modbus_rtu.o
|
||||
0x080066ac 0x080066ac 0x00000068 Code RO 4733 i.setcs ms5803.o
|
||||
0x08006714 0x08006714 0x00000184 Code RO 5851 i.tim6_cnt timer.o
|
||||
0x08006898 0x08006898 0x00000014 Code RO 5894 i.uart_send uarts.o
|
||||
0x080068ac 0x080068ac 0x00000022 Code RO 4954 i.wf5803_ReadReg mf5803.o
|
||||
0x080068ce 0x080068ce 0x00000022 Code RO 4956 i.wf5803_WriteReg mf5803.o
|
||||
0x080068f0 0x080068f0 0x0000014c Code RO 5101 i.writemulticoil_rtu modbus_rtu.o
|
||||
0x08006a3c 0x08006a3c 0x00000104 Code RO 5102 i.writemultireg_rtu modbus_rtu.o
|
||||
0x08006b40 0x08006b40 0x000000c4 Code RO 5103 i.writesinglecoil_rtu modbus_rtu.o
|
||||
0x08006c04 0x08006c04 0x000000b8 Code RO 5104 i.writesinglereg_rtu modbus_rtu.o
|
||||
0x08006cbc 0x08006cbc 0x00000150 Code RO 6104 x$fpl$dadd fz_wm.l(daddsub_clz.o)
|
||||
0x08006e0c 0x08006e0c 0x000002b0 Code RO 6111 x$fpl$ddiv fz_wm.l(ddiv.o)
|
||||
0x080070bc 0x080070bc 0x0000005e Code RO 6114 x$fpl$dfix fz_wm.l(dfix.o)
|
||||
0x0800711a 0x0800711a 0x00000002 PAD
|
||||
0x0800711c 0x0800711c 0x0000005a Code RO 6122 x$fpl$dfixu fz_wm.l(dfixu.o)
|
||||
0x08007176 0x08007176 0x0000002e Code RO 6127 x$fpl$dflt fz_wm.l(dflt_clz.o)
|
||||
0x080071a4 0x080071a4 0x000000a2 Code RO 6132 x$fpl$dfltll fz_wm.l(dfltll_clz.o)
|
||||
0x08007246 0x08007246 0x00000002 PAD
|
||||
0x08007248 0x08007248 0x00000154 Code RO 6136 x$fpl$dmul fz_wm.l(dmul.o)
|
||||
0x0800739c 0x0800739c 0x0000009c Code RO 6168 x$fpl$dnaninf fz_wm.l(dnaninf.o)
|
||||
0x08007438 0x08007438 0x0000000c Code RO 6170 x$fpl$dretinf fz_wm.l(dretinf.o)
|
||||
0x08007444 0x08007444 0x000001d4 Code RO 6106 x$fpl$dsub fz_wm.l(daddsub_clz.o)
|
||||
0x08007618 0x08007618 0x0000000a Code RO 6339 x$fpl$fpinit fz_wm.l(fpinit.o)
|
||||
0x08007622 0x08007622 0x00000000 Code RO 6176 x$fpl$usenofp fz_wm.l(usenofp.o)
|
||||
0x08007622 0x08007622 0x00000008 Data RO 1568 .constdata stm32f4xx_hal_dma.o
|
||||
0x0800762a 0x0800762a 0x00000018 Data RO 4413 .constdata system_stm32f4xx.o
|
||||
0x08007642 0x08007642 0x00000002 PAD
|
||||
0x08007644 0x08007644 0x00000020 Data RO 6395 Region$$Table anon$$obj.o
|
||||
0x08004ef0 0x08004ef0 0x000001fc Code RO 5945 i.analog_ctrl provalctrl.o
|
||||
0x080050ec 0x080050ec 0x00000050 Code RO 5776 i.analog_gather adcs.o
|
||||
0x0800513c 0x0800513c 0x0000004c Code RO 4572 i.ao_blf1_set dac7311.o
|
||||
0x08005188 0x08005188 0x0000004c Code RO 4573 i.ao_blf2_set dac7311.o
|
||||
0x080051d4 0x080051d4 0x00000054 Code RO 4574 i.ao_dwq_set dac7311.o
|
||||
0x08005228 0x08005228 0x00000154 Code RO 4575 i.ao_write dac7311.o
|
||||
0x0800537c 0x0800537c 0x00000098 Code RO 4725 i.clrcs ms5803.o
|
||||
0x08005414 0x08005414 0x00000040 Code RO 4576 i.dac7311_init dac7311.o
|
||||
0x08005454 0x08005454 0x0000000a Code RO 15 i.delay_ms main.o
|
||||
0x0800545e 0x0800545e 0x0000000e Code RO 16 i.delay_tick main.o
|
||||
0x0800546c 0x0800546c 0x00000060 Code RO 17 i.delay_us main.o
|
||||
0x080054cc 0x080054cc 0x00000120 Code RO 5816 i.digital_ctrl gpios.o
|
||||
0x080055ec 0x080055ec 0x0000002c Code RO 4888 i.disp_out hc595.o
|
||||
0x08005618 0x08005618 0x00000060 Code RO 4822 i.ds18b20_check ds18b20.o
|
||||
0x08005678 0x08005678 0x0000006c Code RO 4823 i.ds18b20_get_temp ds18b20.o
|
||||
0x080056e4 0x080056e4 0x0000001c Code RO 4824 i.ds18b20_init ds18b20.o
|
||||
0x08005700 0x08005700 0x00000064 Code RO 4825 i.ds18b20_read_bit ds18b20.o
|
||||
0x08005764 0x08005764 0x00000022 Code RO 4826 i.ds18b20_read_byte ds18b20.o
|
||||
0x08005786 0x08005786 0x00000002 PAD
|
||||
0x08005788 0x08005788 0x00000040 Code RO 4827 i.ds18b20_rst ds18b20.o
|
||||
0x080057c8 0x080057c8 0x00000018 Code RO 4828 i.ds18b20_start ds18b20.o
|
||||
0x080057e0 0x080057e0 0x00000078 Code RO 4829 i.ds18b20_write_byte ds18b20.o
|
||||
0x08005858 0x08005858 0x00000058 Code RO 5994 i.encoder_init encoder.o
|
||||
0x080058b0 0x080058b0 0x00000090 Code RO 5995 i.encoder_run encoder.o
|
||||
0x08005940 0x08005940 0x0000006c Code RO 4889 i.hc595_write_data hc595.o
|
||||
0x080059ac 0x080059ac 0x00000024 Code RO 5817 i.led_ctrl gpios.o
|
||||
0x080059d0 0x080059d0 0x00000084 Code RO 18 i.main main.o
|
||||
0x08005a54 0x08005a54 0x000001a8 Code RO 4952 i.mf5803_loop mf5803.o
|
||||
0x08005bfc 0x08005bfc 0x000000c0 Code RO 4953 i.mf5803_setup mf5803.o
|
||||
0x08005cbc 0x08005cbc 0x000000b4 Code RO 5092 i.modbus_analysis_rtu modbus_rtu.o
|
||||
0x08005d70 0x08005d70 0x00000080 Code RO 5093 i.modbus_errfunction_rtu modbus_rtu.o
|
||||
0x08005df0 0x08005df0 0x00000044 Code RO 5094 i.modbus_process_rtu modbus_rtu.o
|
||||
0x08005e34 0x08005e34 0x00000054 Code RO 5095 i.modbus_rtu_init modbus_rtu.o
|
||||
0x08005e88 0x08005e88 0x00000080 Code RO 5096 i.modbus_rx_cb modbus_rtu.o
|
||||
0x08005f08 0x08005f08 0x00000132 Code RO 5946 i.prov_calibrate_step provalctrl.o
|
||||
0x0800603a 0x0800603a 0x00000002 PAD
|
||||
0x0800603c 0x0800603c 0x000000c0 Code RO 5947 i.prov_ctrl provalctrl.o
|
||||
0x080060fc 0x080060fc 0x00000108 Code RO 5948 i.prov_init provalctrl.o
|
||||
0x08006204 0x08006204 0x00000150 Code RO 5097 i.readcoilstate_rtu modbus_rtu.o
|
||||
0x08006354 0x08006354 0x0000014c Code RO 5098 i.readdisinputstate_rtu modbus_rtu.o
|
||||
0x080064a0 0x080064a0 0x0000010c Code RO 5099 i.readholdreg_rtu modbus_rtu.o
|
||||
0x080065ac 0x080065ac 0x00000104 Code RO 5100 i.readinputreg_rtu modbus_rtu.o
|
||||
0x080066b0 0x080066b0 0x00000068 Code RO 4733 i.setcs ms5803.o
|
||||
0x08006718 0x08006718 0x00000184 Code RO 5851 i.tim6_cnt timer.o
|
||||
0x0800689c 0x0800689c 0x00000014 Code RO 5894 i.uart_send uarts.o
|
||||
0x080068b0 0x080068b0 0x00000022 Code RO 4954 i.wf5803_ReadReg mf5803.o
|
||||
0x080068d2 0x080068d2 0x00000022 Code RO 4956 i.wf5803_WriteReg mf5803.o
|
||||
0x080068f4 0x080068f4 0x0000014c Code RO 5101 i.writemulticoil_rtu modbus_rtu.o
|
||||
0x08006a40 0x08006a40 0x00000104 Code RO 5102 i.writemultireg_rtu modbus_rtu.o
|
||||
0x08006b44 0x08006b44 0x000000c4 Code RO 5103 i.writesinglecoil_rtu modbus_rtu.o
|
||||
0x08006c08 0x08006c08 0x000000b8 Code RO 5104 i.writesinglereg_rtu modbus_rtu.o
|
||||
0x08006cc0 0x08006cc0 0x00000150 Code RO 6104 x$fpl$dadd fz_wm.l(daddsub_clz.o)
|
||||
0x08006e10 0x08006e10 0x000002b0 Code RO 6111 x$fpl$ddiv fz_wm.l(ddiv.o)
|
||||
0x080070c0 0x080070c0 0x0000005e Code RO 6114 x$fpl$dfix fz_wm.l(dfix.o)
|
||||
0x0800711e 0x0800711e 0x00000002 PAD
|
||||
0x08007120 0x08007120 0x0000005a Code RO 6122 x$fpl$dfixu fz_wm.l(dfixu.o)
|
||||
0x0800717a 0x0800717a 0x0000002e Code RO 6127 x$fpl$dflt fz_wm.l(dflt_clz.o)
|
||||
0x080071a8 0x080071a8 0x000000a2 Code RO 6132 x$fpl$dfltll fz_wm.l(dfltll_clz.o)
|
||||
0x0800724a 0x0800724a 0x00000002 PAD
|
||||
0x0800724c 0x0800724c 0x00000154 Code RO 6136 x$fpl$dmul fz_wm.l(dmul.o)
|
||||
0x080073a0 0x080073a0 0x0000009c Code RO 6168 x$fpl$dnaninf fz_wm.l(dnaninf.o)
|
||||
0x0800743c 0x0800743c 0x0000000c Code RO 6170 x$fpl$dretinf fz_wm.l(dretinf.o)
|
||||
0x08007448 0x08007448 0x000001d4 Code RO 6106 x$fpl$dsub fz_wm.l(daddsub_clz.o)
|
||||
0x0800761c 0x0800761c 0x0000000a Code RO 6339 x$fpl$fpinit fz_wm.l(fpinit.o)
|
||||
0x08007626 0x08007626 0x00000000 Code RO 6176 x$fpl$usenofp fz_wm.l(usenofp.o)
|
||||
0x08007626 0x08007626 0x00000008 Data RO 1568 .constdata stm32f4xx_hal_dma.o
|
||||
0x0800762e 0x0800762e 0x00000018 Data RO 4413 .constdata system_stm32f4xx.o
|
||||
0x08007646 0x08007646 0x00000002 PAD
|
||||
0x08007648 0x08007648 0x00000020 Data RO 6395 Region$$Table anon$$obj.o
|
||||
|
||||
|
||||
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08007664, Size: 0x00001a18, Max: 0x0001c000, ABSOLUTE, COMPRESSED[0x00000014])
|
||||
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08007668, Size: 0x00001a18, Max: 0x0001c000, ABSOLUTE, COMPRESSED[0x00000014])
|
||||
|
||||
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
||||
|
||||
|
@ -4063,7 +4063,7 @@ Memory Map of the image
|
|||
0x20001618 - 0x00000400 Zero RW 1 STACK startup_stm32f407xx.o
|
||||
|
||||
|
||||
Execution Region RW_IRAM2 (Exec base: 0x2001c000, Load base: 0x08007678, Size: 0x00000000, Max: 0x00004000, ABSOLUTE)
|
||||
Execution Region RW_IRAM2 (Exec base: 0x2001c000, Load base: 0x0800767c, Size: 0x00000000, Max: 0x00004000, ABSOLUTE)
|
||||
|
||||
**** No section assigned to this execution region ****
|
||||
|
||||
|
@ -4093,7 +4093,7 @@ Image component sizes
|
|||
358 32 0 110 196 7180 modbus.o
|
||||
2756 142 0 0 2048 13994 modbus_rtu.o
|
||||
256 50 0 17 0 3199 ms5803.o
|
||||
1266 88 0 16 112 4240 provalctrl.o
|
||||
1270 92 0 16 112 4240 provalctrl.o
|
||||
204 22 0 0 88 1861 spi.o
|
||||
64 26 392 0 1536 892 startup_stm32f407xx.o
|
||||
212 36 0 9 0 9777 stm32f4xx_hal.o
|
||||
|
@ -4116,7 +4116,7 @@ Image component sizes
|
|||
1288 114 0 0 840 5222 usart.o
|
||||
|
||||
----------------------------------------------------------------------
|
||||
26516 1794 458 364 6220 932141 Object Totals
|
||||
26520 1798 458 364 6220 932141 Object Totals
|
||||
0 0 32 0 0 0 (incl. Generated)
|
||||
26 0 2 10 0 0 (incl. Padding)
|
||||
|
||||
|
@ -4181,15 +4181,15 @@ Image component sizes
|
|||
|
||||
Code (inc. data) RO Data RW Data ZI Data Debug
|
||||
|
||||
29850 1986 458 364 6316 913489 Grand Totals
|
||||
29850 1986 458 20 6316 913489 ELF Image Totals (compressed)
|
||||
29850 1986 458 20 0 0 ROM Totals
|
||||
29854 1990 458 364 6316 913489 Grand Totals
|
||||
29854 1990 458 20 6316 913489 ELF Image Totals (compressed)
|
||||
29854 1990 458 20 0 0 ROM Totals
|
||||
|
||||
==============================================================================
|
||||
|
||||
Total RO Size (Code + RO Data) 30308 ( 29.60kB)
|
||||
Total RO Size (Code + RO Data) 30312 ( 29.60kB)
|
||||
Total RW Size (RW Data + ZI Data) 6680 ( 6.52kB)
|
||||
Total ROM Size (Code + RO Data + RW Data) 30328 ( 29.62kB)
|
||||
Total ROM Size (Code + RO Data + RW Data) 30332 ( 29.62kB)
|
||||
|
||||
==============================================================================
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Dependencies for Project 'VOQC', Target 'VOQC': (DO NOT MODIFY !)
|
||||
CompilerVersion: 5060960::V5.06 update 7 (build 960)::.\ARM Compiler_5_06
|
||||
F (startup_stm32f407xx.s)(0x66C2E5B4)(--cpu Cortex-M4.fp.sp -g --apcs=interwork
-I.\RTE\_VOQC
-IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
-IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
--pd "__UVISION_VERSION SETA 539" --pd "_RTE_ SETA 1" --pd "STM32F407xx SETA 1" --pd "_RTE_ SETA 1"
--list startup_stm32f407xx.lst --xref -o voqc\startup_stm32f407xx.o --depend voqc\startup_stm32f407xx.d)
|
||||
F (../Core/Src/main.c)(0x66C3FC55)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc
-I.\RTE\_VOQC
-IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
-IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
-D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o voqc\main.o --omf_browse voqc\main.crf --depend voqc\main.d)
|
||||
F (../Core/Src/main.c)(0x66C43E3A)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc
-I.\RTE\_VOQC
-IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
-IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
-D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o voqc\main.o --omf_browse voqc\main.crf --depend voqc\main.d)
|
||||
I (../Core/Inc/main.h)(0x6694D721)
|
||||
I (../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h)(0x66B41EAC)
|
||||
I (../Core/Inc/stm32f4xx_hal_conf.h)(0x66C2E5B0)
|
||||
|
@ -2239,7 +2239,7 @@ I (../Core/Inc/spi.h)(0x668F85FC)
|
|||
I (../CH395Q/ch395cmd.h)(0x664FF969)
|
||||
I (C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\include\string.h)(0x5E8E3CC2)
|
||||
I (C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\include\stdio.h)(0x5E8E3CC2)
|
||||
F (..\users\Src\provalctrl.c)(0x66C4372B)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc
-I.\RTE\_VOQC
-IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
-IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
-D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o voqc\provalctrl.o --omf_browse voqc\provalctrl.crf --depend voqc\provalctrl.d)
|
||||
F (..\users\Src\provalctrl.c)(0x66C43F7B)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc
-I.\RTE\_VOQC
-IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
-IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
-D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o voqc\provalctrl.o --omf_browse voqc\provalctrl.crf --depend voqc\provalctrl.d)
|
||||
I (../users/Inc/provalctrl.h)(0x66C42ED5)
|
||||
I (../modbus/Inc/modbus.h)(0x669A1795)
|
||||
I (../users/Inc/timer.h)(0x66C43301)
|
||||
|
@ -2290,7 +2290,7 @@ I (../Core/Inc/spi.h)(0x668F85FC)
|
|||
I (../CH395Q/ch395cmd.h)(0x664FF969)
|
||||
I (C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\include\string.h)(0x5E8E3CC2)
|
||||
I (../board/Inc/dac7311.h)(0x66949B65)
|
||||
F (..\users\Src\encoder.c)(0x66C3EBFF)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc
-I.\RTE\_VOQC
-IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
-IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
-D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o voqc\encoder.o --omf_browse voqc\encoder.crf --depend voqc\encoder.d)
|
||||
F (..\users\Src\encoder.c)(0x66C43FCC)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc
-I.\RTE\_VOQC
-IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
-IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
-D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o voqc\encoder.o --omf_browse voqc\encoder.crf --depend voqc\encoder.d)
|
||||
I (../users/Inc/encoder.h)(0x66C3E76F)
|
||||
I (../modbus/Inc/modbus.h)(0x669A1795)
|
||||
I (../users/Inc/timer.h)(0x66C43301)
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,106 +1,106 @@
|
|||
#include "mf.h"
|
||||
|
||||
int flow_addr = 1; //流量计地址
|
||||
double flow1 = 0; //小流量计mf4700累积流量
|
||||
double flow2 = 0; //大流量计mf5003累积流量
|
||||
double flow3 = 0; //大流量计mf5008累积流量
|
||||
int mf_cnt = 0; //数据接收计数
|
||||
int flow_addr = 1; //流量计地址
|
||||
double flow1 = 0; //小流量计mf4700累积流量
|
||||
double flow2 = 0; //大流量计mf5003累积流量
|
||||
double flow3 = 0; //大流量计mf5008累积流量
|
||||
int mf_cnt = 0; //数据接收计数
|
||||
|
||||
uint8_t tx_buf[20] = {0}; //数据发送数组
|
||||
uint8_t tx_buf[20] = {0}; //数据发送数组
|
||||
|
||||
uint8_t mf4700_buf[36] = {0};//小流量计mf4700累积流量数据接收数组
|
||||
uint8_t mf5003_buf[36] = {0};//大流量计mf5003累积流量数据接收数组
|
||||
uint8_t mf5008_buf[36] = {0};//大流量计mf5008累积流量数据接收数组
|
||||
uint8_t mf4700_buf[36] = {0};//小流量计mf4700累积流量数据接收数组
|
||||
uint8_t mf5003_buf[36] = {0};//大流量计mf5003累积流量数据接收数组
|
||||
uint8_t mf5008_buf[36] = {0};//大流量计mf5008累积流量数据接收数组
|
||||
|
||||
/*
|
||||
*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高]
|
||||
*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高]
|
||||
*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高]
|
||||
*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高]
|
||||
*/
|
||||
void read_mf(uint8_t local_addr, uint16_t start_addr, uint16_t read_len)
|
||||
{
|
||||
uint8_t tx_len = 0;
|
||||
uint16_t CRC_Num = 0;
|
||||
|
||||
tx_buf[tx_len ++] = local_addr; //通讯地址
|
||||
tx_buf[tx_len ++] = Read_Hold; //命令字 0x03
|
||||
tx_buf[tx_len ++] = local_addr; //通讯地址
|
||||
tx_buf[tx_len ++] = Read_Hold; //命令字 0x03
|
||||
tx_buf[tx_len ++] = (uint8_t)(start_addr >> 8);
|
||||
tx_buf[tx_len ++] = (uint8_t)(start_addr & 0xFF); //起始地址
|
||||
tx_buf[tx_len ++] = (uint8_t)(start_addr & 0xFF); //起始地址
|
||||
tx_buf[tx_len ++] = (uint8_t)(read_len >> 8);
|
||||
tx_buf[tx_len ++] = (uint8_t)(read_len & 0xFF); //读取寄存器数
|
||||
tx_buf[tx_len ++] = (uint8_t)(read_len & 0xFF); //读取寄存器数
|
||||
|
||||
CRC_Num = ModbusCRC16(tx_buf,tx_len);
|
||||
tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF);
|
||||
tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRC校验,低位在前
|
||||
tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRC校验,低位在前
|
||||
|
||||
usart6_send(tx_buf,tx_len);
|
||||
}
|
||||
|
||||
/*
|
||||
*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*/
|
||||
void write_mf(uint8_t local_addr, uint16_t reg_addr, uint16_t write_data)
|
||||
{
|
||||
uint8_t tx_len = 0;
|
||||
uint16_t CRC_Num = 0;
|
||||
|
||||
tx_buf[tx_len ++] = local_addr; //通讯地址
|
||||
tx_buf[tx_len ++] = Write_Single; //命令字 0x06
|
||||
tx_buf[tx_len ++] = local_addr; //通讯地址
|
||||
tx_buf[tx_len ++] = Write_Single; //命令字 0x06
|
||||
tx_buf[tx_len ++] = (uint8_t)(reg_addr >> 8);
|
||||
tx_buf[tx_len ++] = (uint8_t)(reg_addr & 0xFF); //起始地址
|
||||
tx_buf[tx_len ++] = (uint8_t)(reg_addr & 0xFF); //起始地址
|
||||
tx_buf[tx_len ++] = (uint8_t)(write_data >> 8);
|
||||
tx_buf[tx_len ++] = (uint8_t)(write_data & 0xFF); //写入数据
|
||||
tx_buf[tx_len ++] = (uint8_t)(write_data & 0xFF); //写入数据
|
||||
|
||||
CRC_Num = ModbusCRC16(tx_buf,tx_len);
|
||||
tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF);
|
||||
tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRC校验,低位在前
|
||||
tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRC校验,低位在前
|
||||
|
||||
usart6_send(tx_buf,tx_len);
|
||||
}
|
||||
|
||||
//读mf4700瞬时流量
|
||||
//读mf4700瞬时流量
|
||||
void read_mf4700_flow(void)
|
||||
{
|
||||
read_mf(MF4700_ADDR,MF4700_Ins_Flow_Addr,2);
|
||||
}
|
||||
|
||||
//读mf4701累积流量
|
||||
//读mf4701累积流量
|
||||
void read_mf4701_flow(void)
|
||||
{
|
||||
read_mf(MF4700_ADDR,MF4700_Cum_Flow_Addr,3);
|
||||
}
|
||||
|
||||
//读mf5600瞬时流量
|
||||
//读mf5600瞬时流量
|
||||
void read_mf5000_flow(void)
|
||||
{
|
||||
read_mf(MF5003_ADDR,MF5000_Ins_Flow_Addr,2);
|
||||
}
|
||||
|
||||
//读mf5603累积流量
|
||||
//读mf5603累积流量
|
||||
void read_mf5003_flow(void)
|
||||
{
|
||||
read_mf(MF5003_ADDR,MF5000_Cum_Flow_Addr,3);
|
||||
}
|
||||
|
||||
//读mf5608累积流量
|
||||
//读mf5608累积流量
|
||||
void read_mf5008_flow(void)
|
||||
{
|
||||
read_mf(MF5008_ADDR,MF5000_Cum_Flow_Addr,3);
|
||||
}
|
||||
|
||||
//mf4700自动校零
|
||||
//mf4700自动校零
|
||||
void mf4700_zero(void)
|
||||
{
|
||||
write_mf(MF4700_ADDR,MF4700_Auto_Zero_Addr,General_Data);
|
||||
}
|
||||
|
||||
//mf5600自动校零
|
||||
//mf5600自动校零
|
||||
void mf5000_zero(void)
|
||||
{
|
||||
write_mf(MF5003_ADDR,MF5000_Auto_Zero_Addr,General_Data);
|
||||
}
|
||||
|
||||
//获取流量计读数,存入保持寄存器
|
||||
//获取流量计读数,存入保持寄存器
|
||||
void mf_read(void)
|
||||
{
|
||||
switch(flow_addr)
|
||||
|
@ -137,9 +137,9 @@ void mf_read(void)
|
|||
}
|
||||
}
|
||||
|
||||
//清除累积流量
|
||||
//mf4700需要手动向累积流量寄存器写0
|
||||
//mf5003和mf5008需要先向写保护寄存器写入0xAA55关闭写保护,然后向指定寄存器写入0x0001清除累积流量
|
||||
//清除累积流量
|
||||
//mf4700需要手动向累积流量寄存器写0
|
||||
//mf5003和mf5008需要先向写保护寄存器写入0xAA55关闭写保护,然后向指定寄存器写入0x0001清除累积流量
|
||||
void mf_clear(void)
|
||||
{
|
||||
switch(flow_state)
|
||||
|
@ -185,13 +185,13 @@ void mf_clear(void)
|
|||
|
||||
void mf_rx_cb(void)
|
||||
{
|
||||
// 空闲中断,表明接收到了1帧所有的数据
|
||||
// 空闲中断,表明接收到了1帧所有的数据
|
||||
if(LL_USART_IsActiveFlag_IDLE(USART6))
|
||||
{
|
||||
//清除空闲中断
|
||||
//清除空闲中断
|
||||
LL_USART_ClearFlag_IDLE(USART6);
|
||||
int j = 0;
|
||||
//根据地址将数据分别存入不同的数组
|
||||
//根据地址将数据分别存入不同的数组
|
||||
if(usart6_rx_buf[0] == 0x01 && usart6_rx_buf[1] == 0x03)
|
||||
{
|
||||
for(j = 0;j < mf_cnt+1;j++)
|
||||
|
@ -221,11 +221,11 @@ void mf_rx_cb(void)
|
|||
|
||||
}
|
||||
|
||||
// Rx非空中断,表明接收到了一个字节
|
||||
// 读取Rx可自动清除中断标志位
|
||||
// Rx非空中断,表明接收到了一个字节
|
||||
// 读取Rx可自动清除中断标志位
|
||||
if(LL_USART_IsActiveFlag_RXNE(USART6))
|
||||
{
|
||||
// 如果数组长度大于设置的data最大长度,直接停止接收
|
||||
// 如果数组长度大于设置的data最大长度,直接停止接收
|
||||
if(mf_cnt > 50)
|
||||
mf_cnt = 0; // wait for the next data
|
||||
usart6_rx_buf[mf_cnt] = LL_USART_ReceiveData8(USART6);
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#include "mf5803.h"
|
||||
|
||||
/*
|
||||
** 返回值 : temp--SPI读取的一字节数据
|
||||
** 描 述 : 下降沿读数据,每次读取 1 bit
|
||||
** 返回值 : temp--SPI读取的一字节数据
|
||||
** 描 述 : 下降沿读数据,每次读取 1 bit
|
||||
*/
|
||||
uint8_t SPI_Read_OneByte(void)
|
||||
{
|
||||
|
@ -10,12 +10,12 @@ uint8_t SPI_Read_OneByte(void)
|
|||
uint8_t temp = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
//读取MISO 8次输入的值,存入temp。之所以不放在“SCK = 0”语句之后的位置是因为:
|
||||
//读取最后1byte的最后一位(即LSB)之后,不能再左移了
|
||||
//读取MISO 8次输入的值,存入temp。之所以不放在“SCK = 0”语句之后的位置是因为:
|
||||
//读取最后1byte的最后一位(即LSB)之后,不能再左移了
|
||||
temp <<= 1;
|
||||
MF5803_SCK(1);
|
||||
delay_tick(10);
|
||||
if(MF5803_MISO) //读取最高位,保存至最末尾,通过左移位完成读整个字节
|
||||
if(MF5803_MISO) //读取最高位,保存至最末尾,通过左移位完成读整个字节
|
||||
temp |= 0x01;
|
||||
else
|
||||
temp &= ~0x01;
|
||||
|
@ -27,8 +27,8 @@ uint8_t SPI_Read_OneByte(void)
|
|||
}
|
||||
|
||||
/*
|
||||
** 参 数 : u8_writedata--SPI写入的一字节数据
|
||||
** 描 述 : 上升沿写数据,每次写入 1 bit
|
||||
** 参 数 : u8_writedata--SPI写入的一字节数据
|
||||
** 描 述 : 上升沿写数据,每次写入 1 bit
|
||||
*/
|
||||
void SPI_Write_OneByte(uint8_t u8_writedata)
|
||||
{
|
||||
|
@ -36,25 +36,25 @@ void SPI_Write_OneByte(uint8_t u8_writedata)
|
|||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
delay_tick(10);
|
||||
if (u8_writedata & 0x80) //判断最高位,总是发送最高位
|
||||
if (u8_writedata & 0x80) //判断最高位,总是发送最高位
|
||||
{
|
||||
MF5803_MOSI(1); //MOSI输出1,数据总线准备数据1
|
||||
MF5803_MOSI(1); //MOSI输出1,数据总线准备数据1
|
||||
}
|
||||
else
|
||||
{
|
||||
MF5803_MOSI(0);//MOSI输出0,数据总线准备数据0
|
||||
MF5803_MOSI(0);//MOSI输出0,数据总线准备数据0
|
||||
}
|
||||
MF5803_SCK(1); //上升沿来了(SCK从0-->1),数据总线上的数据写入到器件
|
||||
MF5803_SCK(1); //上升沿来了(SCK从0-->1),数据总线上的数据写入到器件
|
||||
delay_tick(10);
|
||||
u8_writedata <<= 1; //左移抛弃已经输出的最高位
|
||||
MF5803_SCK(0); //拉低SCK信号,初始化为0
|
||||
u8_writedata <<= 1; //左移抛弃已经输出的最高位
|
||||
MF5803_SCK(0); //拉低SCK信号,初始化为0
|
||||
delay_tick(10);
|
||||
}
|
||||
}
|
||||
/*
|
||||
** 返回值 : u8_readdata--SPI读取的一字节数据
|
||||
** 参 数 : u8_writedata--SPI写入的一字节数据
|
||||
** 描 述 : 上升沿写,下降沿读
|
||||
** 返回值 : u8_readdata--SPI读取的一字节数据
|
||||
** 参 数 : u8_writedata--SPI写入的一字节数据
|
||||
** 描 述 : 上升沿写,下降沿读
|
||||
*/
|
||||
uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata)
|
||||
{
|
||||
|
@ -62,18 +62,18 @@ uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata)
|
|||
uint8_t u8_readdata = 0x00;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
u8_readdata <<= 1;//读取MISO 8次输入的值,存入u8_readdata
|
||||
if (u8_writedata & 0x80)//判断最高位,总是写最高位(输出最高位)
|
||||
MF5803_MOSI(1);//MOSI输出1,数据总线准备数据1
|
||||
u8_readdata <<= 1;//读取MISO 8次输入的值,存入u8_readdata
|
||||
if (u8_writedata & 0x80)//判断最高位,总是写最高位(输出最高位)
|
||||
MF5803_MOSI(1);//MOSI输出1,数据总线准备数据1
|
||||
else
|
||||
MF5803_MOSI(0);//MOSI输出0,数据总线准备数据0
|
||||
u8_writedata <<= 1;//左移抛弃已经输出的最高位
|
||||
MF5803_SCK(1);//上升沿来了(SCK从0-->1),数据总线上的数据写入器件
|
||||
if(MF5803_MISO)//读取最高位,保存至最末尾,通过左移位完成读整个字节
|
||||
MF5803_MOSI(0);//MOSI输出0,数据总线准备数据0
|
||||
u8_writedata <<= 1;//左移抛弃已经输出的最高位
|
||||
MF5803_SCK(1);//上升沿来了(SCK从0-->1),数据总线上的数据写入器件
|
||||
if(MF5803_MISO)//读取最高位,保存至最末尾,通过左移位完成读整个字节
|
||||
u8_readdata |= 0x01;
|
||||
else
|
||||
u8_readdata &= ~0x01;
|
||||
MF5803_SCK(0);//下降沿来了(SCK从1-->0),MISO上将产生新的数据,读取存入u8——readdata
|
||||
MF5803_SCK(0);//下降沿来了(SCK从1-->0),MISO上将产生新的数据,读取存入u8——readdata
|
||||
}
|
||||
return u8_readdata;
|
||||
}
|
||||
|
@ -82,15 +82,15 @@ uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata)
|
|||
uint8_t RawData[5];
|
||||
uint8_t* GetSensorData()
|
||||
{
|
||||
//重置清0
|
||||
//重置清0
|
||||
memset(RawData, 0, sizeof(uint8_t) * 5);
|
||||
//采集温度数据
|
||||
//采集温度数据
|
||||
wf5803_WriteReg(0x30, 0x08);
|
||||
delay_ms(2);
|
||||
RawData[3] = wf5803_ReadReg(0x09);
|
||||
RawData[4] = wf5803_ReadReg(0x0A);
|
||||
|
||||
//采集气压数据
|
||||
//采集气压数据
|
||||
wf5803_WriteReg(0x30, 0x09);
|
||||
delay_ms(3);
|
||||
RawData[0] = wf5803_ReadReg(0x06);
|
||||
|
@ -101,60 +101,60 @@ uint8_t* GetSensorData()
|
|||
}
|
||||
|
||||
/*
|
||||
** 参 数 : (1)uint8_t addr--寄存器地址
|
||||
** (2)uint8_t value--写入值
|
||||
** 说 明 : wf5803寄存器写函数
|
||||
** 参 数 : (1)uint8_t addr--寄存器地址
|
||||
** (2)uint8_t value--写入值
|
||||
** 说 明 : wf5803寄存器写函数
|
||||
*/
|
||||
void wf5803_WriteReg(uint8_t addr, uint8_t value)
|
||||
{
|
||||
clrcs();//CS片选拉低
|
||||
SPI_Write_OneByte(0x00);//SPI写地址命令
|
||||
clrcs();//CS片选拉低
|
||||
SPI_Write_OneByte(0x00);//SPI写地址命令
|
||||
SPI_Write_OneByte(addr);
|
||||
SPI_Write_OneByte(value);//SPI写数据
|
||||
setcs();//CS片选拉高
|
||||
SPI_Write_OneByte(value);//SPI写数据
|
||||
setcs();//CS片选拉高
|
||||
}
|
||||
|
||||
/*
|
||||
** 返回值: value--读取寄存器值
|
||||
** 参 数 : addr--寄存器地址
|
||||
** 说 明 : wf5803寄存器读函数
|
||||
** 返回值: value--读取寄存器值
|
||||
** 参 数 : addr--寄存器地址
|
||||
** 说 明 : wf5803寄存器读函数
|
||||
*/
|
||||
uint8_t wf5803_ReadReg(uint8_t addr)
|
||||
{
|
||||
uint8_t value;
|
||||
clrcs();//CS片选拉低
|
||||
SPI_Write_OneByte(0x80);//SPI写地址命令
|
||||
clrcs();//CS片选拉低
|
||||
SPI_Write_OneByte(0x80);//SPI写地址命令
|
||||
SPI_Write_OneByte(addr);
|
||||
value = SPI_Read_OneByte();//SPI读数据
|
||||
setcs();//CS片选拉高
|
||||
value = SPI_Read_OneByte();//SPI读数据
|
||||
setcs();//CS片选拉高
|
||||
return value;
|
||||
}
|
||||
|
||||
void wf5803_ReadRegMulti(uint8_t addr, uint8_t lens, uint8_t* value)
|
||||
{
|
||||
clrcs();//CS片选拉低
|
||||
clrcs();//CS片选拉低
|
||||
if (lens == 1)
|
||||
{
|
||||
SPI_Write_OneByte(0x80);//SPI写地址命令
|
||||
SPI_Write_OneByte(0x80);//SPI写地址命令
|
||||
}
|
||||
else if (lens == 2)
|
||||
{
|
||||
SPI_Write_OneByte(0xA0);//SPI写地址命令
|
||||
SPI_Write_OneByte(0xA0);//SPI写地址命令
|
||||
}
|
||||
else if (lens == 3)
|
||||
{
|
||||
SPI_Write_OneByte(0xC0);//SPI写地址命令
|
||||
SPI_Write_OneByte(0xC0);//SPI写地址命令
|
||||
}
|
||||
else
|
||||
{
|
||||
SPI_Write_OneByte(0xE0);//SPI写地址命令
|
||||
SPI_Write_OneByte(0xE0);//SPI写地址命令
|
||||
}
|
||||
SPI_Write_OneByte(addr);
|
||||
for (uint8_t i = 0; i < lens; i++)
|
||||
{
|
||||
value[i] = SPI_Read_OneByte();//SPI读数据
|
||||
value[i] = SPI_Read_OneByte();//SPI读数据
|
||||
}
|
||||
setcs();//CS片选拉高
|
||||
setcs();//CS片选拉高
|
||||
}
|
||||
|
||||
|
||||
|
@ -162,7 +162,7 @@ void wf5803_ReadRegMulti(uint8_t addr, uint8_t lens, uint8_t* value)
|
|||
void mf5803_setup()
|
||||
{
|
||||
|
||||
setcs();//CS片选拉高
|
||||
setcs();//CS片选拉高
|
||||
|
||||
SENSOR_SELECT(0);
|
||||
delay_ms(10);
|
||||
|
@ -202,7 +202,7 @@ void mf5803_setup()
|
|||
|
||||
long reading = 0;
|
||||
float press = 0; //kPa
|
||||
float temp = 0; //℃
|
||||
float temp = 0; //℃
|
||||
float fDat;
|
||||
uint8_t flt_cnt = 0;
|
||||
float p_flt_window[6][20] = {0}; //sliding window, sensor_1&2 -> pressure[A,B,S]
|
||||
|
@ -223,9 +223,9 @@ void mf5803_loop()
|
|||
{
|
||||
fDat = reading / 8388608.0f;
|
||||
}
|
||||
press = (10000 * fDat + 9000) / 12.0f; //单位0.1Kpa
|
||||
press = (10000 * fDat + 9000) / 12.0f; //单位0.1Kpa
|
||||
|
||||
p_flt_window[ NSS_Select -1 ][flt_cnt] = press*10; //滑动窗口记录
|
||||
p_flt_window[ NSS_Select -1 ][flt_cnt] = press*10; //滑动窗口记录
|
||||
|
||||
NSS_Select++;
|
||||
|
||||
|
@ -233,11 +233,11 @@ void mf5803_loop()
|
|||
{
|
||||
SENSOR_SELECT(1);
|
||||
}
|
||||
if(NSS_Select > 6) //记录完6路气压后进入此处,每6*10ms
|
||||
if(NSS_Select > 6) //记录完6路气压后进入此处,每6*10ms
|
||||
{
|
||||
NSS_Select = 1;
|
||||
|
||||
for( uint8_t i = 0; i < 6; i++ ) //均值滤波
|
||||
for( uint8_t i = 0; i < 6; i++ ) //均值滤波
|
||||
{
|
||||
sums = 0;
|
||||
for( uint8_t j = 0; j < 20; j++ )
|
||||
|
@ -247,7 +247,7 @@ void mf5803_loop()
|
|||
InputReg[ 13 + i ] = sums/20; //InputReg[13]~InputReg[18]
|
||||
}
|
||||
flt_cnt++;
|
||||
if(flt_cnt > 19) //滑动窗口长度20,循环记录
|
||||
if(flt_cnt > 19) //滑动窗口长度20,循环记录
|
||||
{
|
||||
flt_cnt = 0;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ uint8_t aRxBuffer[4];
|
|||
|
||||
uint8_t NSS_Select = 1;
|
||||
|
||||
//拉高所有片选脚
|
||||
//拉高所有片选脚
|
||||
void setcs(void)
|
||||
{
|
||||
HAL_GPIO_WritePin(MS5803_NSS1_GPIO_Port,MS5803_NSS1_Pin,GPIO_PIN_SET);
|
||||
|
@ -57,10 +57,10 @@ void clrcs(void)
|
|||
}
|
||||
|
||||
/************************************************
|
||||
函数名称 : Write_SPI_Byte
|
||||
功 能 : SPI写一个字节
|
||||
参 数 : Byte ---- 数据
|
||||
返 回 值 : Byte ---- 数据
|
||||
函数名称 : Write_SPI_Byte
|
||||
功 能 : SPI写一个字节
|
||||
参 数 : Byte ---- 数据
|
||||
返 回 值 : Byte ---- 数据
|
||||
*************************************************/
|
||||
uint8_t ms5803_write_byte( uint8_t Byte )
|
||||
{
|
||||
|
@ -69,7 +69,7 @@ uint8_t ms5803_write_byte( uint8_t Byte )
|
|||
for(i = 0;i < 8;i++)
|
||||
{
|
||||
MS5803_SCK(0);
|
||||
delay_us(1); // 空等待
|
||||
delay_us(1); // 空等待
|
||||
|
||||
if(Byte & 0x80)
|
||||
{
|
||||
|
@ -81,9 +81,9 @@ uint8_t ms5803_write_byte( uint8_t Byte )
|
|||
}
|
||||
|
||||
Byte <<= 1;
|
||||
delay_us(1); // 空等待
|
||||
delay_us(1); // 空等待
|
||||
MS5803_SCK(1);
|
||||
delay_us(1); // 空等待
|
||||
delay_us(1); // 空等待
|
||||
Byte |= MS5803_MISO;
|
||||
}
|
||||
|
||||
|
@ -93,10 +93,10 @@ uint8_t ms5803_write_byte( uint8_t Byte )
|
|||
}
|
||||
|
||||
/************************************************
|
||||
函数名称 : Read_SPI_Byte
|
||||
功 能 : SPI只读一个字节
|
||||
参 数 : 无
|
||||
返 回 值 : temp ---- 数据
|
||||
函数名称 : Read_SPI_Byte
|
||||
功 能 : SPI只读一个字节
|
||||
参 数 : 无
|
||||
返 回 值 : temp ---- 数据
|
||||
*************************************************/
|
||||
uint8_t ms5803_read_byte(void)
|
||||
{
|
||||
|
@ -106,14 +106,14 @@ uint8_t ms5803_read_byte(void)
|
|||
for(i = 0;i < 8;i++)
|
||||
{
|
||||
MS5803_SCK(0);
|
||||
delay_us(1); // 空等待
|
||||
delay_us(1); // 空等待
|
||||
temp <<= 1;
|
||||
|
||||
temp |= MS5803_MISO;
|
||||
|
||||
//delay_us(1); // 空等待
|
||||
//delay_us(1); // 空等待
|
||||
MS5803_SCK(1);
|
||||
delay_us(1); // 空等待
|
||||
delay_us(1); // 空等待
|
||||
}
|
||||
|
||||
MS5803_SCK(0);
|
||||
|
@ -122,9 +122,9 @@ uint8_t ms5803_read_byte(void)
|
|||
}
|
||||
|
||||
//****************************************
|
||||
//*功能:向MS5803写入命令
|
||||
//*参数:CMD
|
||||
//*返回:True/False
|
||||
//*功能:向MS5803写入命令
|
||||
//*参数:CMD
|
||||
//*返回:True/False
|
||||
|
||||
static int writecmd(uint8_t CMD)
|
||||
{
|
||||
|
@ -141,9 +141,9 @@ static int writecmd(uint8_t CMD)
|
|||
}
|
||||
|
||||
//****************************************
|
||||
//*功能:根据指令从MS5803读相应数据
|
||||
//*参数:CMD,Count
|
||||
//*返回:True/False
|
||||
//*功能:根据指令从MS5803读相应数据
|
||||
//*参数:CMD,Count
|
||||
//*返回:True/False
|
||||
|
||||
static int readcmddata(uint8_t CMD,uint8_t Count)
|
||||
{
|
||||
|
@ -165,20 +165,20 @@ static int readcmddata(uint8_t CMD,uint8_t Count)
|
|||
}
|
||||
|
||||
//****************************************
|
||||
//*功能:复位MS5803
|
||||
//*参数:
|
||||
//*返回:
|
||||
//*功能:复位MS5803
|
||||
//*参数:
|
||||
//*返回:
|
||||
|
||||
static void resetdevice()
|
||||
{
|
||||
writecmd(RESET);
|
||||
delay_ms(3); //必须延时3ms
|
||||
delay_ms(3); //必须延时3ms
|
||||
}
|
||||
|
||||
//****************************************
|
||||
//*功能:获取PROM校准参数,只需要获取一次
|
||||
//*参数:
|
||||
//*返回:
|
||||
//*功能:获取PROM校准参数,只需要获取一次
|
||||
//*参数:
|
||||
//*返回:
|
||||
|
||||
static void getpromdata()
|
||||
{
|
||||
|
@ -208,9 +208,9 @@ static void getpromdata()
|
|||
}
|
||||
|
||||
//****************************************
|
||||
//*功能:MS5803初始化
|
||||
//*参数:
|
||||
//*返回:
|
||||
//*功能:MS5803初始化
|
||||
//*参数:
|
||||
//*返回:
|
||||
|
||||
void ms5803_init()
|
||||
{
|
||||
|
@ -220,19 +220,19 @@ void ms5803_init()
|
|||
|
||||
NSS_Select = 1;
|
||||
delay_tick(10);
|
||||
//初始化代码
|
||||
//初始化代码
|
||||
resetdevice();
|
||||
getpromdata();
|
||||
|
||||
NSS_Select = 2;
|
||||
delay_tick(10);
|
||||
//初始化代码
|
||||
//初始化代码
|
||||
resetdevice();
|
||||
getpromdata();
|
||||
|
||||
NSS_Select = 3;
|
||||
delay_tick(10);
|
||||
//初始化代码
|
||||
//初始化代码
|
||||
resetdevice();
|
||||
getpromdata();
|
||||
|
||||
|
@ -240,28 +240,28 @@ void ms5803_init()
|
|||
|
||||
NSS_Select = 4;
|
||||
delay_tick(10);
|
||||
//初始化代码
|
||||
//初始化代码
|
||||
resetdevice();
|
||||
getpromdata();
|
||||
|
||||
NSS_Select = 5;
|
||||
delay_tick(10);
|
||||
//初始化代码
|
||||
//初始化代码
|
||||
resetdevice();
|
||||
getpromdata();
|
||||
|
||||
NSS_Select = 6;
|
||||
delay_tick(10);
|
||||
//初始化代码
|
||||
//初始化代码
|
||||
resetdevice();
|
||||
getpromdata();
|
||||
|
||||
}
|
||||
|
||||
//****************************************
|
||||
//*功能:获取温度和压力 MS5803-14BA
|
||||
//*参数:
|
||||
//*返回:
|
||||
//*功能:获取温度和压力 MS5803-14BA
|
||||
//*参数:
|
||||
//*返回:
|
||||
|
||||
void start_calculation()
|
||||
{
|
||||
|
@ -271,19 +271,19 @@ void start_calculation()
|
|||
int64_t OFF,SENS;
|
||||
|
||||
|
||||
//转换压力
|
||||
//转换压力
|
||||
writecmd(CD1_256);
|
||||
delay_ms(1); //必须延时1ms
|
||||
delay_ms(1); //必须延时1ms
|
||||
readcmddata(ADC_Read,3);
|
||||
D1 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0];
|
||||
|
||||
//转换温度
|
||||
//转换温度
|
||||
writecmd(CD2_256);
|
||||
delay_ms(1); //必须延时1ms
|
||||
delay_ms(1); //必须延时1ms
|
||||
readcmddata(ADC_Read,3);
|
||||
D2 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0];
|
||||
|
||||
//计算温度
|
||||
//计算温度
|
||||
dT = D2 - (PROMData.C5[NSS_Select] * pow(2,8));
|
||||
|
||||
if(dT > 16777216)
|
||||
|
@ -297,7 +297,7 @@ void start_calculation()
|
|||
|
||||
TEMP = 2000 + ((((long long)dT) * PROMData.C6[NSS_Select]) / pow(2,23));
|
||||
|
||||
//计算压力
|
||||
//计算压力
|
||||
OFF = (PROMData.C2[NSS_Select] * pow(2,16)) + ((((long long)dT) * PROMData.C4[NSS_Select]) / pow(2,7));
|
||||
if(OFF > 51538821120)
|
||||
{
|
||||
|
@ -364,7 +364,7 @@ void ms5803_task(void)
|
|||
NSS_Select = 1;
|
||||
}
|
||||
start_calculation();
|
||||
InputReg[NSS_Select + 12] = CurrentPress / 10;//压力数据存入
|
||||
InputReg[NSS_Select + 12] = CurrentPress / 10;//压力数据存入
|
||||
NSS_Select++;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
#include "modbus.h"
|
||||
|
||||
uint8_t CoilState[(MAX_COIL_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00}; //线圈寄存器
|
||||
uint8_t DisState[(MAX_DIS_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00,0x00}; //离散量寄存器
|
||||
uint16_t InputReg[MAX_INPUT_REG_NUM] = {0x0000,0x0000,0x0000,0x0000}; //输入寄存器
|
||||
uint16_t HoldReg[MAX_HOLD_REG_NUM] = {0,0,0,0x0064}; //保持寄存器
|
||||
uint8_t CoilState[(MAX_COIL_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00}; //线圈寄存器
|
||||
uint8_t DisState[(MAX_DIS_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00,0x00}; //离散量寄存器
|
||||
uint16_t InputReg[MAX_INPUT_REG_NUM] = {0x0000,0x0000,0x0000,0x0000}; //输入寄存器
|
||||
uint16_t HoldReg[MAX_HOLD_REG_NUM] = {0,0,0,0x0064}; //保持寄存器
|
||||
|
||||
Var_Reg SamVarReg;
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ModbusCRC16
|
||||
功 能 : CRC校验
|
||||
参 数 : ptr--校验数组指针 len--校验数据长度
|
||||
返 回 值 : CRC校验码,双字节
|
||||
函数名称 : ModbusCRC16
|
||||
功 能 : CRC校验
|
||||
参 数 : ptr--校验数组指针 len--校验数据长度
|
||||
返 回 值 : CRC校验码,双字节
|
||||
*******************************************************************************/
|
||||
uint16_t ModbusCRC16(uint8_t *ptr, uint16_t len)
|
||||
{
|
||||
|
@ -70,10 +70,10 @@ void GetOneDisInputVal(uint16_t wDisInputAddr, uint8_t *pDisInputVal)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : GetHoldRegData
|
||||
功 能 : 获取RegAdd的数据
|
||||
参 数 : u16 RegAdd
|
||||
返 回 值 : 两字节寄存器数据
|
||||
函数名称 : GetHoldRegData
|
||||
功 能 : 获取RegAdd的数据
|
||||
参 数 : u16 RegAdd
|
||||
返 回 值 : 两字节寄存器数据
|
||||
*******************************************************************************/
|
||||
uint16_t GetHoldRegData(uint16_t RegAdd)
|
||||
{
|
||||
|
@ -85,10 +85,10 @@ uint16_t GetHoldRegData(uint16_t RegAdd)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : GetInputRegData
|
||||
功 能 : 获取RegAdd的数据
|
||||
参 数 : u16 RegAdd
|
||||
返 回 值 : 两字节寄存器数据
|
||||
函数名称 : GetInputRegData
|
||||
功 能 : 获取RegAdd的数据
|
||||
参 数 : u16 RegAdd
|
||||
返 回 值 : 两字节寄存器数据
|
||||
*******************************************************************************/
|
||||
uint16_t GetInputRegData(uint16_t RegAdd)
|
||||
{
|
||||
|
@ -100,10 +100,10 @@ uint16_t GetInputRegData(uint16_t RegAdd)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteHoldRegData
|
||||
功 能 : 保存写入的保持寄存器数据
|
||||
参 数 : u16 StartAdd
|
||||
返 回 值 : 无
|
||||
函数名称 : WriteHoldRegData
|
||||
功 能 : 保存写入的保持寄存器数据
|
||||
参 数 : u16 StartAdd
|
||||
返 回 值 : 无
|
||||
*******************************************************************************/
|
||||
void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData)
|
||||
{
|
||||
|
@ -111,10 +111,10 @@ void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteOneCoilData
|
||||
功 能 : 保存写入的线圈寄存器数据
|
||||
参 数 : u16 StartAdd
|
||||
返 回 值 : 无
|
||||
函数名称 : WriteOneCoilData
|
||||
功 能 : 保存写入的线圈寄存器数据
|
||||
参 数 : u16 StartAdd
|
||||
返 回 值 : 无
|
||||
*******************************************************************************/
|
||||
void WriteOneCoilData(uint16_t wRegAddr, uint16_t RegData)
|
||||
{
|
||||
|
|
|
@ -2,49 +2,49 @@
|
|||
|
||||
void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode);
|
||||
|
||||
uint8_t uart1_rx_buf[UART1_RXSIZE]; //发送数据缓冲数组
|
||||
uint8_t uart1_tx_buf[UART1_TXSIZE]; //接收数据缓冲数据
|
||||
uint8_t uart1_rx_buf[UART1_RXSIZE]; //发送数据缓冲数组
|
||||
uint8_t uart1_tx_buf[UART1_TXSIZE]; //接收数据缓冲数据
|
||||
|
||||
void modbus_rtu_init(void)
|
||||
{
|
||||
MODBUS_UART.rx_buf = uart1_rx_buf; //接收数据变量初始化
|
||||
MODBUS_UART.rx_buf = uart1_rx_buf; //接收数据变量初始化
|
||||
MODBUS_UART.rx_buf_cnt = 0;
|
||||
MODBUS_UART.rx_size = 0;
|
||||
MODBUS_UART.rx_flag = 0;
|
||||
|
||||
MODBUS_UART.tx_buf = uart1_tx_buf; //发送数据变量初始化
|
||||
MODBUS_UART.tx_buf = uart1_tx_buf; //发送数据变量初始化
|
||||
MODBUS_UART.tx_buf_cnt = UART1_TXSIZE;
|
||||
MODBUS_UART.tx_size = 0;
|
||||
|
||||
HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1); //开启接收中断
|
||||
__HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE); //手动添加
|
||||
HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1); //开启接收中断
|
||||
__HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE); //手动添加
|
||||
HAL_TIM_Base_Start_IT(&MODBUS_HTIM);
|
||||
}
|
||||
|
||||
void modbus_rx_cb(void)
|
||||
{
|
||||
if(uart1.rx_buf_cnt >= UART1_RXSIZE-1) //接收数据量超限,错误
|
||||
if(uart1.rx_buf_cnt >= UART1_RXSIZE-1) //接收数据量超限,错误
|
||||
{
|
||||
MODBUS_UART.rx_buf_cnt = 0;
|
||||
memset(MODBUS_UART.rx_buf, 0x00, sizeof(&MODBUS_UART.rx_buf));
|
||||
HAL_UART_Transmit(&MODBUS_HUART, (uint8_t *)"数据溢出", 10, 0xFFFF);
|
||||
HAL_UART_Transmit(&MODBUS_HUART, (uint8_t *)"数据溢出", 10, 0xFFFF);
|
||||
}
|
||||
else //接收正常
|
||||
else //接收正常
|
||||
{
|
||||
uart1.rx_buf[MODBUS_UART.rx_buf_cnt++] = RxBuffer; //接收数据存储到rx_buf
|
||||
uart1.rx_buf[MODBUS_UART.rx_buf_cnt++] = RxBuffer; //接收数据存储到rx_buf
|
||||
HAL_TIM_Base_Stop_IT(&MODBUS_HTIM);
|
||||
__HAL_TIM_SET_COUNTER(&MODBUS_HTIM, 0);
|
||||
HAL_TIM_Base_Start_IT(&MODBUS_HTIM); //将定时器7的计数值清零后重新计数
|
||||
HAL_TIM_Base_Start_IT(&MODBUS_HTIM); //将定时器7的计数值清零后重新计数
|
||||
}
|
||||
HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1);
|
||||
}
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadCoilStateFUNC
|
||||
功 能 : 功能码:0x01,读取线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][01][线圈起始地址高][线圈起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][01][字节长度][线圈值][线圈值][线圈值][CRC低][CRC高]
|
||||
函数名称 : ReadCoilStateFUNC
|
||||
功 能 : 功能码:0x01,读取线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][01][线圈起始地址高][线圈起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][01][字节长度][线圈值][线圈值][线圈值][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -52,15 +52,15 @@ void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t i,k,uCommIndexNum = 0,uByteCount,uCoilVal,uErrorCode,uExit = 0;
|
||||
uint8_t upTxdbuf[100] = {0};
|
||||
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
|
||||
if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM))
|
||||
{
|
||||
if(((wCoilStartAddr <= COIL_ADD_MAX)) &&
|
||||
(wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) &&
|
||||
{
|
||||
uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数
|
||||
uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数
|
||||
|
||||
upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS;
|
||||
upTxdbuf[uCommIndexNum ++] = ReadCoilState;
|
||||
|
@ -116,12 +116,12 @@ void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadDisInputStateFUNC
|
||||
功 能 : 功能码:0x02,读取离散量
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][02][离散量起始地址高][离散量起始地址低][离散量数量高][离散量数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][02][字节长度][离散量值][离散量值][离散量值][CRC低][CRC高]
|
||||
函数名称 : ReadDisInputStateFUNC
|
||||
功 能 : 功能码:0x02,读取离散量
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][02][离散量起始地址高][离散量起始地址低][离散量数量高][离散量数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][02][字节长度][离散量值][离散量值][离散量值][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -129,15 +129,15 @@ void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t i,k,uCommIndexNum = 0,uByteCount,uDisVal,uErrorCode,uExit = 0;
|
||||
uint8_t upTxdbuf[100];
|
||||
|
||||
wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址
|
||||
wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数
|
||||
wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址
|
||||
wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数
|
||||
|
||||
if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM))
|
||||
{
|
||||
if(((wDisStartAddr <= DIS_ADD_MAX)) &&
|
||||
(wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) &&
|
||||
{
|
||||
uByteCount = (wDisNum + 7) / 8; //返回数据字节个数
|
||||
uByteCount = (wDisNum + 7) / 8; //返回数据字节个数
|
||||
|
||||
upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS;
|
||||
upTxdbuf[uCommIndexNum ++] = ReadDisInputState;
|
||||
|
@ -193,12 +193,12 @@ void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadHoldRegFUNC
|
||||
功 能 : 功能码:0x03,读取保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高]
|
||||
*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高]
|
||||
函数名称 : ReadHoldRegFUNC
|
||||
功 能 : 功能码:0x03,读取保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高]
|
||||
*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -208,8 +208,8 @@ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
|
||||
if((wRegLen >= 0x01) && (wRegLen <= MAX_HOLD_REG_NUM))
|
||||
{
|
||||
|
@ -222,15 +222,15 @@ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
for(i = 0; i < wRegLen; i++)
|
||||
{
|
||||
//获取16位数据并返回
|
||||
//获取16位数据并返回
|
||||
wRegValue = GetHoldRegData(wRegStartAdd + i);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
|
||||
}
|
||||
|
||||
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
|
||||
|
||||
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt);
|
||||
memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size);
|
||||
|
@ -252,12 +252,12 @@ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadInputRegFUNC
|
||||
功 能 : 功能码:0x04,读取输入寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][04][起始地址高][起始地址低][总寄存器数高][总寄存器数低][ CRC低 ][ CRC高 ]
|
||||
*返回:[硬件地址][04][ 字节数 ][寄存器0高 ][ 寄存器0低 ][ 寄存器1高 ][ 寄存器1低 ][ 寄存器n高 ][ 寄存器n低 ][ CRC低 ][ CRC高 ]
|
||||
函数名称 : ReadInputRegFUNC
|
||||
功 能 : 功能码:0x04,读取输入寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][04][起始地址高][起始地址低][总寄存器数高][总寄存器数低][ CRC低 ][ CRC高 ]
|
||||
*返回:[硬件地址][04][ 字节数 ][寄存器0高 ][ 寄存器0低 ][ 寄存器1高 ][ 寄存器1低 ][ 寄存器n高 ][ 寄存器n低 ][ CRC低 ][ CRC高 ]
|
||||
*******************************************************************************/
|
||||
void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -267,8 +267,8 @@ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
|
||||
if((wRegLen >= 0x01) && (wRegLen <= MAX_INPUT_REG_NUM))
|
||||
{
|
||||
|
@ -281,15 +281,15 @@ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
for(i = 0; i < wRegLen; i++)
|
||||
{
|
||||
//获取16位数据并返回
|
||||
//获取16位数据并返回
|
||||
wRegValue = GetInputRegData(wRegStartAdd + i);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
|
||||
}
|
||||
|
||||
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
|
||||
|
||||
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt);
|
||||
memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size);
|
||||
|
@ -311,12 +311,12 @@ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteSingleRegFUNC
|
||||
功 能 : 功能码:0x06 预设(写)单寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
函数名称 : WriteSingleRegFUNC
|
||||
功 能 : 功能码:0x06 预设(写)单寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -326,8 +326,8 @@ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据
|
||||
wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据
|
||||
|
||||
if((wRegAddr <= HOLD_REG_ADD_MAX))//(wRegAddr >= HOLD_REG_ADD_MIN) &&
|
||||
{
|
||||
|
@ -339,8 +339,8 @@ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uCommIndexNum += 4;
|
||||
|
||||
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
|
||||
|
||||
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt);
|
||||
memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size);
|
||||
|
@ -356,10 +356,10 @@ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteMultiRegFUNC
|
||||
功 能 : 功能码:0x10 写多个保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
函数名称 : WriteMultiRegFUNC
|
||||
功 能 : 功能码:0x10 写多个保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*******************************************************************************/
|
||||
void writemultireg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -369,9 +369,9 @@ void writemultireg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
|
||||
if((wRegNum >= 0x01) && (wRegNum <= MAX_HOLD_REG_NUM) && (uByteNum == wRegNum * 2))
|
||||
{
|
||||
|
@ -413,10 +413,10 @@ void writemultireg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteSingleCoilFUNC
|
||||
功 能 : 功能码:0x05 写单个线圈寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
函数名称 : WriteSingleCoilFUNC
|
||||
功 能 : 功能码:0x05 写单个线圈寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*******************************************************************************/
|
||||
void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -424,8 +424,8 @@ void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t uCommIndexNum = 0, uErrorCode;
|
||||
uint8_t upTxdbuf[100];
|
||||
|
||||
wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据
|
||||
wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据
|
||||
|
||||
if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00))
|
||||
{
|
||||
|
@ -462,12 +462,12 @@ void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteMultiCoilFUNC
|
||||
功 能 : 功能码:0x0F,写多个线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][字节数][线圈值][CRC低][CRC高]
|
||||
*返回:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
函数名称 : WriteMultiCoilFUNC
|
||||
功 能 : 功能码:0x0F,写多个线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][字节数][线圈值][CRC低][CRC高]
|
||||
*返回:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void writemulticoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -475,9 +475,9 @@ void writemulticoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t i,k,uCommIndexNum = 0,uByteNum,uByteVal,uExit = 0,uErrorCode;
|
||||
uint8_t upTxdbuf[100];
|
||||
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
|
||||
if((wCoilNum >= 0x01) && (wCoilNum <= MAX_COIL_NUM) && (wCoilNum <= 8 * uByteNum))
|
||||
{
|
||||
|
@ -539,11 +539,11 @@ void writemulticoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
/********
|
||||
***********************************************************************
|
||||
函数名称 : MODBUS_ERRFunction
|
||||
功 能: 错误回应指令
|
||||
参 数: 无
|
||||
返 回 值: 无
|
||||
异常功能码 = 功能码+0x80
|
||||
函数名称 : MODBUS_ERRFunction
|
||||
功 能: 错误回应指令
|
||||
参 数: 无
|
||||
返 回 值: 无
|
||||
异常功能码 = 功能码+0x80
|
||||
*******************************************************************************/
|
||||
void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode)
|
||||
{
|
||||
|
@ -556,7 +556,7 @@ void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode)
|
|||
upTxdbuf[uCommIndexNum ++] = uErrorCode;
|
||||
|
||||
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); //crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); //crc16低字节在前
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8);
|
||||
|
||||
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt);
|
||||
|
@ -565,10 +565,10 @@ void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : Modbus_Analysis
|
||||
功 能 : CRC校验
|
||||
参 数 : ptr--校验数组指针 len--校验数据长度
|
||||
返 回 值 : CRC校验码,双字节
|
||||
函数名称 : Modbus_Analysis
|
||||
功 能 : CRC校验
|
||||
参 数 : ptr--校验数组指针 len--校验数据长度
|
||||
返 回 值 : CRC校验码,双字节
|
||||
*******************************************************************************/
|
||||
void modbus_analysis_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -579,45 +579,45 @@ void modbus_analysis_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uSlaveAdd = upRxdbuf[0];
|
||||
uCmdCode = upRxdbuf[1];
|
||||
|
||||
// 从机地址为本机地址或者是广播帧
|
||||
// 从机地址为本机地址或者是广播帧
|
||||
if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS))
|
||||
{
|
||||
switch(uCmdCode)
|
||||
{
|
||||
case ReadCoilState:
|
||||
readcoilstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读线圈状态, read&write binary
|
||||
readcoilstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读线圈状态, read&write binary
|
||||
break;
|
||||
|
||||
case ReadDisInputState:
|
||||
readdisinputstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读离散输入状态, only read
|
||||
readdisinputstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读离散输入状态, only read
|
||||
break;
|
||||
|
||||
case ReadHoldReg:
|
||||
readholdreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取保持寄存器, read&write u16
|
||||
readholdreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取保持寄存器, read&write u16
|
||||
break;
|
||||
|
||||
case ReadInputReg:
|
||||
readinputreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取输入寄存器
|
||||
readinputreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取输入寄存器
|
||||
break;
|
||||
|
||||
case WriteSingleReg:
|
||||
writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个寄存器
|
||||
writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个寄存器
|
||||
break;
|
||||
|
||||
case WriteMultiCoil:
|
||||
writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个线圈
|
||||
writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个线圈
|
||||
break;
|
||||
|
||||
case WriteMultiReg:
|
||||
writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个寄存器
|
||||
writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个寄存器
|
||||
break;
|
||||
|
||||
case WriteSingleCoil:
|
||||
writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个线圈
|
||||
writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个线圈
|
||||
break;
|
||||
|
||||
default:
|
||||
modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 错误码处理
|
||||
modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 错误码处理
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -629,18 +629,18 @@ void modbus_process_rtu(void)
|
|||
uint16_t wFrameLen = 0;
|
||||
uint16_t wFrameCRC, wCalCRC;
|
||||
|
||||
pFrame = MODBUS_UART.rx_buf; // 接收数据起始地址
|
||||
wFrameLen = MODBUS_UART.rx_size; // 接收数据长度
|
||||
pFrame = MODBUS_UART.rx_buf; // 接收数据起始地址
|
||||
wFrameLen = MODBUS_UART.rx_size; // 接收数据长度
|
||||
|
||||
if(wFrameLen < 2) return; // 数据长度不是有效值
|
||||
if(wFrameLen < 2) return; // 数据长度不是有效值
|
||||
|
||||
// 获取接收数据帧中的校验和
|
||||
// 获取接收数据帧中的校验和
|
||||
wFrameCRC = MAKEWORD(pFrame[wFrameLen - 2], pFrame[wFrameLen - 1]);
|
||||
// 计算接收到的数据的校验和
|
||||
// 计算接收到的数据的校验和
|
||||
wCalCRC = ModbusCRC16(pFrame, wFrameLen - 2);
|
||||
if(wFrameCRC != wCalCRC) return;
|
||||
|
||||
modbus_analysis_rtu(MODBUS_UART.rx_buf, MODBUS_UART.rx_size);// 协议处理
|
||||
modbus_analysis_rtu(MODBUS_UART.rx_buf, MODBUS_UART.rx_size);// 协议处理
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode);
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadCoilStateFUNC
|
||||
功 能 : 功能码:0x01,读取线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][01][线圈起始地址高][线圈起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][01][字节长度][线圈值][线圈值][线圈值][CRC低][CRC高]
|
||||
函数名称 : ReadCoilStateFUNC
|
||||
功 能 : 功能码:0x01,读取线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][01][线圈起始地址高][线圈起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][01][字节长度][线圈值][线圈值][线圈值][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -19,15 +19,15 @@ void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t i,k,uCommIndexNum = 0,uByteCount,uCoilVal,uErrorCode,uExit = 0;
|
||||
uint8_t upTxdbuf[100] = {0};
|
||||
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
|
||||
if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM))
|
||||
{
|
||||
if(((wCoilStartAddr <= COIL_ADD_MAX)) &&
|
||||
(wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) &&
|
||||
{
|
||||
uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数
|
||||
uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数
|
||||
|
||||
upTxdbuf[uCommIndexNum ++] = 0x00;
|
||||
upTxdbuf[uCommIndexNum ++] = 0x01;
|
||||
|
@ -84,12 +84,12 @@ void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadDisInputStateFUNC
|
||||
功 能 : 功能码:0x02,读取离散量
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][02][离散量起始地址高][离散量起始地址低][离散量数量高][离散量数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][02][字节长度][离散量值][离散量值][离散量值][CRC低][CRC高]
|
||||
函数名称 : ReadDisInputStateFUNC
|
||||
功 能 : 功能码:0x02,读取离散量
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][02][离散量起始地址高][离散量起始地址低][离散量数量高][离散量数量低][CRC低][CRC高]
|
||||
*返回:[硬件地址][02][字节长度][离散量值][离散量值][离散量值][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -97,15 +97,15 @@ void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t i,k,uCommIndexNum = 0,uByteCount,uDisVal,uErrorCode,uExit = 0;
|
||||
uint8_t upTxdbuf[100];
|
||||
|
||||
wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址
|
||||
wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数
|
||||
wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址
|
||||
wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数
|
||||
|
||||
if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM))
|
||||
{
|
||||
if(((wDisStartAddr <= DIS_ADD_MAX)) &&
|
||||
(wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) &&
|
||||
{
|
||||
uByteCount = (wDisNum + 7) / 8; //返回数据字节个数
|
||||
uByteCount = (wDisNum + 7) / 8; //返回数据字节个数
|
||||
|
||||
upTxdbuf[uCommIndexNum ++] = 0x00;
|
||||
upTxdbuf[uCommIndexNum ++] = 0x01;
|
||||
|
@ -162,12 +162,12 @@ void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadHoldRegFUNC
|
||||
功 能 : 功能码:0x03,读取保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高]
|
||||
*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高]
|
||||
函数名称 : ReadHoldRegFUNC
|
||||
功 能 : 功能码:0x03,读取保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高]
|
||||
*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -177,8 +177,8 @@ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
|
||||
if((wRegLen >= 0x01) && (wRegLen <= MAX_HOLD_REG_NUM))
|
||||
{
|
||||
|
@ -197,7 +197,7 @@ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
for(i = 0; i < wRegLen; i++)
|
||||
{
|
||||
//获取16位数据并返回
|
||||
//获取16位数据并返回
|
||||
wRegValue = GetHoldRegData(wRegStartAdd + i);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
|
||||
|
@ -223,12 +223,12 @@ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : ReadInputRegFUNC
|
||||
功 能 : 功能码:0x04,读取输入寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][04][起始地址高][起始地址低][总寄存器数高][总寄存器数低][ CRC低 ][ CRC高 ]
|
||||
*返回:[硬件地址][04][ 字节数 ][寄存器0高 ][ 寄存器0低 ][ 寄存器1高 ][ 寄存器1低 ][ 寄存器n高 ][ 寄存器n低 ][ CRC低 ][ CRC高 ]
|
||||
函数名称 : ReadInputRegFUNC
|
||||
功 能 : 功能码:0x04,读取输入寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][04][起始地址高][起始地址低][总寄存器数高][总寄存器数低][ CRC低 ][ CRC高 ]
|
||||
*返回:[硬件地址][04][ 字节数 ][寄存器0高 ][ 寄存器0低 ][ 寄存器1高 ][ 寄存器1低 ][ 寄存器n高 ][ 寄存器n低 ][ CRC低 ][ CRC高 ]
|
||||
*******************************************************************************/
|
||||
void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -238,8 +238,8 @@ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
|
||||
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
|
||||
|
||||
if((wRegLen >= 0x01) && (wRegLen <= MAX_INPUT_REG_NUM))
|
||||
{
|
||||
|
@ -258,7 +258,7 @@ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
for(i = 0; i < wRegLen; i++)
|
||||
{
|
||||
//获取16位数据并返回
|
||||
//获取16位数据并返回
|
||||
wRegValue = GetInputRegData(wRegStartAdd + i);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
|
||||
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
|
||||
|
@ -284,12 +284,12 @@ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteSingleRegFUNC
|
||||
功 能 : 功能码:0x06 预设(写)单寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
函数名称 : WriteSingleRegFUNC
|
||||
功 能 : 功能码:0x06 预设(写)单寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void writesinglereg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -299,8 +299,8 @@ void writesinglereg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据
|
||||
wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据
|
||||
|
||||
if((wRegAddr <= HOLD_REG_ADD_MAX))//(wRegAddr >= HOLD_REG_ADD_MIN) &&
|
||||
{
|
||||
|
@ -331,10 +331,10 @@ void writesinglereg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteMultiRegFUNC
|
||||
功 能 : 功能码:0x10 写多个保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
函数名称 : WriteMultiRegFUNC
|
||||
功 能 : 功能码:0x10 写多个保持寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*******************************************************************************/
|
||||
void writemultireg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -344,9 +344,9 @@ void writemultireg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
|
||||
if(upRxdbuf == NULL) return;
|
||||
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
|
||||
wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
|
||||
if((wRegNum >= 0x01) && (wRegNum <= MAX_HOLD_REG_NUM) && (uByteNum == wRegNum * 2))
|
||||
{
|
||||
|
@ -390,10 +390,10 @@ void writemultireg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteSingleCoilFUNC
|
||||
功 能 : 功能码:0x05 写单个线圈寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
函数名称 : WriteSingleCoilFUNC
|
||||
功 能 : 功能码:0x05 写单个线圈寄存器
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*******************************************************************************/
|
||||
void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -401,8 +401,8 @@ void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t uCommIndexNum = 0, uErrorCode;
|
||||
uint8_t upTxdbuf[100];
|
||||
|
||||
wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据
|
||||
wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据
|
||||
|
||||
if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00))
|
||||
{
|
||||
|
@ -441,12 +441,12 @@ void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : WriteMultiCoilFUNC
|
||||
功 能 : 功能码:0x0F,写多个线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][字节数][线圈值][CRC低][CRC高]
|
||||
*返回:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
函数名称 : WriteMultiCoilFUNC
|
||||
功 能 : 功能码:0x0F,写多个线圈
|
||||
参 数 : 无
|
||||
返 回 值 : 无
|
||||
*发送:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][字节数][线圈值][CRC低][CRC高]
|
||||
*返回:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][CRC低][CRC高]
|
||||
*******************************************************************************/
|
||||
void writemulticoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -454,9 +454,9 @@ void writemulticoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uint8_t i,k,uCommIndexNum = 0,uByteNum,uByteVal,uExit = 0,uErrorCode;
|
||||
uint8_t upTxdbuf[100];
|
||||
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
|
||||
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
|
||||
uByteNum = upRxdbuf[4]; //获取字节数
|
||||
|
||||
if((wCoilNum >= 0x01) && (wCoilNum <= MAX_COIL_NUM) && (wCoilNum <= 8 * uByteNum))
|
||||
{
|
||||
|
@ -519,11 +519,11 @@ void writemulticoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : MODBUS_ERRFunction
|
||||
功 能: 错误回应指令
|
||||
参 数: 无
|
||||
返 回 值: 无
|
||||
异常功能码 = 功能码+0x80
|
||||
函数名称 : MODBUS_ERRFunction
|
||||
功 能: 错误回应指令
|
||||
参 数: 无
|
||||
返 回 值: 无
|
||||
异常功能码 = 功能码+0x80
|
||||
*******************************************************************************/
|
||||
void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode)
|
||||
{
|
||||
|
@ -546,10 +546,10 @@ void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode)
|
|||
}
|
||||
|
||||
/*******************************************************************************
|
||||
函数名称 : Modbus_Analysis
|
||||
功 能 : CRC校验
|
||||
参 数 : ptr--校验数组指针 len--校验数据长度
|
||||
返 回 值 : CRC校验码,双字节
|
||||
函数名称 : Modbus_Analysis
|
||||
功 能 : CRC校验
|
||||
参 数 : ptr--校验数组指针 len--校验数据长度
|
||||
返 回 值 : CRC校验码,双字节
|
||||
*******************************************************************************/
|
||||
void modbus_analysis_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
||||
{
|
||||
|
@ -560,45 +560,45 @@ void modbus_analysis_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
|
|||
uSlaveAdd = upRxdbuf[6];
|
||||
uCmdCode = upRxdbuf[7];
|
||||
|
||||
// 从机地址为本机地址或者是广播帧
|
||||
// 从机地址为本机地址或者是广播帧
|
||||
if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS))
|
||||
{
|
||||
switch(uCmdCode)
|
||||
{
|
||||
case ReadCoilState:
|
||||
readcoilstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读线圈状态
|
||||
readcoilstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读线圈状态
|
||||
break;
|
||||
|
||||
case ReadDisInputState:
|
||||
readdisinputstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读离散输入状态
|
||||
readdisinputstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读离散输入状态
|
||||
break;
|
||||
|
||||
case ReadHoldReg:
|
||||
readholdreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取保持寄存器
|
||||
readholdreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取保持寄存器
|
||||
break;
|
||||
|
||||
case ReadInputReg:
|
||||
readinputreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取输入寄存器
|
||||
readinputreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取输入寄存器
|
||||
break;
|
||||
|
||||
case WriteSingleReg:
|
||||
writesinglereg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个寄存器
|
||||
writesinglereg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个寄存器
|
||||
break;
|
||||
|
||||
case WriteMultiCoil:
|
||||
writemulticoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个线圈
|
||||
writemulticoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个线圈
|
||||
break;
|
||||
|
||||
case WriteMultiReg:
|
||||
writemultireg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个寄存器
|
||||
writemultireg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个寄存器
|
||||
break;
|
||||
|
||||
case WriteSingleCoil:
|
||||
writesinglecoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个线圈
|
||||
writesinglecoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个线圈
|
||||
break;
|
||||
|
||||
default:
|
||||
modbus_errfunction_tcp(upRxdbuf[7], 0x01); // 错误码处理
|
||||
modbus_errfunction_tcp(upRxdbuf[7], 0x01); // 错误码处理
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -609,12 +609,12 @@ void modbus_process_tcp(void)
|
|||
uint8_t *pFrame;
|
||||
uint16_t wFrameLen = 0;
|
||||
|
||||
pFrame = MODBUS_TCP.recv.buf; // 接收数据
|
||||
wFrameLen = MODBUS_TCP.recv.size; // 接收数据长度
|
||||
pFrame = MODBUS_TCP.recv.buf; // 接收数据
|
||||
wFrameLen = MODBUS_TCP.recv.size; // 接收数据长度
|
||||
|
||||
if(wFrameLen < 2) return; // 数据长度不是有效值
|
||||
if(wFrameLen < 2) return; // 数据长度不是有效值
|
||||
|
||||
modbus_analysis_tcp(pFrame, wFrameLen); // 协议处理
|
||||
modbus_analysis_tcp(pFrame, wFrameLen); // 协议处理
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#include "adcs.h"
|
||||
|
||||
|
||||
uint32_t ADC_ConvertedValue = 0; //ADC数据
|
||||
uint32_t ADC_ConvertedValue = 0; //ADC数据
|
||||
|
||||
short Temp = 0; //温度
|
||||
short Temp = 0; //温度
|
||||
|
||||
void adcs_init(void)
|
||||
{
|
||||
|
@ -20,10 +20,10 @@ void analog_gather(void)
|
|||
if(it_10ms_flag == 1)
|
||||
{
|
||||
it_10ms_flag = 0;
|
||||
mf5803_loop(); //sensor_1 and sensor_2, 气压检测
|
||||
adcs_data(); //定位器输出回采
|
||||
ads1256_get_data(); //8路模拟输入
|
||||
ads1220_get_data(); //比例阀1&2,自带反馈 + 输出回采
|
||||
mf5803_loop(); //sensor_1 and sensor_2, 气压检测
|
||||
adcs_data(); //定位器输出回采
|
||||
ads1256_get_data(); //8路模拟输入
|
||||
ads1220_get_data(); //比例阀1&2,自带反馈 + 输出回采
|
||||
}
|
||||
|
||||
if(it_100ms_flag == 1)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "encoder.h"
|
||||
|
||||
|
||||
//编码器相关参数
|
||||
//编码器相关参数
|
||||
int last_encode_num = 0;
|
||||
int curr_encode_num = 0;
|
||||
uint32_t encode_num = 0;
|
||||
|
@ -9,30 +9,30 @@ int cnt_update = 152;
|
|||
|
||||
void encoder_init(void)
|
||||
{
|
||||
HAL_TIM_Encoder_Stop(&htim1, TIM_CHANNEL_ALL); //定时器1编码器关闭
|
||||
__HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万
|
||||
HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //定时器1编码器启动
|
||||
HAL_TIM_Encoder_Stop(&htim1, TIM_CHANNEL_ALL); //定时器1编码器关闭
|
||||
__HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万
|
||||
HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //定时器1编码器启动
|
||||
|
||||
last_encode_num = 0;
|
||||
curr_encode_num = 0;
|
||||
encode_num = 0;
|
||||
cnt_update = 152;
|
||||
|
||||
CoilState[3] &= 0x7F; //初始化完成后线圈寄存器0x28置零
|
||||
CoilState[3] &= 0x7F; //初始化完成后线圈寄存器0x28置零
|
||||
}
|
||||
|
||||
void encoder_run(void)
|
||||
{
|
||||
//编码器
|
||||
//编码器
|
||||
last_encode_num = curr_encode_num;
|
||||
curr_encode_num = __HAL_TIM_GET_COUNTER(&htim1);
|
||||
if((curr_encode_num - last_encode_num) < -50000) //向上溢出检测,o(65535)->o(0)
|
||||
if((curr_encode_num - last_encode_num) < -50000) //向上溢出检测,o(65535)->o(0)
|
||||
cnt_update++;
|
||||
else if((curr_encode_num - last_encode_num) > 50000) //向下溢出检测, o(0)->o(65535)
|
||||
else if((curr_encode_num - last_encode_num) > 50000) //向下溢出检测, o(0)->o(65535)
|
||||
cnt_update--;
|
||||
encode_num = curr_encode_num + cnt_update * 0xFFFF; //编码器,返回计数脉冲值
|
||||
InputReg[20] = (encode_num >> 16) & 0xffff; //32位int 拆分成两个 uint16_t,高16位
|
||||
InputReg[21] = encode_num & 0xffff; //32位int 拆分成两个 uint16_t,低16位
|
||||
encode_num = curr_encode_num + cnt_update * 0xFFFF; //编码器,返回计数脉冲值
|
||||
InputReg[20] = (encode_num >> 16) & 0xffff; //32位int 拆分成两个 uint16_t,高16位
|
||||
InputReg[21] = encode_num & 0xffff; //32位int 拆分成两个 uint16_t,低16位
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -13,9 +13,9 @@ void led_ctrl()
|
|||
|
||||
void digital_ctrl()
|
||||
{
|
||||
led_ctrl();//指示灯
|
||||
led_ctrl();//指示灯
|
||||
|
||||
//八位DO输出控制
|
||||
//八位DO输出控制
|
||||
PE2_DO1((GPIO_PinState)((CoilState[0]>>0)&0x01));
|
||||
PE3_DO2((GPIO_PinState)((CoilState[0]>>1)&0x01));
|
||||
PE4_DO3((GPIO_PinState)((CoilState[0]>>2)&0x01));
|
||||
|
@ -28,7 +28,7 @@ void digital_ctrl()
|
|||
coil1 = coil2;
|
||||
coil2 = CoilState[2];
|
||||
|
||||
//当有595级联的时候,先发的数据会级联到第二块595芯片中
|
||||
//当有595级联的时候,先发的数据会级联到第二块595芯片中
|
||||
if(coil1 != coil2)
|
||||
{
|
||||
hc595_write_data(CoilState[2]);
|
||||
|
@ -46,7 +46,7 @@ void digital_ctrl()
|
|||
DisState[2] = DI_NAMUR1 + DI_NAMUR2 * 2;
|
||||
|
||||
//encoder reset
|
||||
if( ((CoilState[3]>>7)&0x01) == 1 ) //CoilState[3]的D7位,地址0x28
|
||||
if( ((CoilState[3]>>7)&0x01) == 1 ) //CoilState[3]的D7位,地址0x28
|
||||
{
|
||||
encoder_init();
|
||||
}
|
||||
|
|
|
@ -150,7 +150,7 @@ void analog_ctrl(void)
|
|||
{
|
||||
it_50ms_flag_pv = 0;
|
||||
|
||||
atm_pressure = 1000; //大气绝压更新
|
||||
atm_pressure = 1012; //大气绝压更新
|
||||
|
||||
//比例阀1数据更新:当前气压、当前气压百分比、百分比偏差、当前输入电流(单片机->比例阀)
|
||||
pv_one.current_pressure = (InputReg[16] - atm_pressure)/(float)10; //Kpa,sensor1 A口绝压转表压
|
||||
|
|
|
@ -72,7 +72,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|||
}
|
||||
|
||||
uint8_t exit_check = 0;
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //外部中断,接编码器Z相
|
||||
{
|
||||
if(GPIO_Pin == GPIO_PIN_13)
|
||||
{
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
#define UART6_RX_BUFFER_SIZE 256
|
||||
uint8_t UART6_RxBuffer[UART6_RX_BUFFER_SIZE];
|
||||
|
||||
UART_BUF uart1; //串口结构体实体
|
||||
uint8_t RxBuffer; //接收数据中间变量
|
||||
UART_BUF uart1; //串口结构体实体
|
||||
uint8_t RxBuffer; //接收数据中间变量
|
||||
|
||||
#pragma import(__use_no_semihosting_swi)
|
||||
#pragma import(__use_no_semihosting)
|
||||
|
@ -19,7 +19,7 @@ struct __FILE {
|
|||
/* standard output using printf() for debugging, no file handling */
|
||||
/* is required. */
|
||||
};
|
||||
/* FILE is typedef’ d in stdio.h. */
|
||||
/* FILE is typedef’ d in stdio.h. */
|
||||
FILE __stdout;
|
||||
|
||||
int fputc(int ch, FILE *f)
|
||||
|
|
Loading…
Reference in New Issue