This commit is contained in:
吴俊潮 2024-08-21 10:41:23 +08:00
parent 3892c7740f
commit ca8dbca12b
30 changed files with 2053 additions and 2025 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"C_Cpp.errorSquiggles": "disabled"
}

View File

@ -4,45 +4,45 @@
struct ch395q_t g_ch395q_sta; struct ch395q_t g_ch395q_sta;
/** /**
* @brief ch395_gpio初始化 * @brief ch395_gpio初始化
* @param * @param
* @retval * @retval
*/ */
void ch395_gpio_init( void ) void ch395_gpio_init( void )
{ {
GPIO_InitTypeDef gpio_init_struct; GPIO_InitTypeDef gpio_init_struct;
CH395_SCS_GPIO_CLK_ENABLE(); /* 使能SCS时钟 */ CH395_SCS_GPIO_CLK_ENABLE(); /* 使能SCS时钟 */
CH395_INT_GPIO_CLK_ENABLE(); /* 使能INT时钟 */ CH395_INT_GPIO_CLK_ENABLE(); /* 使能INT时钟 */
CH395_RST_GPIO_CLK_ENABLE(); /* 使能RST时钟 */ CH395_RST_GPIO_CLK_ENABLE(); /* 使能RST时钟 */
/* SCS */ /* SCS */
gpio_init_struct.Pin = CH395_SCS_GPIO_PIN; gpio_init_struct.Pin = CH395_SCS_GPIO_PIN;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM; 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 ); HAL_GPIO_Init( CH395_SCS_GPIO_PORT, &gpio_init_struct );
ch395_scs_low; ch395_scs_low;
/* 初始化中断引脚 */ /* 初始化中断引脚 */
gpio_init_struct.Pin = CH395_INT_GPIO_PIN; gpio_init_struct.Pin = CH395_INT_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* 输入 */ gpio_init_struct.Mode = GPIO_MODE_INPUT; /* 输入 */
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */ gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init( CH395_INT_GPIO_PORT, &gpio_init_struct ); HAL_GPIO_Init( CH395_INT_GPIO_PORT, &gpio_init_struct );
gpio_init_struct.Pin = CH395_RST_GPIO_PIN; gpio_init_struct.Pin = CH395_RST_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 输出 */ gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 输出 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */ gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
HAL_GPIO_Init( CH395_RST_GPIO_PORT, &gpio_init_struct ); 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_GPIO_WritePin(CH395_RST_GPIO_PORT, CH395_RST_GPIO_PIN, GPIO_PIN_SET);
HAL_Delay(20); HAL_Delay(20);
} }
/** /**
* @brief ch395关闭spi * @brief ch395关闭spi
* @param * @param
* @retval * @retval
*/ */
void ch395_spi_off( void ) void ch395_spi_off( void )
{ {
@ -53,76 +53,76 @@ void ch395_spi_off( void )
/* SCK\SDI\SDO */ /* SCK\SDI\SDO */
gpio_init_struct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; gpio_init_struct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM; 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_Init( GPIOC, &gpio_init_struct );
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
} }
/** /**
* @brief SPI1读写一个字节数据 * @brief SPI1读写一个字节数据
* @param txdata : (1) * @param txdata : (1)
* @retval (1) * @retval (1)
*/ */
uint8_t spi2_read_write_byte(uint8_t txdata) uint8_t spi2_read_write_byte(uint8_t txdata)
{ {
uint8_t rxdata; uint8_t rxdata;
HAL_SPI_TransmitReceive(&hspi2, &txdata, &rxdata, 1, 1000); HAL_SPI_TransmitReceive(&hspi2, &txdata, &rxdata, 1, 1000);
return rxdata; /* 返回收到的数据 */ return rxdata; /* 返回收到的数据 */
} }
/** /**
* @brief SPI输出且输入8个位数据 * @brief SPI输出且输入8个位数据
* @param d:ch395的数据 * @param d:ch395的数据
* @retval * @retval
*/ */
uint8_t ch395_read_write_byte( uint8_t data ) uint8_t ch395_read_write_byte( uint8_t data )
{ {
uint8_t rxdata; uint8_t rxdata;
rxdata = spi2_read_write_byte(data); /* SPI写入一个CH395Q数据并返回一个数据 */ rxdata = spi2_read_write_byte(data); /* SPI写入一个CH395Q数据并返回一个数据 */
return rxdata; /* 返回收到的数据 */ return rxdata; /* 返回收到的数据 */
} }
/** /**
* @brief ch395写命令 * @brief ch395写命令
* @param ch395的命令码 * @param ch395的命令码
* @retval * @retval
*/ */
void ch395_write_cmd( uint8_t mcmd ) void ch395_write_cmd( uint8_t mcmd )
{ {
ch395_scs_hign; /* 防止CS原来为低先将CS置高 */ ch395_scs_hign; /* 防止CS原来为低先将CS置高 */
ch395_scs_low; /* 命令开始CS拉低 */ ch395_scs_low; /* 命令开始CS拉低 */
delay_us(2); delay_us(2);
ch395_read_write_byte(mcmd); /* SPI发送命令码 */ ch395_read_write_byte(mcmd); /* SPI发送命令码 */
delay_us(2); /* 必要延时,延时1.5uS确保读写周期不小于1.5uS */ delay_us(2); /* 必要延时,延时1.5uS确保读写周期不小于1.5uS */
} }
/** /**
* @brief ch395写数据 * @brief ch395写数据
* @param ch395的数据 * @param ch395的数据
* @retval * @retval
*/ */
void ch395_write_data( uint8_t mdata ) void ch395_write_data( uint8_t mdata )
{ {
ch395_read_write_byte(mdata); /* SPI发送数据 */ ch395_read_write_byte(mdata); /* SPI发送数据 */
} }
/** /**
* @brief ch395读数据 * @brief ch395读数据
* @param * @param
* @retval * @retval
*/ */
uint8_t ch395_read_data( void ) uint8_t ch395_read_data( void )
{ {
uint8_t i; uint8_t i;
i = ch395_read_write_byte(0xff); /* SPI读数据 */ i = ch395_read_write_byte(0xff); /* SPI读数据 */
return i; return i;
} }
/** /**
* @brief ch395_keeplive_set * @brief ch395_keeplive_set
* @param * @param
* @retval * @retval
*/ */
void ch395_keeplive_set(void) void ch395_keeplive_set(void)
{ {
@ -132,9 +132,9 @@ void ch395_keeplive_set(void)
} }
/** /**
* @brief ch395 socket配置 * @brief ch395 socket配置
* @param ch395_sokectSocket配置信息 * @param ch395_sokectSocket配置信息
* @retval * @retval
*/ */
uint8_t ch395q_socket_config(ch395_socket * ch395_sokect) uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
{ {
@ -143,7 +143,7 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
return 0; 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[0] = g_ch395q_sta.ipinf_buf[0];
// ch395_sokect->net_info.ip[1] = g_ch395q_sta.ipinf_buf[1]; // 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[2] = g_ch395q_sta.ipinf_buf[18];
// ch395_sokect->net_info.dns2[3] = g_ch395q_sta.ipinf_buf[19]; // 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_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的IP地址 */
// ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */ // ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */
// ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码默认为255.255.255.0*/ // ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码默认为255.255.255.0*/
// printf("静态IP信息.....................................\r\n"); // 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("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("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]); // 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); // HAL_Delay(10);
// } // }
ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的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_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */
ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码默认为255.255.255.0*/ ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码默认为255.255.255.0*/
printf("静态IP信息.....................................\r\n"); 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("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("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]); 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(); ch395_cmd_init();
HAL_Delay(10); 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)); memcpy(&g_ch395q_sta.socket[ch395_sokect->socket_index].config, ch395_sokect, sizeof(ch395_socket));
switch(ch395_sokect->proto) switch(ch395_sokect->proto)
{ {
case CH395Q_SOCKET_UDP: case CH395Q_SOCKET_UDP:
/* socket 为UDP模式 */ /* socket 为UDP模式 */
ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */ 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_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_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源端口 */ 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)); /* 检查是否成功 */ g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查是否成功 */
break; break;
case CH395Q_SOCKET_TCP_CLIENT: case CH395Q_SOCKET_TCP_CLIENT:
/* socket 为TCPClient模式 */ /* socket 为TCPClient模式 */
ch395_keeplive_set(); /* 保活设置 */ ch395_keeplive_set(); /* 保活设置 */
ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */ 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_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_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源端口 */ 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_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
g_ch395q_sta.ch395_error(ch395_tcp_connect(ch395_sokect->socket_index)); /* 检查tcp连接是否成功 */ g_ch395q_sta.ch395_error(ch395_tcp_connect(ch395_sokect->socket_index)); /* 检查tcp连接是否成功 */
break; break;
case CH395Q_SOCKET_TCP_SERVER: case CH395Q_SOCKET_TCP_SERVER:
/* socket 为TCPServer模式 */ /* socket 为TCPServer模式 */
//ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */ //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_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源端口 */ 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_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
g_ch395q_sta.ch395_error(ch395_tcp_listen(ch395_sokect->socket_index)); /* 监听tcp连接 */ g_ch395q_sta.ch395_error(ch395_tcp_listen(ch395_sokect->socket_index)); /* 监听tcp连接 */
break; break;
case CH395Q_SOCKET_MAC_RAW: case CH395Q_SOCKET_MAC_RAW:
ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */ 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是否打开成功 */ g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */
break; break;
} }
@ -235,18 +235,18 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect)
} }
/** /**
* @brief 使 * @brief 使
* @param ierror * @param ierror
* @retval * @retval
*/ */
void ch395_error(uint8_t ierror) void ch395_error(uint8_t ierror)
{ {
if (ierror == CMD_ERR_SUCCESS) 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 ) // while ( 1 )
// { // {
@ -256,9 +256,9 @@ void ch395_error(uint8_t ierror)
} }
/** /**
* @brief CH395 PHY状态 * @brief CH395 PHY状态
* @param phy_statusPHY状态值 * @param phy_statusPHY状态值
* @retval * @retval
*/ */
void ch395_phy_status(uint8_t phy_status) void ch395_phy_status(uint8_t phy_status)
{ {
@ -287,13 +287,13 @@ void ch395_phy_status(uint8_t phy_status)
} }
/** /**
* @brief socket接口的接收与发送缓冲区 * @brief socket接口的接收与发送缓冲区
* @param * @param
* @retval * @retval
*/ */
void ch395_socket_r_s_buf_modify(void) 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_send_buf(0,4,2);
ch395_set_socket_recv_buf(1,6,4); /* Socket 1 */ 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; int re_cnt = 0;
/** /**
* @brief ch395_tcp初始化 * @brief ch395_tcp初始化
* @param * @param
* @retval * @retval
*/ */
void ch395_hardware_init(void) void ch395_hardware_init(void)
{ {
@ -335,25 +335,25 @@ void ch395_hardware_init(void)
g_ch395q_sta.ch395_reconnection = ch395_reconnection; g_ch395q_sta.ch395_reconnection = ch395_reconnection;
g_ch395q_sta.dhcp_status = DHCP_STA; g_ch395q_sta.dhcp_status = DHCP_STA;
i = ch395_cmd_check_exist(0x65); /* 测试命令,用于测试硬件以及接口通讯 */ i = ch395_cmd_check_exist(0x65); /* 测试命令,用于测试硬件以及接口通讯 */
if (i != 0x9a) if (i != 0x9a)
{ {
g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */ g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */
} }
ch395_cmd_reset(); /* 对ch395q复位 */ ch395_cmd_reset(); /* 对ch395q复位 */
HAL_Delay(100); /* 这里必须等待100以上延时 */ 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_socket_r_s_buf_modify();
// ch395_set_tcpmss(536); // ch395_set_tcpmss(536);
// ch395_set_start_para(FUN_PARA_FLAG_TCP_SERVER | SOCK_CTRL_FLAG_SOCKET_CLOSE); // ch395_set_start_para(FUN_PARA_FLAG_TCP_SERVER | SOCK_CTRL_FLAG_SOCKET_CLOSE);
do do
{ {
g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* 获取PHY状态 */ 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.ch395_phy_cb(g_ch395q_sta.phy_status); /* 判断双工和网速模式 */
re_cnt++; re_cnt++;
if(re_cnt > 50) if(re_cnt > 50)
@ -362,58 +362,58 @@ void ch395_hardware_init(void)
} }
while(g_ch395q_sta.phy_status == PHY_DISCONN); 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); printf("CH395VER : %2x\r\n", (uint16_t)g_ch395q_sta.version);
// i = ch395_dhcp_enable(1); /* 开启DHCP */ // i = ch395_dhcp_enable(1); /* 开启DHCP */
// g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */ // g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */
HAL_Delay(1000); /* ch395q初始化延时 */ HAL_Delay(1000); /* ch395q初始化延时 */
} }
/** /**
* @brief CH395 socket , * @brief CH395 socket ,
* @param sockindex 0~7 * @param sockindex 0~7
* @retval * @retval
*/ */
void ch395_socket_interrupt(uint8_t sockindex) void ch395_socket_interrupt(uint8_t sockindex)
{ {
uint8_t sock_int_socket; uint8_t sock_int_socket;
uint16_t rx_len = 0; 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; 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'; g_ch395q_sta.socket[sockindex].config.recv.buf[rx_len] = '\0';
modbus_process_tcp(); modbus_process_tcp();
printf("%s", g_ch395q_sta.socket[sockindex].config.recv.buf); printf("%s", g_ch395q_sta.socket[sockindex].config.recv.buf);
g_ch395q_sta.socket[sockindex].config.recv.recv_flag |= 0x04; 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) if (g_ch395q_sta.socket[sockindex].config.proto == CH395Q_SOCKET_TCP_CLIENT)
{ {
ch395_set_keeplive(sockindex,1); /* 打开KEEPALIVE保活定时器 */ ch395_set_keeplive(sockindex,1); /* 打开KEEPALIVE保活定时器 */
ch395_setttl_num(sockindex,60); /* 设置TTL */ 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)); 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: default:
break; 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) 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_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)); 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全局中断函数 * @brief CH395全局中断函数
* @param * @param
* @retval * @retval
*/ */
void ch395_interrupt_handler(void) void ch395_interrupt_handler(void)
{ {
@ -454,22 +454,22 @@ void ch395_interrupt_handler(void)
init_status = ch395_cmd_get_glob_int_status_all(); 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); 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; g_ch395q_sta.dhcp_status = DHCP_DOWN;
return; return;
@ -488,72 +488,72 @@ void ch395_interrupt_handler(void)
// break; // break;
// default: // default:
// g_ch395q_sta.dhcp_status = DHCP_DOWN; // g_ch395q_sta.dhcp_status = DHCP_DOWN;
// /* 设置默认IP地址信息 */ // /* 设置默认IP地址信息 */
// printf("静态IP信息.....................................\r\n"); // printf("静态IP信息.....................................\r\n");
// break; // break;
// } // }
} }
if (init_status & GINT_STAT_SOCK0) 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) 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) 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) 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) 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) 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) 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) if (init_status & GINT_STAT_SOCK7)
{ {
ch395_socket_interrupt(CH395Q_SOCKET_7); /* 处理socket 7中断 */ ch395_socket_interrupt(CH395Q_SOCKET_7); /* 处理socket 7中断 */
} }
} }
/** /**
* @brief CH395全局管理函数 * @brief CH395全局管理函数
* @param * @param
* @retval * @retval
*/ */
void ch395q_handler(void) void ch395q_handler(void)
{ {
if (ch395_int_pin_wire == 0) 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状态 * @brief PHY状态
* @param * @param
* @retval * @retval
*/ */
void ch395_reconnection(void) void ch395_reconnection(void)
{ {
@ -564,7 +564,7 @@ void ch395_reconnection(void)
if (g_ch395q_sta.socket[socket_index].config.socket_enable == CH395Q_ENABLE) if (g_ch395q_sta.socket[socket_index].config.socket_enable == CH395Q_ENABLE)
{ {
ch395_close_socket(g_ch395q_sta.socket[socket_index].config.socket_index); 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.socket[socket_index].config.socket_enable = CH395Q_DISABLE;
g_ch395q_sta.dhcp_status = DHCP_STA; g_ch395q_sta.dhcp_status = DHCP_STA;
} }
@ -575,60 +575,60 @@ void ch395_reconnection(void)
{ {
if (g_ch395q_sta.dhcp_status == DHCP_STA) if (g_ch395q_sta.dhcp_status == DHCP_STA)
{ {
ch395_cmd_reset(); /* 对ch395q复位 */ ch395_cmd_reset(); /* 对ch395q复位 */
HAL_Delay(100); /* 这里必须等待100以上延时 */ HAL_Delay(100); /* 这里必须等待100以上延时 */
ch395_cmd_init(); ch395_cmd_init();
HAL_Delay(100); /* 这里必须等待100以上延时 */ HAL_Delay(100); /* 这里必须等待100以上延时 */
ch395_socket_r_s_buf_modify(); ch395_socket_r_s_buf_modify();
// ch395_set_tcpmss(536); // ch395_set_tcpmss(536);
// ch395_set_start_para(FUN_PARA_FLAG_TCP_SERVER | SOCK_CTRL_FLAG_SOCKET_CLOSE); // 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 do
{ {
if (ch395_int_pin_wire == 0) 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) switch(g_ch395q_sta.socket[socket_index].config.proto)
{ {
case CH395Q_SOCKET_UDP: case CH395Q_SOCKET_UDP:
/* 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_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_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_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源端口 */ 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)); /* 检查是否成功 */ g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查是否成功 */
break; break;
case CH395Q_SOCKET_TCP_CLIENT: case CH395Q_SOCKET_TCP_CLIENT:
/* socket 为TCPClient模式 */ /* socket 为TCPClient模式 */
ch395_keeplive_set(); /* 保活设置 */ ch395_keeplive_set(); /* 保活设置 */
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */ 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_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_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源端口 */ 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_open_socket(socket_index)); /* 检查sokect是否打开成功 */
g_ch395q_sta.ch395_error(ch395_tcp_connect(socket_index)); /* 检查tcp连接是否成功 */ g_ch395q_sta.ch395_error(ch395_tcp_connect(socket_index)); /* 检查tcp连接是否成功 */
break; break;
case CH395Q_SOCKET_TCP_SERVER: case CH395Q_SOCKET_TCP_SERVER:
/* socket 为TCPServer模式 */ /* socket 为TCPServer模式 */
ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */ 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_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源端口 */ 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_open_socket(socket_index)); /* 检查sokect是否打开成功 */
g_ch395q_sta.ch395_error(ch395_tcp_listen(socket_index)); /* 监听tcp连接 */ g_ch395q_sta.ch395_error(ch395_tcp_listen(socket_index)); /* 监听tcp连接 */
break; break;
case CH395Q_SOCKET_MAC_RAW: case CH395Q_SOCKET_MAC_RAW:
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */ ch395_set_socket_prot_type(socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */
g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */ g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */
break; break;
default: default:
ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); 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; break;
} }
g_ch395q_sta.socket[socket_index].config.socket_enable = CH395Q_ENABLE; 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_ipaddr[4] = {192,168,114,194};
uint8_t ch395_gw_ipaddr[4] = {192,168,114,110}; uint8_t ch395_gw_ipaddr[4] = {192,168,114,110};
uint8_t ch395_ipmask[4] = {255,255,255,0}; uint8_t ch395_ipmask[4] = {255,255,255,0};
uint8_t ch395_macaddr[6] = {0x5C,0x53,0x10,0x6C,0x18,0x49}; uint8_t ch395_macaddr[6] = {0x5C,0x53,0x10,0x6C,0x18,0x49};
/* 远程IP地址设置 */ /* 远程IP地址设置 */
//uint8_t ch395_des_ipaddr[4] = {192,168,1,111}; //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_send_buf[] = {"This is from CH395Q\r\n"};
static uint8_t socket0_recv_buf[1024]; static uint8_t socket0_recv_buf[1024];
ch395_socket cha95_sockct_sta[8]; ch395_socket cha95_sockct_sta[8];
/** /**
* @brief * @brief
* @param * @param
* @retval * @retval
*/ */
void ch395_init(void) void ch395_init(void)
{ {
@ -660,22 +660,22 @@ void ch395_init(void)
// { // {
// ch395q_handler(); // 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_enable = CH395Q_ENABLE; /* 使能socket对 */
cha95_sockct_sta[0].socket_index = CH395Q_SOCKET_0; /* 设置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].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.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.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.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地址 */ 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].sour_port = 8080; /* 源端口 */
cha95_sockct_sta[0].proto = CH395Q_SOCKET_TCP_SERVER; /* 设置协议 */ cha95_sockct_sta[0].proto = CH395Q_SOCKET_TCP_SERVER; /* 设置协议 */
cha95_sockct_sta[0].send.buf = socket0_send_buf; /* 发送数据 */ cha95_sockct_sta[0].send.buf = socket0_send_buf; /* 发送数据 */
cha95_sockct_sta[0].send.size = sizeof(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.buf = socket0_recv_buf; /* 接收数据缓冲区 */
cha95_sockct_sta[0].recv.size = sizeof(socket0_recv_buf); /* 接收数据大小 */ cha95_sockct_sta[0].recv.size = sizeof(socket0_recv_buf); /* 接收数据大小 */
ch395q_socket_config(&cha95_sockct_sta[0]); /* 配置socket参数 */ ch395q_socket_config(&cha95_sockct_sta[0]); /* 配置socket参数 */
} }

View File

@ -3,9 +3,9 @@
#include "ch395.h" #include "ch395.h"
/** /**
* @brief ch395芯片 * @brief ch395芯片
* @param * @param
* @retval * @retval
*/ */
void ch395_cmd_reset(void) void ch395_cmd_reset(void)
{ {
@ -14,9 +14,9 @@ void ch395_cmd_reset(void)
} }
/** /**
* @brief 使ch395进入睡眠状态 * @brief 使ch395进入睡眠状态
* @param * @param
* @retval * @retval
*/ */
void ch395_cmd_sleep(void) void ch395_cmd_sleep(void)
{ {
@ -25,9 +25,9 @@ void ch395_cmd_sleep(void)
} }
/** /**
* @brief 1 * @brief 1
* @param * @param
* @retval 1 * @retval 1
*/ */
uint8_t ch395_cmd_get_ver(void) uint8_t ch395_cmd_get_ver(void)
{ {
@ -39,9 +39,9 @@ uint8_t ch395_cmd_get_ver(void)
} }
/** /**
* @brief * @brief
* @param 1 * @param 1
* @retval ok testdata按位取反 * @retval ok testdata按位取反
*/ */
uint8_t ch395_cmd_check_exist(uint8_t testdata) uint8_t ch395_cmd_check_exist(uint8_t testdata)
{ {
@ -55,9 +55,9 @@ uint8_t ch395_cmd_check_exist(uint8_t testdata)
} }
/** /**
* @brief phych395 phy为100/10m ch395默为自动协商 * @brief phych395 phy为100/10m ch395默为自动协商
* @param phy / * @param phy /
* @retval * @retval
*/ */
void ch395_cmd_set_phy(uint8_t phystat) void ch395_cmd_set_phy(uint8_t phystat)
{ {
@ -67,9 +67,9 @@ void ch395_cmd_set_phy(uint8_t phystat)
} }
/** /**
* @brief phy的状态 * @brief phy的状态
* @param * @param
* @retval ch395phy状态phy参数/ * @retval ch395phy状态phy参数/
*/ */
uint8_t ch395_cmd_get_phy_status(void) uint8_t ch395_cmd_get_phy_status(void)
{ {
@ -82,9 +82,9 @@ uint8_t ch395_cmd_get_phy_status(void)
} }
/** /**
* @brief ch395自动取消中断0x43使 * @brief ch395自动取消中断0x43使
* @param * @param
* @retval * @retval
*/ */
uint8_t ch395_cmd_get_glob_int_status(void) uint8_t ch395_cmd_get_glob_int_status(void)
{ {
@ -97,9 +97,9 @@ uint8_t ch395_cmd_get_glob_int_status(void)
} }
/** /**
* @brief ch395芯片 * @brief ch395芯片
* @param * @param
* @retval * @retval
*/ */
uint8_t ch395_cmd_init(void) uint8_t ch395_cmd_init(void)
{ {
@ -111,17 +111,17 @@ uint8_t ch395_cmd_init(void)
while (1) while (1)
{ {
HAL_Delay(10); /* 延时查询建议2MS以上 */ HAL_Delay(10); /* 延时查询建议2MS以上 */
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
if (s != CH395_ERR_BUSY) if (s != CH395_ERR_BUSY)
{ {
break; /* 如果CH395芯片返回忙状态 */ break; /* 如果CH395芯片返回忙状态 */
} }
if (i++ > 200) 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串口波特率 * @brief ch395串口波特率
* @param baudrate * @param baudrate
* @retval * @retval
*/ */
void ch395_cmd_set_uart_baud_rate(uint32_t baudrate) 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 * @brief
* @param * @param
* @retval * @retval
*/ */
uint8_t ch395_get_cmd_status(void) uint8_t ch395_get_cmd_status(void)
{ {
@ -159,9 +159,9 @@ uint8_t ch395_get_cmd_status(void)
} }
/** /**
* @brief ch395的ip地址 * @brief ch395的ip地址
* @param ipaddr ip地址 * @param ipaddr ip地址
* @retval * @retval
*/ */
void ch395_cmd_set_ipaddr(uint8_t *ipaddr) void ch395_cmd_set_ipaddr(uint8_t *ipaddr)
{ {
@ -178,9 +178,9 @@ void ch395_cmd_set_ipaddr(uint8_t *ipaddr)
} }
/** /**
* @brief ch395的网关ip地址 * @brief ch395的网关ip地址
* @param ipaddr ip地址 * @param ipaddr ip地址
* @retval * @retval
*/ */
void ch395_cmd_set_gw_ipaddr(uint8_t *gwipaddr) 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 * @brief ch395的子网掩码255.255.255.0
* @param maskaddr * @param maskaddr
* @retval * @retval
*/ */
void ch395_cmd_set_maskaddr(uint8_t *maskaddr) void ch395_cmd_set_maskaddr(uint8_t *maskaddr)
{ {
@ -216,9 +216,9 @@ void ch395_cmd_set_maskaddr(uint8_t *maskaddr)
} }
/** /**
* @brief ch395的mac地址 * @brief ch395的mac地址
* @param mcaddr mac地址指针 * @param mcaddr mac地址指针
* @retval * @retval
*/ */
void ch395_cmd_set_macaddr(uint8_t *amcaddr) void ch395_cmd_set_macaddr(uint8_t *amcaddr)
{ {
@ -236,9 +236,9 @@ void ch395_cmd_set_macaddr(uint8_t *amcaddr)
} }
/** /**
* @brief ch395的mac地址 * @brief ch395的mac地址
* @param amcaddr mac地址指针 * @param amcaddr mac地址指针
* @retval * @retval
*/ */
void ch395_cmd_get_macaddr(uint8_t *amcaddr) void ch395_cmd_get_macaddr(uint8_t *amcaddr)
{ {
@ -255,11 +255,11 @@ void ch395_cmd_get_macaddr(uint8_t *amcaddr)
} }
/** /**
* @brief mac过滤 * @brief mac过滤
* @param filtype mac过滤 * @param filtype mac过滤
* @param table0 hash0 * @param table0 hash0
* @param table1 hash1 * @param table1 hash1
* @retval * @retval
*/ */
void ch395_cmd_set_macfilt(uint8_t filtype, uint32_t table0, uint32_t table1) 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) * @brief (ip,port,protocol type)
* @param list * @param list
@arg 1 (ch395inc.h) @arg 1 (ch395inc.h)
@arg 2ip包协议类型 @arg 2ip包协议类型
@arg 3-4 @arg 3-4
@arg 4-8ip地址 @arg 4-8ip地址
* @retval * @retval
*/ */
void ch395_cmd_get_unreachippt(uint8_t *list) void ch395_cmd_get_unreachippt(uint8_t *list)
{ {
@ -301,10 +301,10 @@ void ch395_cmd_get_unreachippt(uint8_t *list)
} }
/** /**
* @brief ip和端口地址tcp server模式下使用 * @brief ip和端口地址tcp server模式下使用
* @param sockindex socket索引 * @param sockindex socket索引
* @param list ip和端口 * @param list ip和端口
* @retval * @retval
*/ */
void ch395_cmd_get_remoteipp(uint8_t sockindex, uint8_t *list) 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地址 * @brief socket n的目的ip地址
* @param sockindex socket索引 * @param sockindex socket索引
* @param ipaddr ip地址 * @param ipaddr ip地址
* @retval * @retval
*/ */
void ch395_set_socket_desip(uint8_t sockindex, uint8_t *ipaddr) 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 * @brief socket
* @param sockindex socket索引,prottype * @param sockindex socket索引,prottype
* @param socket协议类型定义(ch395inc.h) * @param socket协议类型定义(ch395inc.h)
* @retval * @retval
*/ */
void ch395_set_socket_prot_type(uint8_t sockindex, uint8_t prottype) 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的协议类型 * @brief socket n的协议类型
* @param sockindex socket索引 * @param sockindex socket索引
* @param desprot 2 * @param desprot 2
* @retval * @retval
*/ */
void ch395_set_socket_desport(uint8_t sockindex, uint16_t desprot) 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的协议类型 * @brief socket n的协议类型
* @param sockindex socket索引 * @param sockindex socket索引
* @param desprot 2 * @param desprot 2
* @retval * @retval
*/ */
void ch395_set_socket_sourport(uint8_t sockindex, uint16_t surprot) 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包协议字段 * @brief ip模式下socket ip包协议字段
* @param sockindex socket索引 * @param sockindex socket索引
* @param prototype ipraw模式1字节协议字段 * @param prototype ipraw模式1字节协议字段
* @retval * @retval
*/ */
void ch395_set_socket_ipraw_proto(uint8_t sockindex, uint8_t prototype) 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 * @brief / ping
* @param senable :0 / 1, : * @param senable :0 / 1, :
* @arg 1: ping * @arg 1: ping
* @arg 0: ping * @arg 0: ping
* @retval * @retval
*/ */
void ch395_enable_ping(uint8_t enable) void ch395_enable_ping(uint8_t enable)
{ {
@ -411,11 +411,11 @@ void ch395_enable_ping(uint8_t enable)
} }
/** /**
* @brief * @brief
* @param sockindex socket索引 * @param sockindex socket索引
* @param databuf * @param databuf
* @param len * @param len
* @retval * @retval
*/ */
void ch395_send_data(uint8_t sockindex, uint8_t *databuf, uint16_t len) 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 * @brief
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
uint16_t ch395_get_recv_length(uint8_t sockindex) uint16_t ch395_get_recv_length(uint8_t sockindex)
{ {
@ -452,9 +452,9 @@ uint16_t ch395_get_recv_length(uint8_t sockindex)
} }
/** /**
* @brief * @brief
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
void ch395_clear_recv_buf(uint8_t sockindex) void ch395_clear_recv_buf(uint8_t sockindex)
{ {
@ -464,11 +464,11 @@ void ch395_clear_recv_buf(uint8_t sockindex)
} }
/** /**
* @brief * @brief
* @param sockindex socket索引 * @param sockindex socket索引
* @param len * @param len
* @param pbuf * @param pbuf
* @retval * @retval
*/ */
void ch395_get_recv_data(uint8_t sockindex, uint16_t len, uint8_t *pbuf) 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 * @brief
* @param count 20 * @param count 20
* @retval * @retval
*/ */
void ch395_cmd_set_retry_count(uint8_t count) void ch395_cmd_set_retry_count(uint8_t count)
{ {
@ -504,9 +504,9 @@ void ch395_cmd_set_retry_count(uint8_t count)
} }
/** /**
* @brief * @brief
* @param period 1000ms * @param period 1000ms
* @retval * @retval
*/ */
void ch395_cmd_set_retry_period(uint16_t period) void ch395_cmd_set_retry_period(uint16_t period)
{ {
@ -517,9 +517,9 @@ void ch395_cmd_set_retry_period(uint16_t period)
} }
/** /**
* @brief socket * @brief socket
* @param sockindex socket索引 * @param sockindex socket索引
* @retval socket n的状态信息1socket ,2tcp状态 * @retval socket n的状态信息1socket ,2tcp状态
*/ */
void ch395_cmd_get_socket_status(uint8_t sockindex, uint8_t *status) 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 * @brief socket
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
uint8_t ch395_open_socket(uint8_t sockindex) uint8_t ch395_open_socket(uint8_t sockindex)
{ {
@ -545,17 +545,17 @@ uint8_t ch395_open_socket(uint8_t sockindex)
while (1) while (1)
{ {
HAL_Delay(5); /* 延时查询建议2MS以上 */ HAL_Delay(5); /* 延时查询建议2MS以上 */
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
if (s != CH395_ERR_BUSY) if (s != CH395_ERR_BUSY)
{ {
break; /* 如果CH395芯片返回忙状态 */ break; /* 如果CH395芯片返回忙状态 */
} }
if (i++ > 200) 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 * @brief socket
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
uint8_t ch395_close_socket(uint8_t sockindex) uint8_t ch395_close_socket(uint8_t sockindex)
{ {
@ -577,17 +577,17 @@ uint8_t ch395_close_socket(uint8_t sockindex)
while (1) while (1)
{ {
HAL_Delay(5); /* 延时查询建议2MS以上 */ HAL_Delay(5); /* 延时查询建议2MS以上 */
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
if (s != CH395_ERR_BUSY) if (s != CH395_ERR_BUSY)
{ {
break; /* 如果CH395芯片返回忙状态 */ break; /* 如果CH395芯片返回忙状态 */
} }
if (i++ > 200) 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模式下有效 * @brief tcp连接tcp模式下有效
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
uint8_t ch395_tcp_connect(uint8_t sockindex) uint8_t ch395_tcp_connect(uint8_t sockindex)
{ {
@ -609,17 +609,17 @@ uint8_t ch395_tcp_connect(uint8_t sockindex)
while (1) while (1)
{ {
HAL_Delay(5); /* 延时查询建议2MS以上 */ HAL_Delay(5); /* 延时查询建议2MS以上 */
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
if (s != CH395_ERR_BUSY) if (s != CH395_ERR_BUSY)
{ {
break; /* 如果CH395芯片返回忙状态 */ break; /* 如果CH395芯片返回忙状态 */
} }
if (i++ > 200) 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模式下有效 * @brief tcp监听tcp模式下有效
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
uint8_t ch395_tcp_listen(uint8_t sockindex) uint8_t ch395_tcp_listen(uint8_t sockindex)
{ {
@ -641,17 +641,17 @@ uint8_t ch395_tcp_listen(uint8_t sockindex)
while (1) while (1)
{ {
HAL_Delay(5); /* 延时查询建议2MS以上 */ HAL_Delay(5); /* 延时查询建议2MS以上 */
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
if (s != CH395_ERR_BUSY) if (s != CH395_ERR_BUSY)
{ {
break; /* 如果CH395芯片返回忙状态 */ break; /* 如果CH395芯片返回忙状态 */
} }
if (i++ > 200) 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模式下有效 * @brief tcp断开tcp模式下有效
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
uint8_t ch395_tcp_disconnect(uint8_t sockindex) uint8_t ch395_tcp_disconnect(uint8_t sockindex)
{ {
@ -673,26 +673,26 @@ uint8_t ch395_tcp_disconnect(uint8_t sockindex)
while (1) while (1)
{ {
HAL_Delay(5); /* 延时查询建议2MS以上 */ HAL_Delay(5); /* 延时查询建议2MS以上 */
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
if (s != CH395_ERR_BUSY) if (s != CH395_ERR_BUSY)
{ {
break; /* 如果CH395芯片返回忙状态 */ break; /* 如果CH395芯片返回忙状态 */
} }
if (i++ > 200) if (i++ > 200)
{ {
return CH395_ERR_UNKNOW; /* 超时退出 */ return CH395_ERR_UNKNOW; /* 超时退出 */
} }
} }
return s; return s;
} }
/** /**
* @brief socket n的中断状态 * @brief socket n的中断状态
* @param sockindex socket索引 * @param sockindex socket索引
* @retval * @retval
*/ */
uint8_t ch395_get_socket_int(uint8_t sockindex) 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 * @brief crc运算6
* @param mac_addr mac地址 * @param mac_addr mac地址
* @retval crc32的高6位 * @retval crc32的高6位
*/ */
uint8_t ch395_crcret_6bit(uint8_t *mac_addr) uint8_t ch395_crcret_6bit(uint8_t *mac_addr)
{ {
@ -734,11 +734,11 @@ uint8_t ch395_crcret_6bit(uint8_t *mac_addr)
} }
/** /**
* @brief /dhcp * @brief /dhcp
* @param flag:0 / 1, : * @param flag:0 / 1, :
* @arg 1:dhcp * @arg 1:dhcp
* @arg 0dhcp * @arg 0dhcp
* @retval * @retval
*/ */
uint8_t ch395_dhcp_enable(uint8_t flag) uint8_t ch395_dhcp_enable(uint8_t flag)
{ {
@ -751,16 +751,16 @@ uint8_t ch395_dhcp_enable(uint8_t flag)
while (1) while (1)
{ {
HAL_Delay(20); HAL_Delay(20);
s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ s = ch395_get_cmd_status(); /* 不能过于频繁查询 */
if(s != CH395_ERR_BUSY) if(s != CH395_ERR_BUSY)
{ {
break; /* 如果ch395芯片返回忙状态 */ break; /* 如果ch395芯片返回忙状态 */
} }
if(i++ > 200) 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状态 * @brief dhcp状态
* @param * @param
* @retval dhcp状态0 * @retval dhcp状态0
*/ */
uint8_t ch395_get_dhcp_status(void) uint8_t ch395_get_dhcp_status(void)
{ {
@ -782,9 +782,9 @@ uint8_t ch395_get_dhcp_status(void)
} }
/** /**
* @brief ip * @brief ip
* @param sockindex socket索引 * @param sockindex socket索引
* @retval 12ip, * @retval 12ip,
*/ */
void ch395_get_ipinf(uint8_t *addr) void ch395_get_ipinf(uint8_t *addr)
{ {
@ -800,10 +800,10 @@ void ch395_get_ipinf(uint8_t *addr)
} }
/** /**
* @brief gpio寄存器 * @brief gpio寄存器
* @param regadd * @param regadd
* @param regval * @param regval
* @retval * @retval
*/ */
void ch395_write_gpio_addr(uint8_t regadd, uint8_t regval) 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寄存器 * @brief gpio寄存器
* @param regadd * @param regadd
* @retval * @retval
*/ */
uint8_t ch395_read_gpio_addr(uint8_t regadd) uint8_t ch395_read_gpio_addr(uint8_t regadd)
{ {
@ -828,9 +828,9 @@ uint8_t ch395_read_gpio_addr(uint8_t regadd)
} }
/** /**
* @brief eeprom * @brief eeprom
* @param * @param
* @retval * @retval
*/ */
uint8_t ch395_eeprom_erase(void) uint8_t ch395_eeprom_erase(void)
{ {
@ -854,11 +854,11 @@ uint8_t ch395_eeprom_erase(void)
} }
/** /**
* @brief eeprom * @brief eeprom
* @param eepaddr eeprom地址 * @param eepaddr eeprom地址
* @param buf * @param buf
* @param len * @param len
* @retval * @retval
*/ */
uint8_t ch395_eeprom_write(uint16_t eepaddr, uint8_t *buf, uint8_t len) 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 * @brief eeprom
* @param eepaddr eeprom地址 * @param eepaddr eeprom地址
* @param buf * @param buf
* @param len * @param len
* @retval * @retval
*/ */
void ch395_eeprom_read(uint16_t eepaddr, uint8_t *buf, uint8_t len) 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 * @param tcpmss
* @retval * @retval
*/ */
void ch395_set_tcpmss(uint16_t tcpmss) void ch395_set_tcpmss(uint16_t tcpmss)
{ {
@ -920,11 +920,11 @@ void ch395_set_tcpmss(uint16_t tcpmss)
} }
/** /**
* @brief socket接收缓冲区 * @brief socket接收缓冲区
* @param sockindex socket索引,,blknum * @param sockindex socket索引,,blknum
* @param startblk * @param startblk
* @param 512 * @param 512
* @retval * @retval
*/ */
void ch395_set_socket_recv_buf(uint8_t sockindex, uint8_t startblk, uint8_t blknum) 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发送缓冲区 * @brief socket发送缓冲区
* @param sockindex socket索引 * @param sockindex socket索引
* @param startblk * @param startblk
* @param blknum * @param blknum
* @retval * @retval
*/ */
void ch395_set_socket_send_buf(uint8_t sockindex, uint8_t startblk, uint8_t blknum) 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和端口发送数据 * @brief udp向指定的ip和端口发送数据
* @param buf : * @param buf :
* @param len : * @param len :
* @param ip : ip * @param ip : ip
* @param port : * @param port :
* @param sockeid : socket索引值 * @param sockeid : socket索引值
* @retval * @retval
*/ */
void ch395_udp_send_data(uint8_t *buf, uint32_t len, uint8_t *ip, uint16_t port, uint8_t sockindex) 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_set_socket_desport(sockindex, port);
ch395_send_data(sockindex, buf, len); ch395_send_data(sockindex, buf, len);
} }
/** /**
* @brief ch395启动参数 * @brief ch395启动参数
* @param mdata * @param mdata
* @retval * @retval
*/ */
void ch395_set_start_para(uint32_t mdata) void ch395_set_start_para(uint32_t mdata)
{ {
@ -980,9 +980,9 @@ void ch395_set_start_para(uint32_t mdata)
} }
/** /**
* @brief ch395自动取消中断,0x44使 * @brief ch395自动取消中断,0x44使
* @param * @param
* @retval * @retval
*/ */
uint16_t ch395_cmd_get_glob_int_status_all(void) 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功能 * @brief keepalive功能
* @param sockindex socket号 * @param sockindex socket号
* @param cmd 0 1 * @param cmd 0 1
* @retval * @retval
*/ */
void ch395_set_keeplive(uint8_t sockindex, uint8_t cmd) 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重试次数 * @brief keepalive重试次数
* @param cnt * @param cnt
* @retval * @retval
*/ */
void ch395_keeplive_cnt(uint8_t cnt) void ch395_keeplive_cnt(uint8_t cnt)
{ {
@ -1020,9 +1020,9 @@ void ch395_keeplive_cnt(uint8_t cnt)
} }
/** /**
* @brief keeplive空闲 * @brief keeplive空闲
* @param idle ms * @param idle ms
* @retval * @retval
*/ */
void ch395_keeplive_idle(uint32_t idle) void ch395_keeplive_idle(uint32_t idle)
{ {
@ -1034,9 +1034,9 @@ void ch395_keeplive_idle(uint32_t idle)
} }
/** /**
* @brief keeplive间隔时间 * @brief keeplive间隔时间
* @param intvl ms * @param intvl ms
* @retval * @retval
*/ */
void ch395_keeplive_intvl(uint32_t intvl) void ch395_keeplive_intvl(uint32_t intvl)
{ {
@ -1048,10 +1048,10 @@ void ch395_keeplive_intvl(uint32_t intvl)
} }
/** /**
* @brief ttl * @brief ttl
* @param ssockindex socket号 * @param ssockindex socket号
* @param ttlnum:ttl数 * @param ttlnum:ttl数
* @retval * @retval
*/ */
void ch395_setttl_num(uint8_t sockindex, uint8_t ttlnum) void ch395_setttl_num(uint8_t sockindex, uint8_t ttlnum)
{ {

View File

@ -7,7 +7,7 @@
#include "usart.h" #include "usart.h"
#include "spi.h" #include "spi.h"
/* ********************************************************************************************************************* */ /* ********************************************************************************************************************* */
/* 常用类型和常量定义 */ /* 常用类型和常量定义 */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -20,225 +20,225 @@ extern "C" {
#define NULL 0 #define NULL 0
#endif #endif
/* 命令代码: /* 命令代码:
* : * :
* (,) * (,)
* (0) * (0)
* (0) * (0)
* : CMDxy_NAME * : CMDxy_NAME
* x和y都是数字, x说明最少输入数据个数(), y说明最少输出数据个数(), y如果是W表示需要等待命令执行成功 * x和y都是数字, x说明最少输入数据个数(), y说明最少输出数据个数(), y如果是W表示需要等待命令执行成功
* 0, x或y之内 * 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 /* 设置TTLTTL最大值为128 */ #define CMD20_SET_TTL 0x51 /* 设置TTLTTL最大值为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_IP_RAW 0 /* IP层原始数据 */
#define PROTO_TYPE_MAC_RAW 1 /* MAC层原始数据 */ #define PROTO_TYPE_MAC_RAW 1 /* MAC层原始数据 */
#define PROTO_TYPE_UDP 2 /* UDP协议类型 */ #define PROTO_TYPE_UDP 2 /* UDP协议类型 */
#define PROTO_TYPE_TCP 3 /* TCP协议类型 */ #define PROTO_TYPE_TCP 3 /* TCP协议类型 */
/* PHY 命令参数/状态 */ /* PHY 命令参数/状态 */
#define PHY_DISCONN (1<<0) /* PHY断开 */ #define PHY_DISCONN (1<<0) /* PHY断开 */
#define PHY_10M_FLL (1<<1) /* 10M全双工 */ #define PHY_10M_FLL (1<<1) /* 10M全双工 */
#define PHY_10M_HALF (1<<2) /* 10M半双工 */ #define PHY_10M_HALF (1<<2) /* 10M半双工 */
#define PHY_100M_FLL (1<<3) /* 100M全双工 */ #define PHY_100M_FLL (1<<3) /* 100M全双工 */
#define PHY_100M_HALF (1<<4) /* 100M半双工 */ #define PHY_100M_HALF (1<<4) /* 100M半双工 */
#define PHY_AUTO (1<<5) /* PHY自动模式CMD10H_SET_PHY */ #define PHY_AUTO (1<<5) /* PHY自动模式CMD10H_SET_PHY */
#define PHY_ERROR (1<<6) /* PHY错误 */ #define PHY_ERROR (1<<6) /* PHY错误 */
/* CH395 MAC过滤 */ /* CH395 MAC过滤 */
#define MAC_FILT_RECV_BORADPKT (1<<0) /* 使能接收广播包 */ #define MAC_FILT_RECV_BORADPKT (1<<0) /* 使能接收广播包 */
#define MAC_FILT_RECV_ALL (1<<1) /* 使能接收所有数据包 */ #define MAC_FILT_RECV_ALL (1<<1) /* 使能接收所有数据包 */
#define MAC_FILT_RECV_MULTIPKT (1<<2) /* 使能接收多播包 */ #define MAC_FILT_RECV_MULTIPKT (1<<2) /* 使能接收多播包 */
#define MAC_FILT_RECV_ENABLE (1<<3) /* 使能接收 */ #define MAC_FILT_RECV_ENABLE (1<<3) /* 使能接收 */
#define MAC_FILT_SEND_ENABLE (1<<4) /* 使能发送 */ #define MAC_FILT_SEND_ENABLE (1<<4) /* 使能发送 */
/* 中断状态 */ /* 中断状态 */
/* 以下为GLOB_INT会产生的状态 */ /* 以下为GLOB_INT会产生的状态 */
#define GINT_STAT_UNREACH (1<<0) /* 不可达中断 */ #define GINT_STAT_UNREACH (1<<0) /* 不可达中断 */
#define GINT_STAT_IP_CONFLI (1<<1) /* IP冲突 */ #define GINT_STAT_IP_CONFLI (1<<1) /* IP冲突 */
#define GINT_STAT_PHY_CHANGE (1<<2) /* PHY状态改变 */ #define GINT_STAT_PHY_CHANGE (1<<2) /* PHY状态改变 */
#define GINT_STAT_DHCP (1<<3) /* PHY状态改变 */ #define GINT_STAT_DHCP (1<<3) /* PHY状态改变 */
#define GINT_STAT_SOCK0 (1<<4) /* socket0 产生中断 */ #define GINT_STAT_SOCK0 (1<<4) /* socket0 产生中断 */
#define GINT_STAT_SOCK1 (1<<5) /* socket1 产生中断 */ #define GINT_STAT_SOCK1 (1<<5) /* socket1 产生中断 */
#define GINT_STAT_SOCK2 (1<<6) /* socket2 产生中断 */ #define GINT_STAT_SOCK2 (1<<6) /* socket2 产生中断 */
#define GINT_STAT_SOCK3 (1<<7) /* socket3 产生中断 */ #define GINT_STAT_SOCK3 (1<<7) /* socket3 产生中断 */
#define GINT_STAT_SOCK4 (1<<8) /* scoket4 产生中断 */ #define GINT_STAT_SOCK4 (1<<8) /* scoket4 产生中断 */
#define GINT_STAT_SOCK5 (1<<9) /* scoket5 产生中断 */ #define GINT_STAT_SOCK5 (1<<9) /* scoket5 产生中断 */
#define GINT_STAT_SOCK6 (1<<10) /* scoket6 产生中断 */ #define GINT_STAT_SOCK6 (1<<10) /* scoket6 产生中断 */
#define GINT_STAT_SOCK7 (1<<11) /* scoket7 产生中断 */ #define GINT_STAT_SOCK7 (1<<11) /* scoket7 产生中断 */
/* 以下为Sn_INT会产生的状态 */ /* 以下为Sn_INT会产生的状态 */
#define SINT_STAT_SENBUF_FREE (1<<0) /* 发送缓冲区空闲 */ #define SINT_STAT_SENBUF_FREE (1<<0) /* 发送缓冲区空闲 */
#define SINT_STAT_SEND_OK (1<<1) /* 发送成功 */ #define SINT_STAT_SEND_OK (1<<1) /* 发送成功 */
#define SINT_STAT_RECV (1<<2) /* socket端口接收到数据或者接收缓冲区不为空 */ #define SINT_STAT_RECV (1<<2) /* socket端口接收到数据或者接收缓冲区不为空 */
#define SINT_STAT_CONNECT (1<<3) /* 连接成功,TCP模式下产生此中断 */ #define SINT_STAT_CONNECT (1<<3) /* 连接成功,TCP模式下产生此中断 */
#define SINT_STAT_DISCONNECT (1<<4) /* 连接断开,TCP模式下产生此中断 */ #define SINT_STAT_DISCONNECT (1<<4) /* 连接断开,TCP模式下产生此中断 */
#define SINT_STAT_TIM_OUT (1<<6) /* ARP和TCP模式下会发生此中断 */ #define SINT_STAT_TIM_OUT (1<<6) /* ARP和TCP模式下会发生此中断 */
/* 获取命令状态 */ /* 获取命令状态 */
#define CMD_ERR_SUCCESS 0x00 /* 命令操作成功 */ #define CMD_ERR_SUCCESS 0x00 /* 命令操作成功 */
#define CMD_RET_ABORT 0x5F /* 命令操作失败 */ #define CMD_RET_ABORT 0x5F /* 命令操作失败 */
#define CH395_ERR_BUSY 0x10 /* 忙状态,表示当前正在执行命令 */ #define CH395_ERR_BUSY 0x10 /* 忙状态,表示当前正在执行命令 */
#define CH395_ERR_MEM 0x11 /* 内存错误 */ #define CH395_ERR_MEM 0x11 /* 内存错误 */
#define CH395_ERR_BUF 0x12 /* 缓冲区错误 */ #define CH395_ERR_BUF 0x12 /* 缓冲区错误 */
#define CH395_ERR_TIMEOUT 0x13 /* 超时 */ #define CH395_ERR_TIMEOUT 0x13 /* 超时 */
#define CH395_ERR_RTE 0x14 /* 路由错误*/ #define CH395_ERR_RTE 0x14 /* 路由错误*/
#define CH395_ERR_ABRT 0x15 /* 连接停止*/ #define CH395_ERR_ABRT 0x15 /* 连接停止*/
#define CH395_ERR_RST 0x16 /* 连接复位 */ #define CH395_ERR_RST 0x16 /* 连接复位 */
#define CH395_ERR_CLSD 0x17 /* 连接关闭/socket 在关闭状态 */ #define CH395_ERR_CLSD 0x17 /* 连接关闭/socket 在关闭状态 */
#define CH395_ERR_CONN 0x18 /* 无连接 */ #define CH395_ERR_CONN 0x18 /* 无连接 */
#define CH395_ERR_VAL 0x19 /* 错误的值 */ #define CH395_ERR_VAL 0x19 /* 错误的值 */
#define CH395_ERR_ARG 0x1a /* 错误的参数 */ #define CH395_ERR_ARG 0x1a /* 错误的参数 */
#define CH395_ERR_USE 0x1b /* 已经被使用 */ #define CH395_ERR_USE 0x1b /* 已经被使用 */
#define CH395_ERR_IF 0x1c /* MAC错误 */ #define CH395_ERR_IF 0x1c /* MAC错误 */
#define CH395_ERR_ISCONN 0x1d /* 已连接 */ #define CH395_ERR_ISCONN 0x1d /* 已连接 */
#define CH395_ERR_OPEN 0X20 /* 已经打开 */ #define CH395_ERR_OPEN 0X20 /* 已经打开 */
#define CH395_ERR_UNKNOW 0xFA /* 未知错误 */ #define CH395_ERR_UNKNOW 0xFA /* 未知错误 */
/* PPP状态 */ /* PPP状态 */
#define CH395_PPP_SUCCESS 0 /* 成功 */ #define CH395_PPP_SUCCESS 0 /* 成功 */
#define CH395_PPPERR_PARM 1 /* 无效参数 */ #define CH395_PPPERR_PARM 1 /* 无效参数 */
#define CH395_PPPERR_OPEN 2 /* 无法打开PPP会话 */ #define CH395_PPPERR_OPEN 2 /* 无法打开PPP会话 */
#define CH395_PPPERR_DEVICE 3 /* 无效的PPP设备 */ #define CH395_PPPERR_DEVICE 3 /* 无效的PPP设备 */
#define CH395_PPPERR_ALLOC 4 /* 资源分配失败 */ #define CH395_PPPERR_ALLOC 4 /* 资源分配失败 */
#define CH395_PPPERR_USER 5 /* 用户中断 */ #define CH395_PPPERR_USER 5 /* 用户中断 */
#define CH395_PPPERR_CONNECT 6 /* 连接断开 */ #define CH395_PPPERR_CONNECT 6 /* 连接断开 */
#define CH395_PPPERR_AUTHFAIL 7 /* 挑战鉴别失败 */ #define CH395_PPPERR_AUTHFAIL 7 /* 挑战鉴别失败 */
#define CH395_PPPERR_PROTOCOL 8 /* 握手协议失败 */ #define CH395_PPPERR_PROTOCOL 8 /* 握手协议失败 */
#define CH395_PPPERR_TIME_OUT 9 /* 超时失败 */ #define CH395_PPPERR_TIME_OUT 9 /* 超时失败 */
#define CH395_PPPERR_CLOSE 10 /* 关闭失败 */ #define CH395_PPPERR_CLOSE 10 /* 关闭失败 */
/* 不可达代码 */ /* 不可达代码 */
#define UNREACH_CODE_HOST 0 /* 主机不可达 */ #define UNREACH_CODE_HOST 0 /* 主机不可达 */
#define UNREACH_CODE_NET 1 /* 网络不可达 */ #define UNREACH_CODE_NET 1 /* 网络不可达 */
#define UNREACH_CODE_PROTOCOL 2 /* 协议不可达 */ #define UNREACH_CODE_PROTOCOL 2 /* 协议不可达 */
#define UNREACH_CODE_PROT 3 /* 端口不可达 */ #define UNREACH_CODE_PROT 3 /* 端口不可达 */
/* 其他值请参考RFC792文档 */ /* 其他值请参考RFC792文档 */
/* 命令包头 */ /* 命令包头 */
#define SER_SYNC_CODE1 0x57 /* 串口命令同步码1 */ #define SER_SYNC_CODE1 0x57 /* 串口命令同步码1 */
#define SER_SYNC_CODE2 0xAB /* 串口命令同步码2 */ #define SER_SYNC_CODE2 0xAB /* 串口命令同步码2 */
/* TCP状态 */ /* TCP状态 */
#define TCP_CLOSED 0 #define TCP_CLOSED 0
#define TCP_LISTEN 1 #define TCP_LISTEN 1
#define TCP_SYN_SENT 2 #define TCP_SYN_SENT 2
@ -251,19 +251,19 @@ extern "C" {
#define TCP_LAST_ACK 9 #define TCP_LAST_ACK 9
#define TCP_TIME_WAIT 10 #define TCP_TIME_WAIT 10
/* GPIO寄存器地址 */ /* GPIO寄存器地址 */
#define GPIO_DIR_REG 0x80 /* 寄存器方向寄存器1输出;0:输入 */ #define GPIO_DIR_REG 0x80 /* 寄存器方向寄存器1输出;0:输入 */
#define GPIO_IN_REG 0x81 /* GPIO输入寄存器 */ #define GPIO_IN_REG 0x81 /* GPIO输入寄存器 */
#define GPIO_OUT_REG 0x82 /* GPIO输出寄存器 */ #define GPIO_OUT_REG 0x82 /* GPIO输出寄存器 */
#define GPIO_CLR_REG 0x83 /* GPIO输出清除: 0=keep, 1=clear */ #define GPIO_CLR_REG 0x83 /* GPIO输出清除: 0=keep, 1=clear */
#define GPIO_PU_REG 0x84 /* GPIO上拉使能寄存器 */ #define GPIO_PU_REG 0x84 /* GPIO上拉使能寄存器 */
#define GPIO_PD_REG 0x85 /* GPIO下拉使能寄存器 */ #define GPIO_PD_REG 0x85 /* GPIO下拉使能寄存器 */
/* 功能参数 */ /* 功能参数 */
#define FUN_PARA_FLAG_TCP_SERVER (1<<1) /* tcp server 多连接模式标志0X44版本及以后支持 */ #define FUN_PARA_FLAG_TCP_SERVER (1<<1) /* tcp server 多连接模式标志0X44版本及以后支持 */
#define FUN_PARA_FLAG_LOW_PWR (1<<2) /* 低耗能模式 */ #define FUN_PARA_FLAG_LOW_PWR (1<<2) /* 低耗能模式 */
#define SOCK_CTRL_FLAG_SOCKET_CLOSE (1<<3) /* CH395不主动关闭Socket */ #define SOCK_CTRL_FLAG_SOCKET_CLOSE (1<<3) /* CH395不主动关闭Socket */
#define SOCK_DISABLE_SEND_OK_INT (1<<4) /* send ok中断控制位为1表示关闭send ok中断 */ #define SOCK_DISABLE_SEND_OK_INT (1<<4) /* send ok中断控制位为1表示关闭send ok中断 */
#ifdef __cplusplus #ifdef __cplusplus
} }

File diff suppressed because one or more lines are too long

View File

@ -185,6 +185,11 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>p_flt_window,0x0A</ItemText> <ItemText>p_flt_window,0x0A</ItemText>
</Ww> </Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>DisState</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>

Binary file not shown.

View File

@ -27,9 +27,11 @@ Project File Date: 08/20/2024
<h2>Output:</h2> <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' *** 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' Build target 'VOQC'
compiling encoder.c...
compiling provalctrl.c... compiling provalctrl.c...
compiling main.c...
linking... 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... FromELF: creating hex file...
"VOQC\VOQC.axf" - 0 Error(s), 0 Warning(s). "VOQC\VOQC.axf" - 0 Error(s), 0 Warning(s).
@ -54,7 +56,7 @@ Package Vendor: Keil
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
* Component: ARM::CMSIS:CORE@5.6.0 * Component: ARM::CMSIS:CORE@5.6.0
Build Time Elapsed: 00:00:05 Build Time Elapsed: 00:00:11
</pre> </pre>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
<title>Static Call Graph - [VOQC\VOQC.axf]</title></head> <title>Static Call Graph - [VOQC\VOQC.axf]</title></head>
<body><HR> <body><HR>
<H1>Static Call Graph for image VOQC\VOQC.axf</H1><HR> <H1>Static Call Graph for image VOQC\VOQC.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060960: Last Updated: Tue Aug 20 14:28:03 2024 <BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060960: Last Updated: Tue Aug 20 15:07:19 2024
<BR><P> <BR><P>
<H3>Maximum Stack Usage = 452 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)</H3><H3> <H3>Maximum Stack Usage = 452 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</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)) <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 <BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = __aeabi_uldivmod
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetSysClockFreq <BR>[Called By]<UL><LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SetConfig
<LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SetConfig <LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetSysClockFreq
<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_ll_sdiv <LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_ll_sdiv
</UL> </UL>
@ -590,10 +590,10 @@ Global Symbols
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin <BR>[Calls]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us <LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_write_byte <LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_write_byte
<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_read_byte <LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_read_byte
<LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ADS1256WREG <LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ADS1256WREG
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul <LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d <LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d
</UL> </UL>
@ -604,8 +604,8 @@ Global Symbols
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = ADS1256WREG &rArr; ads1256_write_byte &rArr; delay_us <BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = ADS1256WREG &rArr; ads1256_write_byte &rArr; delay_us
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin <BR>[Calls]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_write_byte <LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_write_byte
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[103]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_init <BR>[Called By]<UL><LI><a href="#[103]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1256_init
<LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ADS1256ReadData <LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ADS1256ReadData
@ -799,8 +799,8 @@ Global Symbols
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;DMA_SetConfig <BR>[Calls]<UL><LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;DMA_SetConfig
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_ADC_Start_DMA <BR>[Called By]<UL><LI><a href="#[da]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit_DMA
<LI><a href="#[da]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit_DMA <LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_ADC_Start_DMA
</UL> </UL>
<P><STRONG><a name="[a1]"></a>HAL_Delay</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, stm32f4xx_hal.o(i.HAL_Delay)) <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]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig <LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig <LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay <LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort
<LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit <LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit
<LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout <LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort
</UL> </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)) <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)) <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 &rArr; modbus_process_rtu &rArr; modbus_analysis_rtu &rArr; writemulticoil_rtu &rArr; modbus_errfunction_rtu &rArr; uart_send &rArr; HAL_UART_Transmit_DMA &rArr; HAL_DMA_Start_IT &rArr; DMA_SetConfig <BR><BR>[Stack]<UL><LI>Max Depth = 428<LI>Call Chain = HAL_TIM_PeriodElapsedCallback &rArr; modbus_process_rtu &rArr; modbus_analysis_rtu &rArr; writemulticoil_rtu &rArr; modbus_errfunction_rtu &rArr; uart_send &rArr; HAL_UART_Transmit_DMA &rArr; HAL_DMA_Start_IT &rArr; DMA_SetConfig
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Stop_IT <BR>[Calls]<UL><LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;modbus_process_rtu
<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;modbus_process_rtu <LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Stop_IT
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;tim6_cnt <LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;tim6_cnt
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_IRQHandler <BR>[Called By]<UL><LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_IRQHandler
@ -1166,27 +1166,27 @@ Global Symbols
</UL> </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)) <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]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_IRQHandler <BR><BR>[Called By]<UL><LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Receive_IT
<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Receive_IT <LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_IRQHandler
</UL> </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)) <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]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_IRQHandler <BR><BR>[Called By]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DMAError
<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DMAError
<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DMAAbortOnError <LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DMAAbortOnError
<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_IRQHandler
</UL> </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)) <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 &rArr; UART_Receive_IT &rArr; HAL_UART_RxCpltCallback &rArr; modbus_rx_cb &rArr; HAL_UART_Transmit &rArr; UART_WaitOnFlagUntilTimeout <BR><BR>[Stack]<UL><LI>Max Depth = 152<LI>Call Chain = HAL_UART_IRQHandler &rArr; UART_Receive_IT &rArr; HAL_UART_RxCpltCallback &rArr; modbus_rx_cb &rArr; HAL_UART_Transmit &rArr; UART_WaitOnFlagUntilTimeout
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort <BR>[Calls]<UL><LI><a href="#[cd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_ErrorCallback
<LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort_IT
<LI><a href="#[cd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_ErrorCallback
<LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UARTEx_RxEventCallback <LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UARTEx_RxEventCallback
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Transmit_IT <LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Transmit_IT
<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Receive_IT <LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Receive_IT
<LI><a href="#[d0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_EndTransmit_IT <LI><a href="#[d0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_EndTransmit_IT
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_EndRxTransfer <LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_EndRxTransfer
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort
<LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort_IT
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART6_IRQHandler <BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART6_IRQHandler
<LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART3_IRQHandler <LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;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)) <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 &rArr; UART_WaitOnFlagUntilTimeout <BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = HAL_UART_Transmit &rArr; UART_WaitOnFlagUntilTimeout
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick <BR>[Calls]<UL><LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout
<LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout <LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[d7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;modbus_rx_cb <BR>[Called By]<UL><LI><a href="#[d7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;modbus_rx_cb
</UL> </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)) <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 &rArr; ads1220_writeregister &rArr; ads1220_write_byte &rArr; delay_us <BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = ads1220_setchannl &rArr; ads1220_writeregister &rArr; ads1220_write_byte &rArr; delay_us
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin <BR>[Calls]<UL><LI><a href="#[ff]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1220_writeregister
<LI><a href="#[ff]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1220_writeregister
<LI><a href="#[fe]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1220_write_byte <LI><a href="#[fe]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1220_write_byte
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[f5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1220_get_data <BR>[Called By]<UL><LI><a href="#[f5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ads1220_get_data
</UL> </UL>
@ -1810,10 +1810,10 @@ Global Symbols
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin <BR>[Calls]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[113]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;encoder_init <LI><a href="#[113]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;encoder_init
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[f3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_74hc165_read_byte <LI><a href="#[f3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_74hc165_read_byte
<LI><a href="#[111]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;hc595_write_data <LI><a href="#[111]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;hc595_write_data
<LI><a href="#[112]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;disp_out <LI><a href="#[112]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;disp_out
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[110]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;led_ctrl <LI><a href="#[110]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;led_ctrl
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
@ -2054,9 +2054,9 @@ Global Symbols
<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = modbus_rx_cb &rArr; HAL_UART_Transmit &rArr; UART_WaitOnFlagUntilTimeout <BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = modbus_rx_cb &rArr; HAL_UART_Transmit &rArr; UART_WaitOnFlagUntilTimeout
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[11c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Start_IT <BR>[Calls]<UL><LI><a href="#[11c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Start_IT
<LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Stop_IT
<LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit <LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit
<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Receive_IT <LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Receive_IT
<LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Stop_IT
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_RxCpltCallback <BR>[Called By]<UL><LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_RxCpltCallback
</UL> </UL>
@ -2416,9 +2416,9 @@ Local Symbols
<BR>[Address Reference Count : 1]<UL><LI> stm32f4xx_hal_uart.o(i.HAL_UART_Transmit_DMA) <BR>[Address Reference Count : 1]<UL><LI> stm32f4xx_hal_uart.o(i.HAL_UART_Transmit_DMA)
</UL> </UL>
<P><STRONG><a name="[cb]"></a>UART_EndRxTransfer</STRONG> (Thumb, 108 bytes, Stack size 0 bytes, stm32f4xx_hal_uart.o(i.UART_EndRxTransfer)) <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]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_IRQHandler <BR><BR>[Called By]<UL><LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout
<LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout
<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DMAError <LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DMAError
<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_IRQHandler
</UL> </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)) <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)) <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 <BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = UART_WaitOnFlagUntilTimeout
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick <BR>[Calls]<UL><LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_EndRxTransfer
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_EndRxTransfer <LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit <BR>[Called By]<UL><LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit
</UL> </UL>

View File

@ -3104,83 +3104,83 @@ Image Symbol Table
i.ads1256_read_byte 0x08004e24 Section 0 ads1256.o(i.ads1256_read_byte) 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.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_ctrl 0x08004ef0 Section 0 provalctrl.o(i.analog_ctrl)
i.analog_gather 0x080050e8 Section 0 adcs.o(i.analog_gather) i.analog_gather 0x080050ec Section 0 adcs.o(i.analog_gather)
i.ao_blf1_set 0x08005138 Section 0 dac7311.o(i.ao_blf1_set) i.ao_blf1_set 0x0800513c Section 0 dac7311.o(i.ao_blf1_set)
i.ao_blf2_set 0x08005184 Section 0 dac7311.o(i.ao_blf2_set) i.ao_blf2_set 0x08005188 Section 0 dac7311.o(i.ao_blf2_set)
i.ao_dwq_set 0x080051d0 Section 0 dac7311.o(i.ao_dwq_set) i.ao_dwq_set 0x080051d4 Section 0 dac7311.o(i.ao_dwq_set)
i.ao_write 0x08005224 Section 0 dac7311.o(i.ao_write) i.ao_write 0x08005228 Section 0 dac7311.o(i.ao_write)
i.clrcs 0x08005378 Section 0 ms5803.o(i.clrcs) i.clrcs 0x0800537c Section 0 ms5803.o(i.clrcs)
i.dac7311_init 0x08005410 Section 0 dac7311.o(i.dac7311_init) i.dac7311_init 0x08005414 Section 0 dac7311.o(i.dac7311_init)
i.delay_ms 0x08005450 Section 0 main.o(i.delay_ms) i.delay_ms 0x08005454 Section 0 main.o(i.delay_ms)
i.delay_tick 0x0800545a Section 0 main.o(i.delay_tick) i.delay_tick 0x0800545e Section 0 main.o(i.delay_tick)
i.delay_us 0x08005468 Section 0 main.o(i.delay_us) i.delay_us 0x0800546c Section 0 main.o(i.delay_us)
i.digital_ctrl 0x080054c8 Section 0 gpios.o(i.digital_ctrl) i.digital_ctrl 0x080054cc Section 0 gpios.o(i.digital_ctrl)
i.disp_out 0x080055e8 Section 0 hc595.o(i.disp_out) i.disp_out 0x080055ec Section 0 hc595.o(i.disp_out)
i.ds18b20_check 0x08005614 Section 0 ds18b20.o(i.ds18b20_check) i.ds18b20_check 0x08005618 Section 0 ds18b20.o(i.ds18b20_check)
i.ds18b20_get_temp 0x08005674 Section 0 ds18b20.o(i.ds18b20_get_temp) i.ds18b20_get_temp 0x08005678 Section 0 ds18b20.o(i.ds18b20_get_temp)
i.ds18b20_init 0x080056e0 Section 0 ds18b20.o(i.ds18b20_init) i.ds18b20_init 0x080056e4 Section 0 ds18b20.o(i.ds18b20_init)
i.ds18b20_read_bit 0x080056fc Section 0 ds18b20.o(i.ds18b20_read_bit) i.ds18b20_read_bit 0x08005700 Section 0 ds18b20.o(i.ds18b20_read_bit)
i.ds18b20_read_byte 0x08005760 Section 0 ds18b20.o(i.ds18b20_read_byte) i.ds18b20_read_byte 0x08005764 Section 0 ds18b20.o(i.ds18b20_read_byte)
i.ds18b20_rst 0x08005784 Section 0 ds18b20.o(i.ds18b20_rst) i.ds18b20_rst 0x08005788 Section 0 ds18b20.o(i.ds18b20_rst)
i.ds18b20_start 0x080057c4 Section 0 ds18b20.o(i.ds18b20_start) i.ds18b20_start 0x080057c8 Section 0 ds18b20.o(i.ds18b20_start)
i.ds18b20_write_byte 0x080057dc Section 0 ds18b20.o(i.ds18b20_write_byte) i.ds18b20_write_byte 0x080057e0 Section 0 ds18b20.o(i.ds18b20_write_byte)
i.encoder_init 0x08005854 Section 0 encoder.o(i.encoder_init) i.encoder_init 0x08005858 Section 0 encoder.o(i.encoder_init)
i.encoder_run 0x080058ac Section 0 encoder.o(i.encoder_run) i.encoder_run 0x080058b0 Section 0 encoder.o(i.encoder_run)
i.hc595_write_data 0x0800593c Section 0 hc595.o(i.hc595_write_data) i.hc595_write_data 0x08005940 Section 0 hc595.o(i.hc595_write_data)
i.led_ctrl 0x080059a8 Section 0 gpios.o(i.led_ctrl) i.led_ctrl 0x080059ac Section 0 gpios.o(i.led_ctrl)
i.main 0x080059cc Section 0 main.o(i.main) i.main 0x080059d0 Section 0 main.o(i.main)
i.mf5803_loop 0x08005a50 Section 0 mf5803.o(i.mf5803_loop) i.mf5803_loop 0x08005a54 Section 0 mf5803.o(i.mf5803_loop)
i.mf5803_setup 0x08005bf8 Section 0 mf5803.o(i.mf5803_setup) i.mf5803_setup 0x08005bfc Section 0 mf5803.o(i.mf5803_setup)
i.modbus_analysis_rtu 0x08005cb8 Section 0 modbus_rtu.o(i.modbus_analysis_rtu) i.modbus_analysis_rtu 0x08005cbc 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_errfunction_rtu 0x08005d70 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_process_rtu 0x08005df0 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_rtu_init 0x08005e34 Section 0 modbus_rtu.o(i.modbus_rtu_init)
i.modbus_rx_cb 0x08005e84 Section 0 modbus_rtu.o(i.modbus_rx_cb) i.modbus_rx_cb 0x08005e88 Section 0 modbus_rtu.o(i.modbus_rx_cb)
i.prov_calibrate_step 0x08005f04 Section 0 provalctrl.o(i.prov_calibrate_step) i.prov_calibrate_step 0x08005f08 Section 0 provalctrl.o(i.prov_calibrate_step)
i.prov_ctrl 0x08006038 Section 0 provalctrl.o(i.prov_ctrl) i.prov_ctrl 0x0800603c Section 0 provalctrl.o(i.prov_ctrl)
i.prov_init 0x080060f8 Section 0 provalctrl.o(i.prov_init) i.prov_init 0x080060fc Section 0 provalctrl.o(i.prov_init)
i.readcoilstate_rtu 0x08006200 Section 0 modbus_rtu.o(i.readcoilstate_rtu) i.readcoilstate_rtu 0x08006204 Section 0 modbus_rtu.o(i.readcoilstate_rtu)
i.readdisinputstate_rtu 0x08006350 Section 0 modbus_rtu.o(i.readdisinputstate_rtu) i.readdisinputstate_rtu 0x08006354 Section 0 modbus_rtu.o(i.readdisinputstate_rtu)
i.readholdreg_rtu 0x0800649c Section 0 modbus_rtu.o(i.readholdreg_rtu) i.readholdreg_rtu 0x080064a0 Section 0 modbus_rtu.o(i.readholdreg_rtu)
i.readinputreg_rtu 0x080065a8 Section 0 modbus_rtu.o(i.readinputreg_rtu) i.readinputreg_rtu 0x080065ac Section 0 modbus_rtu.o(i.readinputreg_rtu)
i.setcs 0x080066ac Section 0 ms5803.o(i.setcs) i.setcs 0x080066b0 Section 0 ms5803.o(i.setcs)
i.tim6_cnt 0x08006714 Section 0 timer.o(i.tim6_cnt) i.tim6_cnt 0x08006718 Section 0 timer.o(i.tim6_cnt)
i.uart_send 0x08006898 Section 0 uarts.o(i.uart_send) i.uart_send 0x0800689c Section 0 uarts.o(i.uart_send)
i.wf5803_ReadReg 0x080068ac Section 0 mf5803.o(i.wf5803_ReadReg) i.wf5803_ReadReg 0x080068b0 Section 0 mf5803.o(i.wf5803_ReadReg)
i.wf5803_WriteReg 0x080068ce Section 0 mf5803.o(i.wf5803_WriteReg) i.wf5803_WriteReg 0x080068d2 Section 0 mf5803.o(i.wf5803_WriteReg)
i.writemulticoil_rtu 0x080068f0 Section 0 modbus_rtu.o(i.writemulticoil_rtu) i.writemulticoil_rtu 0x080068f4 Section 0 modbus_rtu.o(i.writemulticoil_rtu)
i.writemultireg_rtu 0x08006a3c Section 0 modbus_rtu.o(i.writemultireg_rtu) i.writemultireg_rtu 0x08006a40 Section 0 modbus_rtu.o(i.writemultireg_rtu)
i.writesinglecoil_rtu 0x08006b40 Section 0 modbus_rtu.o(i.writesinglecoil_rtu) i.writesinglecoil_rtu 0x08006b44 Section 0 modbus_rtu.o(i.writesinglecoil_rtu)
i.writesinglereg_rtu 0x08006c04 Section 0 modbus_rtu.o(i.writesinglereg_rtu) i.writesinglereg_rtu 0x08006c08 Section 0 modbus_rtu.o(i.writesinglereg_rtu)
x$fpl$dadd 0x08006cbc Section 336 daddsub_clz.o(x$fpl$dadd) x$fpl$dadd 0x08006cc0 Section 336 daddsub_clz.o(x$fpl$dadd)
$v0 0x08006cbc Number 0 daddsub_clz.o(x$fpl$dadd) $v0 0x08006cc0 Number 0 daddsub_clz.o(x$fpl$dadd)
_dadd1 0x08006ccd Thumb Code 0 daddsub_clz.o(x$fpl$dadd) _dadd1 0x08006cd1 Thumb Code 0 daddsub_clz.o(x$fpl$dadd)
x$fpl$ddiv 0x08006e0c Section 688 ddiv.o(x$fpl$ddiv) x$fpl$ddiv 0x08006e10 Section 688 ddiv.o(x$fpl$ddiv)
$v0 0x08006e0c Number 0 ddiv.o(x$fpl$ddiv) $v0 0x08006e10 Number 0 ddiv.o(x$fpl$ddiv)
ddiv_entry 0x08006e13 Thumb Code 0 ddiv.o(x$fpl$ddiv) ddiv_entry 0x08006e17 Thumb Code 0 ddiv.o(x$fpl$ddiv)
x$fpl$dfix 0x080070bc Section 94 dfix.o(x$fpl$dfix) x$fpl$dfix 0x080070c0 Section 94 dfix.o(x$fpl$dfix)
$v0 0x080070bc Number 0 dfix.o(x$fpl$dfix) $v0 0x080070c0 Number 0 dfix.o(x$fpl$dfix)
x$fpl$dfixu 0x0800711c Section 90 dfixu.o(x$fpl$dfixu) x$fpl$dfixu 0x08007120 Section 90 dfixu.o(x$fpl$dfixu)
$v0 0x0800711c Number 0 dfixu.o(x$fpl$dfixu) $v0 0x08007120 Number 0 dfixu.o(x$fpl$dfixu)
x$fpl$dflt 0x08007176 Section 46 dflt_clz.o(x$fpl$dflt) x$fpl$dflt 0x0800717a Section 46 dflt_clz.o(x$fpl$dflt)
$v0 0x08007176 Number 0 dflt_clz.o(x$fpl$dflt) $v0 0x0800717a Number 0 dflt_clz.o(x$fpl$dflt)
x$fpl$dfltll 0x080071a4 Section 162 dfltll_clz.o(x$fpl$dfltll) x$fpl$dfltll 0x080071a8 Section 162 dfltll_clz.o(x$fpl$dfltll)
$v0 0x080071a4 Number 0 dfltll_clz.o(x$fpl$dfltll) $v0 0x080071a8 Number 0 dfltll_clz.o(x$fpl$dfltll)
x$fpl$dmul 0x08007248 Section 340 dmul.o(x$fpl$dmul) x$fpl$dmul 0x0800724c Section 340 dmul.o(x$fpl$dmul)
$v0 0x08007248 Number 0 dmul.o(x$fpl$dmul) $v0 0x0800724c Number 0 dmul.o(x$fpl$dmul)
x$fpl$dnaninf 0x0800739c Section 156 dnaninf.o(x$fpl$dnaninf) x$fpl$dnaninf 0x080073a0 Section 156 dnaninf.o(x$fpl$dnaninf)
$v0 0x0800739c Number 0 dnaninf.o(x$fpl$dnaninf) $v0 0x080073a0 Number 0 dnaninf.o(x$fpl$dnaninf)
x$fpl$dretinf 0x08007438 Section 12 dretinf.o(x$fpl$dretinf) x$fpl$dretinf 0x0800743c Section 12 dretinf.o(x$fpl$dretinf)
$v0 0x08007438 Number 0 dretinf.o(x$fpl$dretinf) $v0 0x0800743c Number 0 dretinf.o(x$fpl$dretinf)
x$fpl$dsub 0x08007444 Section 468 daddsub_clz.o(x$fpl$dsub) x$fpl$dsub 0x08007448 Section 468 daddsub_clz.o(x$fpl$dsub)
$v0 0x08007444 Number 0 daddsub_clz.o(x$fpl$dsub) $v0 0x08007448 Number 0 daddsub_clz.o(x$fpl$dsub)
_dsub1 0x08007455 Thumb Code 0 daddsub_clz.o(x$fpl$dsub) _dsub1 0x08007459 Thumb Code 0 daddsub_clz.o(x$fpl$dsub)
x$fpl$fpinit 0x08007618 Section 10 fpinit.o(x$fpl$fpinit) x$fpl$fpinit 0x0800761c Section 10 fpinit.o(x$fpl$fpinit)
$v0 0x08007618 Number 0 fpinit.o(x$fpl$fpinit) $v0 0x0800761c Number 0 fpinit.o(x$fpl$fpinit)
.constdata 0x08007622 Section 8 stm32f4xx_hal_dma.o(.constdata) .constdata 0x08007626 Section 8 stm32f4xx_hal_dma.o(.constdata)
x$fpl$usenofp 0x08007622 Section 0 usenofp.o(x$fpl$usenofp) x$fpl$usenofp 0x08007626 Section 0 usenofp.o(x$fpl$usenofp)
flagBitshiftOffset 0x08007622 Data 8 stm32f4xx_hal_dma.o(.constdata) flagBitshiftOffset 0x08007626 Data 8 stm32f4xx_hal_dma.o(.constdata)
.constdata 0x0800762a Section 24 system_stm32f4xx.o(.constdata) .constdata 0x0800762e Section 24 system_stm32f4xx.o(.constdata)
.data 0x20000000 Section 9 stm32f4xx_hal.o(.data) .data 0x20000000 Section 9 stm32f4xx_hal.o(.data)
.data 0x2000000c Section 4 system_stm32f4xx.o(.data) .data 0x2000000c Section 4 system_stm32f4xx.o(.data)
.data 0x20000010 Section 24 ads1256.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_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) 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_ctrl 0x08004ef1 Thumb Code 452 provalctrl.o(i.analog_ctrl)
analog_gather 0x080050e9 Thumb Code 64 adcs.o(i.analog_gather) analog_gather 0x080050ed Thumb Code 64 adcs.o(i.analog_gather)
ao_blf1_set 0x08005139 Thumb Code 64 dac7311.o(i.ao_blf1_set) ao_blf1_set 0x0800513d Thumb Code 64 dac7311.o(i.ao_blf1_set)
ao_blf2_set 0x08005185 Thumb Code 64 dac7311.o(i.ao_blf2_set) ao_blf2_set 0x08005189 Thumb Code 64 dac7311.o(i.ao_blf2_set)
ao_dwq_set 0x080051d1 Thumb Code 68 dac7311.o(i.ao_dwq_set) ao_dwq_set 0x080051d5 Thumb Code 68 dac7311.o(i.ao_dwq_set)
ao_write 0x08005225 Thumb Code 326 dac7311.o(i.ao_write) ao_write 0x08005229 Thumb Code 326 dac7311.o(i.ao_write)
clrcs 0x08005379 Thumb Code 130 ms5803.o(i.clrcs) clrcs 0x0800537d Thumb Code 130 ms5803.o(i.clrcs)
dac7311_init 0x08005411 Thumb Code 56 dac7311.o(i.dac7311_init) dac7311_init 0x08005415 Thumb Code 56 dac7311.o(i.dac7311_init)
delay_ms 0x08005451 Thumb Code 10 main.o(i.delay_ms) delay_ms 0x08005455 Thumb Code 10 main.o(i.delay_ms)
delay_tick 0x0800545b Thumb Code 14 main.o(i.delay_tick) delay_tick 0x0800545f Thumb Code 14 main.o(i.delay_tick)
delay_us 0x08005469 Thumb Code 90 main.o(i.delay_us) delay_us 0x0800546d Thumb Code 90 main.o(i.delay_us)
digital_ctrl 0x080054c9 Thumb Code 260 gpios.o(i.digital_ctrl) digital_ctrl 0x080054cd Thumb Code 260 gpios.o(i.digital_ctrl)
disp_out 0x080055e9 Thumb Code 38 hc595.o(i.disp_out) disp_out 0x080055ed Thumb Code 38 hc595.o(i.disp_out)
ds18b20_check 0x08005615 Thumb Code 90 ds18b20.o(i.ds18b20_check) ds18b20_check 0x08005619 Thumb Code 90 ds18b20.o(i.ds18b20_check)
ds18b20_get_temp 0x08005675 Thumb Code 108 ds18b20.o(i.ds18b20_get_temp) ds18b20_get_temp 0x08005679 Thumb Code 108 ds18b20.o(i.ds18b20_get_temp)
ds18b20_init 0x080056e1 Thumb Code 22 ds18b20.o(i.ds18b20_init) ds18b20_init 0x080056e5 Thumb Code 22 ds18b20.o(i.ds18b20_init)
ds18b20_read_bit 0x080056fd Thumb Code 94 ds18b20.o(i.ds18b20_read_bit) ds18b20_read_bit 0x08005701 Thumb Code 94 ds18b20.o(i.ds18b20_read_bit)
ds18b20_read_byte 0x08005761 Thumb Code 34 ds18b20.o(i.ds18b20_read_byte) ds18b20_read_byte 0x08005765 Thumb Code 34 ds18b20.o(i.ds18b20_read_byte)
ds18b20_rst 0x08005785 Thumb Code 60 ds18b20.o(i.ds18b20_rst) ds18b20_rst 0x08005789 Thumb Code 60 ds18b20.o(i.ds18b20_rst)
ds18b20_start 0x080057c5 Thumb Code 24 ds18b20.o(i.ds18b20_start) ds18b20_start 0x080057c9 Thumb Code 24 ds18b20.o(i.ds18b20_start)
ds18b20_write_byte 0x080057dd Thumb Code 114 ds18b20.o(i.ds18b20_write_byte) ds18b20_write_byte 0x080057e1 Thumb Code 114 ds18b20.o(i.ds18b20_write_byte)
encoder_init 0x08005855 Thumb Code 62 encoder.o(i.encoder_init) encoder_init 0x08005859 Thumb Code 62 encoder.o(i.encoder_init)
encoder_run 0x080058ad Thumb Code 116 encoder.o(i.encoder_run) encoder_run 0x080058b1 Thumb Code 116 encoder.o(i.encoder_run)
hc595_write_data 0x0800593d Thumb Code 98 hc595.o(i.hc595_write_data) hc595_write_data 0x08005941 Thumb Code 98 hc595.o(i.hc595_write_data)
led_ctrl 0x080059a9 Thumb Code 26 gpios.o(i.led_ctrl) led_ctrl 0x080059ad Thumb Code 26 gpios.o(i.led_ctrl)
main 0x080059cd Thumb Code 126 main.o(i.main) main 0x080059d1 Thumb Code 126 main.o(i.main)
mf5803_loop 0x08005a51 Thumb Code 376 mf5803.o(i.mf5803_loop) mf5803_loop 0x08005a55 Thumb Code 376 mf5803.o(i.mf5803_loop)
mf5803_setup 0x08005bf9 Thumb Code 184 mf5803.o(i.mf5803_setup) mf5803_setup 0x08005bfd Thumb Code 184 mf5803.o(i.mf5803_setup)
modbus_analysis_rtu 0x08005cb9 Thumb Code 180 modbus_rtu.o(i.modbus_analysis_rtu) modbus_analysis_rtu 0x08005cbd 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_errfunction_rtu 0x08005d71 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_process_rtu 0x08005df1 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_rtu_init 0x08005e35 Thumb Code 58 modbus_rtu.o(i.modbus_rtu_init)
modbus_rx_cb 0x08005e85 Thumb Code 98 modbus_rtu.o(i.modbus_rx_cb) modbus_rx_cb 0x08005e89 Thumb Code 98 modbus_rtu.o(i.modbus_rx_cb)
prov_calibrate_step 0x08005f05 Thumb Code 306 provalctrl.o(i.prov_calibrate_step) prov_calibrate_step 0x08005f09 Thumb Code 306 provalctrl.o(i.prov_calibrate_step)
prov_ctrl 0x08006039 Thumb Code 180 provalctrl.o(i.prov_ctrl) prov_ctrl 0x0800603d Thumb Code 180 provalctrl.o(i.prov_ctrl)
prov_init 0x080060f9 Thumb Code 240 provalctrl.o(i.prov_init) prov_init 0x080060fd Thumb Code 240 provalctrl.o(i.prov_init)
readcoilstate_rtu 0x08006201 Thumb Code 326 modbus_rtu.o(i.readcoilstate_rtu) readcoilstate_rtu 0x08006205 Thumb Code 326 modbus_rtu.o(i.readcoilstate_rtu)
readdisinputstate_rtu 0x08006351 Thumb Code 322 modbus_rtu.o(i.readdisinputstate_rtu) readdisinputstate_rtu 0x08006355 Thumb Code 322 modbus_rtu.o(i.readdisinputstate_rtu)
readholdreg_rtu 0x0800649d Thumb Code 258 modbus_rtu.o(i.readholdreg_rtu) readholdreg_rtu 0x080064a1 Thumb Code 258 modbus_rtu.o(i.readholdreg_rtu)
readinputreg_rtu 0x080065a9 Thumb Code 252 modbus_rtu.o(i.readinputreg_rtu) readinputreg_rtu 0x080065ad Thumb Code 252 modbus_rtu.o(i.readinputreg_rtu)
setcs 0x080066ad Thumb Code 86 ms5803.o(i.setcs) setcs 0x080066b1 Thumb Code 86 ms5803.o(i.setcs)
tim6_cnt 0x08006715 Thumb Code 308 timer.o(i.tim6_cnt) tim6_cnt 0x08006719 Thumb Code 308 timer.o(i.tim6_cnt)
uart_send 0x08006899 Thumb Code 20 uarts.o(i.uart_send) uart_send 0x0800689d Thumb Code 20 uarts.o(i.uart_send)
wf5803_ReadReg 0x080068ad Thumb Code 34 mf5803.o(i.wf5803_ReadReg) wf5803_ReadReg 0x080068b1 Thumb Code 34 mf5803.o(i.wf5803_ReadReg)
wf5803_WriteReg 0x080068cf Thumb Code 34 mf5803.o(i.wf5803_WriteReg) wf5803_WriteReg 0x080068d3 Thumb Code 34 mf5803.o(i.wf5803_WriteReg)
writemulticoil_rtu 0x080068f1 Thumb Code 322 modbus_rtu.o(i.writemulticoil_rtu) writemulticoil_rtu 0x080068f5 Thumb Code 322 modbus_rtu.o(i.writemulticoil_rtu)
writemultireg_rtu 0x08006a3d Thumb Code 252 modbus_rtu.o(i.writemultireg_rtu) writemultireg_rtu 0x08006a41 Thumb Code 252 modbus_rtu.o(i.writemultireg_rtu)
writesinglecoil_rtu 0x08006b41 Thumb Code 188 modbus_rtu.o(i.writesinglecoil_rtu) writesinglecoil_rtu 0x08006b45 Thumb Code 188 modbus_rtu.o(i.writesinglecoil_rtu)
writesinglereg_rtu 0x08006c05 Thumb Code 176 modbus_rtu.o(i.writesinglereg_rtu) writesinglereg_rtu 0x08006c09 Thumb Code 176 modbus_rtu.o(i.writesinglereg_rtu)
__aeabi_dadd 0x08006cbd Thumb Code 0 daddsub_clz.o(x$fpl$dadd) __aeabi_dadd 0x08006cc1 Thumb Code 0 daddsub_clz.o(x$fpl$dadd)
_dadd 0x08006cbd Thumb Code 332 daddsub_clz.o(x$fpl$dadd) _dadd 0x08006cc1 Thumb Code 332 daddsub_clz.o(x$fpl$dadd)
__aeabi_ddiv 0x08006e0d Thumb Code 0 ddiv.o(x$fpl$ddiv) __aeabi_ddiv 0x08006e11 Thumb Code 0 ddiv.o(x$fpl$ddiv)
_ddiv 0x08006e0d Thumb Code 552 ddiv.o(x$fpl$ddiv) _ddiv 0x08006e11 Thumb Code 552 ddiv.o(x$fpl$ddiv)
__aeabi_d2iz 0x080070bd Thumb Code 0 dfix.o(x$fpl$dfix) __aeabi_d2iz 0x080070c1 Thumb Code 0 dfix.o(x$fpl$dfix)
_dfix 0x080070bd Thumb Code 94 dfix.o(x$fpl$dfix) _dfix 0x080070c1 Thumb Code 94 dfix.o(x$fpl$dfix)
__aeabi_d2uiz 0x0800711d Thumb Code 0 dfixu.o(x$fpl$dfixu) __aeabi_d2uiz 0x08007121 Thumb Code 0 dfixu.o(x$fpl$dfixu)
_dfixu 0x0800711d Thumb Code 90 dfixu.o(x$fpl$dfixu) _dfixu 0x08007121 Thumb Code 90 dfixu.o(x$fpl$dfixu)
__aeabi_i2d 0x08007177 Thumb Code 0 dflt_clz.o(x$fpl$dflt) __aeabi_i2d 0x0800717b Thumb Code 0 dflt_clz.o(x$fpl$dflt)
_dflt 0x08007177 Thumb Code 46 dflt_clz.o(x$fpl$dflt) _dflt 0x0800717b Thumb Code 46 dflt_clz.o(x$fpl$dflt)
__aeabi_l2d 0x080071a5 Thumb Code 0 dfltll_clz.o(x$fpl$dfltll) __aeabi_l2d 0x080071a9 Thumb Code 0 dfltll_clz.o(x$fpl$dfltll)
_ll_sto_d 0x080071a5 Thumb Code 162 dfltll_clz.o(x$fpl$dfltll) _ll_sto_d 0x080071a9 Thumb Code 162 dfltll_clz.o(x$fpl$dfltll)
__aeabi_dmul 0x08007249 Thumb Code 0 dmul.o(x$fpl$dmul) __aeabi_dmul 0x0800724d Thumb Code 0 dmul.o(x$fpl$dmul)
_dmul 0x08007249 Thumb Code 332 dmul.o(x$fpl$dmul) _dmul 0x0800724d Thumb Code 332 dmul.o(x$fpl$dmul)
__fpl_dnaninf 0x0800739d Thumb Code 156 dnaninf.o(x$fpl$dnaninf) __fpl_dnaninf 0x080073a1 Thumb Code 156 dnaninf.o(x$fpl$dnaninf)
__fpl_dretinf 0x08007439 Thumb Code 12 dretinf.o(x$fpl$dretinf) __fpl_dretinf 0x0800743d Thumb Code 12 dretinf.o(x$fpl$dretinf)
__aeabi_dsub 0x08007445 Thumb Code 0 daddsub_clz.o(x$fpl$dsub) __aeabi_dsub 0x08007449 Thumb Code 0 daddsub_clz.o(x$fpl$dsub)
_dsub 0x08007445 Thumb Code 464 daddsub_clz.o(x$fpl$dsub) _dsub 0x08007449 Thumb Code 464 daddsub_clz.o(x$fpl$dsub)
_fp_init 0x08007619 Thumb Code 10 fpinit.o(x$fpl$fpinit) _fp_init 0x0800761d Thumb Code 10 fpinit.o(x$fpl$fpinit)
__fplib_config_fpu_vfp 0x08007621 Thumb Code 0 fpinit.o(x$fpl$fpinit) __fplib_config_fpu_vfp 0x08007625 Thumb Code 0 fpinit.o(x$fpl$fpinit)
__fplib_config_pureend_doubles 0x08007621 Thumb Code 0 fpinit.o(x$fpl$fpinit) __fplib_config_pureend_doubles 0x08007625 Thumb Code 0 fpinit.o(x$fpl$fpinit)
__I$use$fp 0x08007622 Number 0 usenofp.o(x$fpl$usenofp) __I$use$fp 0x08007626 Number 0 usenofp.o(x$fpl$usenofp)
AHBPrescTable 0x0800762a Data 16 system_stm32f4xx.o(.constdata) AHBPrescTable 0x0800762e Data 16 system_stm32f4xx.o(.constdata)
APBPrescTable 0x0800763a Data 8 system_stm32f4xx.o(.constdata) APBPrescTable 0x0800763e Data 8 system_stm32f4xx.o(.constdata)
Region$$Table$$Base 0x08007644 Number 0 anon$$obj.o(Region$$Table) Region$$Table$$Base 0x08007648 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x08007664 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) uwTick 0x20000000 Data 4 stm32f4xx_hal.o(.data)
uwTickPrio 0x20000004 Data 4 stm32f4xx_hal.o(.data) uwTickPrio 0x20000004 Data 4 stm32f4xx_hal.o(.data)
uwTickFreq 0x20000008 Data 1 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 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 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 0x08004dd4 0x08004dd4 0x00000050 Code RO 4451 i.ads1256_init ads1256.o
0x08004e24 0x08004e24 0x00000058 Code RO 4452 i.ads1256_read_byte 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 0x08004e7c 0x08004e7c 0x00000074 Code RO 4453 i.ads1256_write_byte ads1256.o
0x08004ef0 0x08004ef0 0x000001f8 Code RO 5945 i.analog_ctrl provalctrl.o 0x08004ef0 0x08004ef0 0x000001fc Code RO 5945 i.analog_ctrl provalctrl.o
0x080050e8 0x080050e8 0x00000050 Code RO 5776 i.analog_gather adcs.o 0x080050ec 0x080050ec 0x00000050 Code RO 5776 i.analog_gather adcs.o
0x08005138 0x08005138 0x0000004c Code RO 4572 i.ao_blf1_set dac7311.o 0x0800513c 0x0800513c 0x0000004c Code RO 4572 i.ao_blf1_set dac7311.o
0x08005184 0x08005184 0x0000004c Code RO 4573 i.ao_blf2_set dac7311.o 0x08005188 0x08005188 0x0000004c Code RO 4573 i.ao_blf2_set dac7311.o
0x080051d0 0x080051d0 0x00000054 Code RO 4574 i.ao_dwq_set dac7311.o 0x080051d4 0x080051d4 0x00000054 Code RO 4574 i.ao_dwq_set dac7311.o
0x08005224 0x08005224 0x00000154 Code RO 4575 i.ao_write dac7311.o 0x08005228 0x08005228 0x00000154 Code RO 4575 i.ao_write dac7311.o
0x08005378 0x08005378 0x00000098 Code RO 4725 i.clrcs ms5803.o 0x0800537c 0x0800537c 0x00000098 Code RO 4725 i.clrcs ms5803.o
0x08005410 0x08005410 0x00000040 Code RO 4576 i.dac7311_init dac7311.o 0x08005414 0x08005414 0x00000040 Code RO 4576 i.dac7311_init dac7311.o
0x08005450 0x08005450 0x0000000a Code RO 15 i.delay_ms main.o 0x08005454 0x08005454 0x0000000a Code RO 15 i.delay_ms main.o
0x0800545a 0x0800545a 0x0000000e Code RO 16 i.delay_tick main.o 0x0800545e 0x0800545e 0x0000000e Code RO 16 i.delay_tick main.o
0x08005468 0x08005468 0x00000060 Code RO 17 i.delay_us main.o 0x0800546c 0x0800546c 0x00000060 Code RO 17 i.delay_us main.o
0x080054c8 0x080054c8 0x00000120 Code RO 5816 i.digital_ctrl gpios.o 0x080054cc 0x080054cc 0x00000120 Code RO 5816 i.digital_ctrl gpios.o
0x080055e8 0x080055e8 0x0000002c Code RO 4888 i.disp_out hc595.o 0x080055ec 0x080055ec 0x0000002c Code RO 4888 i.disp_out hc595.o
0x08005614 0x08005614 0x00000060 Code RO 4822 i.ds18b20_check ds18b20.o 0x08005618 0x08005618 0x00000060 Code RO 4822 i.ds18b20_check ds18b20.o
0x08005674 0x08005674 0x0000006c Code RO 4823 i.ds18b20_get_temp ds18b20.o 0x08005678 0x08005678 0x0000006c Code RO 4823 i.ds18b20_get_temp ds18b20.o
0x080056e0 0x080056e0 0x0000001c Code RO 4824 i.ds18b20_init ds18b20.o 0x080056e4 0x080056e4 0x0000001c Code RO 4824 i.ds18b20_init ds18b20.o
0x080056fc 0x080056fc 0x00000064 Code RO 4825 i.ds18b20_read_bit ds18b20.o 0x08005700 0x08005700 0x00000064 Code RO 4825 i.ds18b20_read_bit ds18b20.o
0x08005760 0x08005760 0x00000022 Code RO 4826 i.ds18b20_read_byte ds18b20.o 0x08005764 0x08005764 0x00000022 Code RO 4826 i.ds18b20_read_byte ds18b20.o
0x08005782 0x08005782 0x00000002 PAD 0x08005786 0x08005786 0x00000002 PAD
0x08005784 0x08005784 0x00000040 Code RO 4827 i.ds18b20_rst ds18b20.o 0x08005788 0x08005788 0x00000040 Code RO 4827 i.ds18b20_rst ds18b20.o
0x080057c4 0x080057c4 0x00000018 Code RO 4828 i.ds18b20_start ds18b20.o 0x080057c8 0x080057c8 0x00000018 Code RO 4828 i.ds18b20_start ds18b20.o
0x080057dc 0x080057dc 0x00000078 Code RO 4829 i.ds18b20_write_byte ds18b20.o 0x080057e0 0x080057e0 0x00000078 Code RO 4829 i.ds18b20_write_byte ds18b20.o
0x08005854 0x08005854 0x00000058 Code RO 5994 i.encoder_init encoder.o 0x08005858 0x08005858 0x00000058 Code RO 5994 i.encoder_init encoder.o
0x080058ac 0x080058ac 0x00000090 Code RO 5995 i.encoder_run encoder.o 0x080058b0 0x080058b0 0x00000090 Code RO 5995 i.encoder_run encoder.o
0x0800593c 0x0800593c 0x0000006c Code RO 4889 i.hc595_write_data hc595.o 0x08005940 0x08005940 0x0000006c Code RO 4889 i.hc595_write_data hc595.o
0x080059a8 0x080059a8 0x00000024 Code RO 5817 i.led_ctrl gpios.o 0x080059ac 0x080059ac 0x00000024 Code RO 5817 i.led_ctrl gpios.o
0x080059cc 0x080059cc 0x00000084 Code RO 18 i.main main.o 0x080059d0 0x080059d0 0x00000084 Code RO 18 i.main main.o
0x08005a50 0x08005a50 0x000001a8 Code RO 4952 i.mf5803_loop mf5803.o 0x08005a54 0x08005a54 0x000001a8 Code RO 4952 i.mf5803_loop mf5803.o
0x08005bf8 0x08005bf8 0x000000c0 Code RO 4953 i.mf5803_setup mf5803.o 0x08005bfc 0x08005bfc 0x000000c0 Code RO 4953 i.mf5803_setup mf5803.o
0x08005cb8 0x08005cb8 0x000000b4 Code RO 5092 i.modbus_analysis_rtu modbus_rtu.o 0x08005cbc 0x08005cbc 0x000000b4 Code RO 5092 i.modbus_analysis_rtu modbus_rtu.o
0x08005d6c 0x08005d6c 0x00000080 Code RO 5093 i.modbus_errfunction_rtu modbus_rtu.o 0x08005d70 0x08005d70 0x00000080 Code RO 5093 i.modbus_errfunction_rtu modbus_rtu.o
0x08005dec 0x08005dec 0x00000044 Code RO 5094 i.modbus_process_rtu modbus_rtu.o 0x08005df0 0x08005df0 0x00000044 Code RO 5094 i.modbus_process_rtu modbus_rtu.o
0x08005e30 0x08005e30 0x00000054 Code RO 5095 i.modbus_rtu_init modbus_rtu.o 0x08005e34 0x08005e34 0x00000054 Code RO 5095 i.modbus_rtu_init modbus_rtu.o
0x08005e84 0x08005e84 0x00000080 Code RO 5096 i.modbus_rx_cb modbus_rtu.o 0x08005e88 0x08005e88 0x00000080 Code RO 5096 i.modbus_rx_cb modbus_rtu.o
0x08005f04 0x08005f04 0x00000132 Code RO 5946 i.prov_calibrate_step provalctrl.o 0x08005f08 0x08005f08 0x00000132 Code RO 5946 i.prov_calibrate_step provalctrl.o
0x08006036 0x08006036 0x00000002 PAD 0x0800603a 0x0800603a 0x00000002 PAD
0x08006038 0x08006038 0x000000c0 Code RO 5947 i.prov_ctrl provalctrl.o 0x0800603c 0x0800603c 0x000000c0 Code RO 5947 i.prov_ctrl provalctrl.o
0x080060f8 0x080060f8 0x00000108 Code RO 5948 i.prov_init provalctrl.o 0x080060fc 0x080060fc 0x00000108 Code RO 5948 i.prov_init provalctrl.o
0x08006200 0x08006200 0x00000150 Code RO 5097 i.readcoilstate_rtu modbus_rtu.o 0x08006204 0x08006204 0x00000150 Code RO 5097 i.readcoilstate_rtu modbus_rtu.o
0x08006350 0x08006350 0x0000014c Code RO 5098 i.readdisinputstate_rtu modbus_rtu.o 0x08006354 0x08006354 0x0000014c Code RO 5098 i.readdisinputstate_rtu modbus_rtu.o
0x0800649c 0x0800649c 0x0000010c Code RO 5099 i.readholdreg_rtu modbus_rtu.o 0x080064a0 0x080064a0 0x0000010c Code RO 5099 i.readholdreg_rtu modbus_rtu.o
0x080065a8 0x080065a8 0x00000104 Code RO 5100 i.readinputreg_rtu modbus_rtu.o 0x080065ac 0x080065ac 0x00000104 Code RO 5100 i.readinputreg_rtu modbus_rtu.o
0x080066ac 0x080066ac 0x00000068 Code RO 4733 i.setcs ms5803.o 0x080066b0 0x080066b0 0x00000068 Code RO 4733 i.setcs ms5803.o
0x08006714 0x08006714 0x00000184 Code RO 5851 i.tim6_cnt timer.o 0x08006718 0x08006718 0x00000184 Code RO 5851 i.tim6_cnt timer.o
0x08006898 0x08006898 0x00000014 Code RO 5894 i.uart_send uarts.o 0x0800689c 0x0800689c 0x00000014 Code RO 5894 i.uart_send uarts.o
0x080068ac 0x080068ac 0x00000022 Code RO 4954 i.wf5803_ReadReg mf5803.o 0x080068b0 0x080068b0 0x00000022 Code RO 4954 i.wf5803_ReadReg mf5803.o
0x080068ce 0x080068ce 0x00000022 Code RO 4956 i.wf5803_WriteReg mf5803.o 0x080068d2 0x080068d2 0x00000022 Code RO 4956 i.wf5803_WriteReg mf5803.o
0x080068f0 0x080068f0 0x0000014c Code RO 5101 i.writemulticoil_rtu modbus_rtu.o 0x080068f4 0x080068f4 0x0000014c Code RO 5101 i.writemulticoil_rtu modbus_rtu.o
0x08006a3c 0x08006a3c 0x00000104 Code RO 5102 i.writemultireg_rtu modbus_rtu.o 0x08006a40 0x08006a40 0x00000104 Code RO 5102 i.writemultireg_rtu modbus_rtu.o
0x08006b40 0x08006b40 0x000000c4 Code RO 5103 i.writesinglecoil_rtu modbus_rtu.o 0x08006b44 0x08006b44 0x000000c4 Code RO 5103 i.writesinglecoil_rtu modbus_rtu.o
0x08006c04 0x08006c04 0x000000b8 Code RO 5104 i.writesinglereg_rtu modbus_rtu.o 0x08006c08 0x08006c08 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) 0x08006cc0 0x08006cc0 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) 0x08006e10 0x08006e10 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) 0x080070c0 0x080070c0 0x0000005e Code RO 6114 x$fpl$dfix fz_wm.l(dfix.o)
0x0800711a 0x0800711a 0x00000002 PAD 0x0800711e 0x0800711e 0x00000002 PAD
0x0800711c 0x0800711c 0x0000005a Code RO 6122 x$fpl$dfixu fz_wm.l(dfixu.o) 0x08007120 0x08007120 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) 0x0800717a 0x0800717a 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) 0x080071a8 0x080071a8 0x000000a2 Code RO 6132 x$fpl$dfltll fz_wm.l(dfltll_clz.o)
0x08007246 0x08007246 0x00000002 PAD 0x0800724a 0x0800724a 0x00000002 PAD
0x08007248 0x08007248 0x00000154 Code RO 6136 x$fpl$dmul fz_wm.l(dmul.o) 0x0800724c 0x0800724c 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) 0x080073a0 0x080073a0 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) 0x0800743c 0x0800743c 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) 0x08007448 0x08007448 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) 0x0800761c 0x0800761c 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) 0x08007626 0x08007626 0x00000000 Code RO 6176 x$fpl$usenofp fz_wm.l(usenofp.o)
0x08007622 0x08007622 0x00000008 Data RO 1568 .constdata stm32f4xx_hal_dma.o 0x08007626 0x08007626 0x00000008 Data RO 1568 .constdata stm32f4xx_hal_dma.o
0x0800762a 0x0800762a 0x00000018 Data RO 4413 .constdata system_stm32f4xx.o 0x0800762e 0x0800762e 0x00000018 Data RO 4413 .constdata system_stm32f4xx.o
0x08007642 0x08007642 0x00000002 PAD 0x08007646 0x08007646 0x00000002 PAD
0x08007644 0x08007644 0x00000020 Data RO 6395 Region$$Table anon$$obj.o 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 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 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 **** **** No section assigned to this execution region ****
@ -4093,7 +4093,7 @@ Image component sizes
358 32 0 110 196 7180 modbus.o 358 32 0 110 196 7180 modbus.o
2756 142 0 0 2048 13994 modbus_rtu.o 2756 142 0 0 2048 13994 modbus_rtu.o
256 50 0 17 0 3199 ms5803.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 204 22 0 0 88 1861 spi.o
64 26 392 0 1536 892 startup_stm32f407xx.o 64 26 392 0 1536 892 startup_stm32f407xx.o
212 36 0 9 0 9777 stm32f4xx_hal.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 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) 0 0 32 0 0 0 (incl. Generated)
26 0 2 10 0 0 (incl. Padding) 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 Code (inc. data) RO Data RW Data ZI Data Debug
29850 1986 458 364 6316 913489 Grand Totals 29854 1990 458 364 6316 913489 Grand Totals
29850 1986 458 20 6316 913489 ELF Image Totals (compressed) 29854 1990 458 20 6316 913489 ELF Image Totals (compressed)
29850 1986 458 20 0 0 ROM Totals 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 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)
============================================================================== ==============================================================================

View File

@ -1,7 +1,7 @@
Dependencies for Project 'VOQC', Target 'VOQC': (DO NOT MODIFY !) Dependencies for Project 'VOQC', Target 'VOQC': (DO NOT MODIFY !)
CompilerVersion: 5060960::V5.06 update 7 (build 960)::.\ARM Compiler_5_06 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 (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 (../Core/Inc/main.h)(0x6694D721)
I (../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h)(0x66B41EAC) I (../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h)(0x66B41EAC)
I (../Core/Inc/stm32f4xx_hal_conf.h)(0x66C2E5B0) I (../Core/Inc/stm32f4xx_hal_conf.h)(0x66C2E5B0)
@ -2239,7 +2239,7 @@ I (../Core/Inc/spi.h)(0x668F85FC)
I (../CH395Q/ch395cmd.h)(0x664FF969) 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\string.h)(0x5E8E3CC2)
I (C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\include\stdio.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 (../users/Inc/provalctrl.h)(0x66C42ED5)
I (../modbus/Inc/modbus.h)(0x669A1795) I (../modbus/Inc/modbus.h)(0x669A1795)
I (../users/Inc/timer.h)(0x66C43301) I (../users/Inc/timer.h)(0x66C43301)
@ -2290,7 +2290,7 @@ I (../Core/Inc/spi.h)(0x668F85FC)
I (../CH395Q/ch395cmd.h)(0x664FF969) 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\string.h)(0x5E8E3CC2)
I (../board/Inc/dac7311.h)(0x66949B65) 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 (../users/Inc/encoder.h)(0x66C3E76F)
I (../modbus/Inc/modbus.h)(0x669A1795) I (../modbus/Inc/modbus.h)(0x669A1795)
I (../users/Inc/timer.h)(0x66C43301) 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.

View File

@ -1,106 +1,106 @@
#include "mf.h" #include "mf.h"
int flow_addr = 1; //流量计地址 int flow_addr = 1; //流量计地址
double flow1 = 0; //小流量计mf4700累积流量 double flow1 = 0; //小流量计mf4700累积流量
double flow2 = 0; //大流量计mf5003累积流量 double flow2 = 0; //大流量计mf5003累积流量
double flow3 = 0; //大流量计mf5008累积流量 double flow3 = 0; //大流量计mf5008累积流量
int mf_cnt = 0; //数据接收计数 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 mf4700_buf[36] = {0};//小流量计mf4700累积流量数据接收数组
uint8_t mf5003_buf[36] = {0};//大流量计mf5003累积流量数据接收数组 uint8_t mf5003_buf[36] = {0};//大流量计mf5003累积流量数据接收数组
uint8_t mf5008_buf[36] = {0};//大流量计mf5008累积流量数据接收数组 uint8_t mf5008_buf[36] = {0};//大流量计mf5008累积流量数据接收数组
/* /*
*:[][03][][][][][CRC低][CRC高] *:[][03][][][][][CRC低][CRC高]
*:[][03][][0][0][1][1][n高][n低][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) void read_mf(uint8_t local_addr, uint16_t start_addr, uint16_t read_len)
{ {
uint8_t tx_len = 0; uint8_t tx_len = 0;
uint16_t CRC_Num = 0; uint16_t CRC_Num = 0;
tx_buf[tx_len ++] = local_addr; //通讯地址 tx_buf[tx_len ++] = local_addr; //通讯地址
tx_buf[tx_len ++] = Read_Hold; //命令字 0x03 tx_buf[tx_len ++] = Read_Hold; //命令字 0x03
tx_buf[tx_len ++] = (uint8_t)(start_addr >> 8); 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 >> 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); CRC_Num = ModbusCRC16(tx_buf,tx_len);
tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF); 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); 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) void write_mf(uint8_t local_addr, uint16_t reg_addr, uint16_t write_data)
{ {
uint8_t tx_len = 0; uint8_t tx_len = 0;
uint16_t CRC_Num = 0; uint16_t CRC_Num = 0;
tx_buf[tx_len ++] = local_addr; //通讯地址 tx_buf[tx_len ++] = local_addr; //通讯地址
tx_buf[tx_len ++] = Write_Single; //命令字 0x06 tx_buf[tx_len ++] = Write_Single; //命令字 0x06
tx_buf[tx_len ++] = (uint8_t)(reg_addr >> 8); 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 >> 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); CRC_Num = ModbusCRC16(tx_buf,tx_len);
tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF); 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); usart6_send(tx_buf,tx_len);
} }
//读mf4700瞬时流量 //读mf4700瞬时流量
void read_mf4700_flow(void) void read_mf4700_flow(void)
{ {
read_mf(MF4700_ADDR,MF4700_Ins_Flow_Addr,2); read_mf(MF4700_ADDR,MF4700_Ins_Flow_Addr,2);
} }
//读mf4701累积流量 //读mf4701累积流量
void read_mf4701_flow(void) void read_mf4701_flow(void)
{ {
read_mf(MF4700_ADDR,MF4700_Cum_Flow_Addr,3); read_mf(MF4700_ADDR,MF4700_Cum_Flow_Addr,3);
} }
//读mf5600瞬时流量 //读mf5600瞬时流量
void read_mf5000_flow(void) void read_mf5000_flow(void)
{ {
read_mf(MF5003_ADDR,MF5000_Ins_Flow_Addr,2); read_mf(MF5003_ADDR,MF5000_Ins_Flow_Addr,2);
} }
//读mf5603累积流量 //读mf5603累积流量
void read_mf5003_flow(void) void read_mf5003_flow(void)
{ {
read_mf(MF5003_ADDR,MF5000_Cum_Flow_Addr,3); read_mf(MF5003_ADDR,MF5000_Cum_Flow_Addr,3);
} }
//读mf5608累积流量 //读mf5608累积流量
void read_mf5008_flow(void) void read_mf5008_flow(void)
{ {
read_mf(MF5008_ADDR,MF5000_Cum_Flow_Addr,3); read_mf(MF5008_ADDR,MF5000_Cum_Flow_Addr,3);
} }
//mf4700自动校零 //mf4700自动校零
void mf4700_zero(void) void mf4700_zero(void)
{ {
write_mf(MF4700_ADDR,MF4700_Auto_Zero_Addr,General_Data); write_mf(MF4700_ADDR,MF4700_Auto_Zero_Addr,General_Data);
} }
//mf5600自动校零 //mf5600自动校零
void mf5000_zero(void) void mf5000_zero(void)
{ {
write_mf(MF5003_ADDR,MF5000_Auto_Zero_Addr,General_Data); write_mf(MF5003_ADDR,MF5000_Auto_Zero_Addr,General_Data);
} }
//获取流量计读数,存入保持寄存器 //获取流量计读数,存入保持寄存器
void mf_read(void) void mf_read(void)
{ {
switch(flow_addr) switch(flow_addr)
@ -137,9 +137,9 @@ void mf_read(void)
} }
} }
//清除累积流量 //清除累积流量
//mf4700需要手动向累积流量寄存器写0 //mf4700需要手动向累积流量寄存器写0
//mf5003和mf5008需要先向写保护寄存器写入0xAA55关闭写保护然后向指定寄存器写入0x0001清除累积流量 //mf5003和mf5008需要先向写保护寄存器写入0xAA55关闭写保护然后向指定寄存器写入0x0001清除累积流量
void mf_clear(void) void mf_clear(void)
{ {
switch(flow_state) switch(flow_state)
@ -185,13 +185,13 @@ void mf_clear(void)
void mf_rx_cb(void) void mf_rx_cb(void)
{ {
// 空闲中断表明接收到了1帧所有的数据 // 空闲中断表明接收到了1帧所有的数据
if(LL_USART_IsActiveFlag_IDLE(USART6)) if(LL_USART_IsActiveFlag_IDLE(USART6))
{ {
//清除空闲中断 //清除空闲中断
LL_USART_ClearFlag_IDLE(USART6); LL_USART_ClearFlag_IDLE(USART6);
int j = 0; int j = 0;
//根据地址将数据分别存入不同的数组 //根据地址将数据分别存入不同的数组
if(usart6_rx_buf[0] == 0x01 && usart6_rx_buf[1] == 0x03) if(usart6_rx_buf[0] == 0x01 && usart6_rx_buf[1] == 0x03)
{ {
for(j = 0;j < mf_cnt+1;j++) 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)) if(LL_USART_IsActiveFlag_RXNE(USART6))
{ {
// 如果数组长度大于设置的data最大长度直接停止接收 // 如果数组长度大于设置的data最大长度直接停止接收
if(mf_cnt > 50) if(mf_cnt > 50)
mf_cnt = 0; // wait for the next data mf_cnt = 0; // wait for the next data
usart6_rx_buf[mf_cnt] = LL_USART_ReceiveData8(USART6); usart6_rx_buf[mf_cnt] = LL_USART_ReceiveData8(USART6);

View File

@ -1,8 +1,8 @@
#include "mf5803.h" #include "mf5803.h"
/* /*
** : temp--SPI读取的一字节数据 ** : temp--SPI读取的一字节数据
** : 沿 1 bit ** : 沿 1 bit
*/ */
uint8_t SPI_Read_OneByte(void) uint8_t SPI_Read_OneByte(void)
{ {
@ -10,12 +10,12 @@ uint8_t SPI_Read_OneByte(void)
uint8_t temp = 0; uint8_t temp = 0;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
//读取MISO 8次输入的值存入temp。之所以不放在“SCK = 0”语句之后的位置是因为 //读取MISO 8次输入的值存入temp。之所以不放在“SCK = 0”语句之后的位置是因为
//读取最后1byte的最后一位(即LSB)之后,不能再左移了 //读取最后1byte的最后一位(即LSB)之后,不能再左移了
temp <<= 1; temp <<= 1;
MF5803_SCK(1); MF5803_SCK(1);
delay_tick(10); delay_tick(10);
if(MF5803_MISO) //读取最高位,保存至最末尾,通过左移位完成读整个字节 if(MF5803_MISO) //读取最高位,保存至最末尾,通过左移位完成读整个字节
temp |= 0x01; temp |= 0x01;
else else
temp &= ~0x01; temp &= ~0x01;
@ -27,8 +27,8 @@ uint8_t SPI_Read_OneByte(void)
} }
/* /*
** : u8_writedata--SPI写入的一字节数据 ** : u8_writedata--SPI写入的一字节数据
** : 沿 1 bit ** : 沿 1 bit
*/ */
void SPI_Write_OneByte(uint8_t u8_writedata) 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++) for (i = 0; i < 8; i++)
{ {
delay_tick(10); delay_tick(10);
if (u8_writedata & 0x80) //判断最高位,总是发送最高位 if (u8_writedata & 0x80) //判断最高位,总是发送最高位
{ {
MF5803_MOSI(1); //MOSI输出1数据总线准备数据1 MF5803_MOSI(1); //MOSI输出1数据总线准备数据1
} }
else 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); delay_tick(10);
u8_writedata <<= 1; //左移抛弃已经输出的最高位 u8_writedata <<= 1; //左移抛弃已经输出的最高位
MF5803_SCK(0); //拉低SCK信号初始化为0 MF5803_SCK(0); //拉低SCK信号初始化为0
delay_tick(10); delay_tick(10);
} }
} }
/* /*
** : u8_readdata--SPI读取的一字节数据 ** : u8_readdata--SPI读取的一字节数据
** : u8_writedata--SPI写入的一字节数据 ** : u8_writedata--SPI写入的一字节数据
** : 沿沿 ** : 沿沿
*/ */
uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata) 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; uint8_t u8_readdata = 0x00;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
u8_readdata <<= 1;//读取MISO 8次输入的值存入u8_readdata u8_readdata <<= 1;//读取MISO 8次输入的值存入u8_readdata
if (u8_writedata & 0x80)//判断最高位,总是写最高位(输出最高位) if (u8_writedata & 0x80)//判断最高位,总是写最高位(输出最高位)
MF5803_MOSI(1);//MOSI输出1数据总线准备数据1 MF5803_MOSI(1);//MOSI输出1数据总线准备数据1
else else
MF5803_MOSI(0);//MOSI输出0数据总线准备数据0 MF5803_MOSI(0);//MOSI输出0数据总线准备数据0
u8_writedata <<= 1;//左移抛弃已经输出的最高位 u8_writedata <<= 1;//左移抛弃已经输出的最高位
MF5803_SCK(1);//上升沿来了(SCK从0-->1),数据总线上的数据写入器件 MF5803_SCK(1);//上升沿来了(SCK从0-->1),数据总线上的数据写入器件
if(MF5803_MISO)//读取最高位,保存至最末尾,通过左移位完成读整个字节 if(MF5803_MISO)//读取最高位,保存至最末尾,通过左移位完成读整个字节
u8_readdata |= 0x01; u8_readdata |= 0x01;
else else
u8_readdata &= ~0x01; u8_readdata &= ~0x01;
MF5803_SCK(0);//下降沿来了(SCK从1-->0)MISO上将产生新的数据读取存入u8——readdata MF5803_SCK(0);//下降沿来了(SCK从1-->0)MISO上将产生新的数据读取存入u8——readdata
} }
return u8_readdata; return u8_readdata;
} }
@ -82,15 +82,15 @@ uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata)
uint8_t RawData[5]; uint8_t RawData[5];
uint8_t* GetSensorData() uint8_t* GetSensorData()
{ {
//重置清0 //重置清0
memset(RawData, 0, sizeof(uint8_t) * 5); memset(RawData, 0, sizeof(uint8_t) * 5);
//采集温度数据 //采集温度数据
wf5803_WriteReg(0x30, 0x08); wf5803_WriteReg(0x30, 0x08);
delay_ms(2); delay_ms(2);
RawData[3] = wf5803_ReadReg(0x09); RawData[3] = wf5803_ReadReg(0x09);
RawData[4] = wf5803_ReadReg(0x0A); RawData[4] = wf5803_ReadReg(0x0A);
//采集气压数据 //采集气压数据
wf5803_WriteReg(0x30, 0x09); wf5803_WriteReg(0x30, 0x09);
delay_ms(3); delay_ms(3);
RawData[0] = wf5803_ReadReg(0x06); RawData[0] = wf5803_ReadReg(0x06);
@ -101,60 +101,60 @@ uint8_t* GetSensorData()
} }
/* /*
** : (1)uint8_t addr-- ** : (1)uint8_t addr--
** (2)uint8_t value-- ** (2)uint8_t value--
** : wf5803寄存器写函数 ** : wf5803寄存器写函数
*/ */
void wf5803_WriteReg(uint8_t addr, uint8_t value) void wf5803_WriteReg(uint8_t addr, uint8_t value)
{ {
clrcs();//CS片选拉低 clrcs();//CS片选拉低
SPI_Write_OneByte(0x00);//SPI写地址命令 SPI_Write_OneByte(0x00);//SPI写地址命令
SPI_Write_OneByte(addr); SPI_Write_OneByte(addr);
SPI_Write_OneByte(value);//SPI写数据 SPI_Write_OneByte(value);//SPI写数据
setcs();//CS片选拉高 setcs();//CS片选拉高
} }
/* /*
** : value-- ** : value--
** : addr-- ** : addr--
** : wf5803寄存器读函数 ** : wf5803寄存器读函数
*/ */
uint8_t wf5803_ReadReg(uint8_t addr) uint8_t wf5803_ReadReg(uint8_t addr)
{ {
uint8_t value; uint8_t value;
clrcs();//CS片选拉低 clrcs();//CS片选拉低
SPI_Write_OneByte(0x80);//SPI写地址命令 SPI_Write_OneByte(0x80);//SPI写地址命令
SPI_Write_OneByte(addr); SPI_Write_OneByte(addr);
value = SPI_Read_OneByte();//SPI读数据 value = SPI_Read_OneByte();//SPI读数据
setcs();//CS片选拉高 setcs();//CS片选拉高
return value; return value;
} }
void wf5803_ReadRegMulti(uint8_t addr, uint8_t lens, uint8_t* value) void wf5803_ReadRegMulti(uint8_t addr, uint8_t lens, uint8_t* value)
{ {
clrcs();//CS片选拉低 clrcs();//CS片选拉低
if (lens == 1) if (lens == 1)
{ {
SPI_Write_OneByte(0x80);//SPI写地址命令 SPI_Write_OneByte(0x80);//SPI写地址命令
} }
else if (lens == 2) else if (lens == 2)
{ {
SPI_Write_OneByte(0xA0);//SPI写地址命令 SPI_Write_OneByte(0xA0);//SPI写地址命令
} }
else if (lens == 3) else if (lens == 3)
{ {
SPI_Write_OneByte(0xC0);//SPI写地址命令 SPI_Write_OneByte(0xC0);//SPI写地址命令
} }
else else
{ {
SPI_Write_OneByte(0xE0);//SPI写地址命令 SPI_Write_OneByte(0xE0);//SPI写地址命令
} }
SPI_Write_OneByte(addr); SPI_Write_OneByte(addr);
for (uint8_t i = 0; i < lens; i++) 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() void mf5803_setup()
{ {
setcs();//CS片选拉高 setcs();//CS片选拉高
SENSOR_SELECT(0); SENSOR_SELECT(0);
delay_ms(10); delay_ms(10);
@ -202,7 +202,7 @@ void mf5803_setup()
long reading = 0; long reading = 0;
float press = 0; //kPa float press = 0; //kPa
float temp = 0; //℃ float temp = 0; //℃
float fDat; float fDat;
uint8_t flt_cnt = 0; uint8_t flt_cnt = 0;
float p_flt_window[6][20] = {0}; //sliding window, sensor_1&2 -> pressure[A,B,S] 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; 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++; NSS_Select++;
@ -233,11 +233,11 @@ void mf5803_loop()
{ {
SENSOR_SELECT(1); SENSOR_SELECT(1);
} }
if(NSS_Select > 6) //记录完6路气压后进入此处每6*10ms if(NSS_Select > 6) //记录完6路气压后进入此处每6*10ms
{ {
NSS_Select = 1; NSS_Select = 1;
for( uint8_t i = 0; i < 6; i++ ) //均值滤波 for( uint8_t i = 0; i < 6; i++ ) //均值滤波
{ {
sums = 0; sums = 0;
for( uint8_t j = 0; j < 20; j++ ) for( uint8_t j = 0; j < 20; j++ )
@ -247,7 +247,7 @@ void mf5803_loop()
InputReg[ 13 + i ] = sums/20; //InputReg[13]~InputReg[18] InputReg[ 13 + i ] = sums/20; //InputReg[13]~InputReg[18]
} }
flt_cnt++; flt_cnt++;
if(flt_cnt > 19) //滑动窗口长度20循环记录 if(flt_cnt > 19) //滑动窗口长度20循环记录
{ {
flt_cnt = 0; flt_cnt = 0;
} }

View File

@ -12,7 +12,7 @@ uint8_t aRxBuffer[4];
uint8_t NSS_Select = 1; uint8_t NSS_Select = 1;
//拉高所有片选脚 //拉高所有片选脚
void setcs(void) void setcs(void)
{ {
HAL_GPIO_WritePin(MS5803_NSS1_GPIO_Port,MS5803_NSS1_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(MS5803_NSS1_GPIO_Port,MS5803_NSS1_Pin,GPIO_PIN_SET);
@ -57,10 +57,10 @@ void clrcs(void)
} }
/************************************************ /************************************************
Write_SPI_Byte Write_SPI_Byte
SPI写一个字节 SPI写一个字节
Byte ---- Byte ----
Byte ---- Byte ----
*************************************************/ *************************************************/
uint8_t ms5803_write_byte( uint8_t 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++) for(i = 0;i < 8;i++)
{ {
MS5803_SCK(0); MS5803_SCK(0);
delay_us(1); // 空等待 delay_us(1); // 空等待
if(Byte & 0x80) if(Byte & 0x80)
{ {
@ -81,9 +81,9 @@ uint8_t ms5803_write_byte( uint8_t Byte )
} }
Byte <<= 1; Byte <<= 1;
delay_us(1); // 空等待 delay_us(1); // 空等待
MS5803_SCK(1); MS5803_SCK(1);
delay_us(1); // 空等待 delay_us(1); // 空等待
Byte |= MS5803_MISO; Byte |= MS5803_MISO;
} }
@ -93,10 +93,10 @@ uint8_t ms5803_write_byte( uint8_t Byte )
} }
/************************************************ /************************************************
Read_SPI_Byte Read_SPI_Byte
SPI只读一个字节 SPI只读一个字节
temp ---- temp ----
*************************************************/ *************************************************/
uint8_t ms5803_read_byte(void) uint8_t ms5803_read_byte(void)
{ {
@ -106,14 +106,14 @@ uint8_t ms5803_read_byte(void)
for(i = 0;i < 8;i++) for(i = 0;i < 8;i++)
{ {
MS5803_SCK(0); MS5803_SCK(0);
delay_us(1); // 空等待 delay_us(1); // 空等待
temp <<= 1; temp <<= 1;
temp |= MS5803_MISO; temp |= MS5803_MISO;
//delay_us(1); // 空等待 //delay_us(1); // 空等待
MS5803_SCK(1); MS5803_SCK(1);
delay_us(1); // 空等待 delay_us(1); // 空等待
} }
MS5803_SCK(0); MS5803_SCK(0);
@ -122,9 +122,9 @@ uint8_t ms5803_read_byte(void)
} }
//**************************************** //****************************************
//*功能向MS5803写入命令 //*功能向MS5803写入命令
//*参数CMD //*参数CMD
//*返回True/False //*返回True/False
static int writecmd(uint8_t CMD) static int writecmd(uint8_t CMD)
{ {
@ -141,9 +141,9 @@ static int writecmd(uint8_t CMD)
} }
//**************************************** //****************************************
//*功能根据指令从MS5803读相应数据 //*功能根据指令从MS5803读相应数据
//*参数CMD,Count //*参数CMD,Count
//*返回True/False //*返回True/False
static int readcmddata(uint8_t CMD,uint8_t Count) 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() static void resetdevice()
{ {
writecmd(RESET); writecmd(RESET);
delay_ms(3); //必须延时3ms delay_ms(3); //必须延时3ms
} }
//**************************************** //****************************************
//*功能获取PROM校准参数,只需要获取一次 //*功能获取PROM校准参数,只需要获取一次
//*参数: //*参数:
//*返回: //*返回:
static void getpromdata() static void getpromdata()
{ {
@ -208,9 +208,9 @@ static void getpromdata()
} }
//**************************************** //****************************************
//*功能MS5803初始化 //*功能MS5803初始化
//*参数: //*参数:
//*返回: //*返回:
void ms5803_init() void ms5803_init()
{ {
@ -220,19 +220,19 @@ void ms5803_init()
NSS_Select = 1; NSS_Select = 1;
delay_tick(10); delay_tick(10);
//初始化代码 //初始化代码
resetdevice(); resetdevice();
getpromdata(); getpromdata();
NSS_Select = 2; NSS_Select = 2;
delay_tick(10); delay_tick(10);
//初始化代码 //初始化代码
resetdevice(); resetdevice();
getpromdata(); getpromdata();
NSS_Select = 3; NSS_Select = 3;
delay_tick(10); delay_tick(10);
//初始化代码 //初始化代码
resetdevice(); resetdevice();
getpromdata(); getpromdata();
@ -240,28 +240,28 @@ void ms5803_init()
NSS_Select = 4; NSS_Select = 4;
delay_tick(10); delay_tick(10);
//初始化代码 //初始化代码
resetdevice(); resetdevice();
getpromdata(); getpromdata();
NSS_Select = 5; NSS_Select = 5;
delay_tick(10); delay_tick(10);
//初始化代码 //初始化代码
resetdevice(); resetdevice();
getpromdata(); getpromdata();
NSS_Select = 6; NSS_Select = 6;
delay_tick(10); delay_tick(10);
//初始化代码 //初始化代码
resetdevice(); resetdevice();
getpromdata(); getpromdata();
} }
//**************************************** //****************************************
//*功能:获取温度和压力 MS5803-14BA //*功能:获取温度和压力 MS5803-14BA
//*参数: //*参数:
//*返回: //*返回:
void start_calculation() void start_calculation()
{ {
@ -271,19 +271,19 @@ void start_calculation()
int64_t OFF,SENS; int64_t OFF,SENS;
//转换压力 //转换压力
writecmd(CD1_256); writecmd(CD1_256);
delay_ms(1); //必须延时1ms delay_ms(1); //必须延时1ms
readcmddata(ADC_Read,3); readcmddata(ADC_Read,3);
D1 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0]; D1 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0];
//转换温度 //转换温度
writecmd(CD2_256); writecmd(CD2_256);
delay_ms(1); //必须延时1ms delay_ms(1); //必须延时1ms
readcmddata(ADC_Read,3); readcmddata(ADC_Read,3);
D2 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0]; D2 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0];
//计算温度 //计算温度
dT = D2 - (PROMData.C5[NSS_Select] * pow(2,8)); dT = D2 - (PROMData.C5[NSS_Select] * pow(2,8));
if(dT > 16777216) if(dT > 16777216)
@ -297,7 +297,7 @@ void start_calculation()
TEMP = 2000 + ((((long long)dT) * PROMData.C6[NSS_Select]) / pow(2,23)); 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)); OFF = (PROMData.C2[NSS_Select] * pow(2,16)) + ((((long long)dT) * PROMData.C4[NSS_Select]) / pow(2,7));
if(OFF > 51538821120) if(OFF > 51538821120)
{ {
@ -364,7 +364,7 @@ void ms5803_task(void)
NSS_Select = 1; NSS_Select = 1;
} }
start_calculation(); start_calculation();
InputReg[NSS_Select + 12] = CurrentPress / 10;//压力数据存入 InputReg[NSS_Select + 12] = CurrentPress / 10;//压力数据存入
NSS_Select++; NSS_Select++;
} }

View File

@ -1,17 +1,17 @@
#include "modbus.h" #include "modbus.h"
uint8_t CoilState[(MAX_COIL_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00}; //线圈寄存器 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}; //离散量寄存器 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 InputReg[MAX_INPUT_REG_NUM] = {0x0000,0x0000,0x0000,0x0000}; //输入寄存器
uint16_t HoldReg[MAX_HOLD_REG_NUM] = {0,0,0,0x0064}; //保持寄存器 uint16_t HoldReg[MAX_HOLD_REG_NUM] = {0,0,0,0x0064}; //保持寄存器
Var_Reg SamVarReg; Var_Reg SamVarReg;
/******************************************************************************* /*******************************************************************************
ModbusCRC16 ModbusCRC16
CRC校验 CRC校验
ptr-- len-- ptr-- len--
CRC校验码 CRC校验码
*******************************************************************************/ *******************************************************************************/
uint16_t ModbusCRC16(uint8_t *ptr, uint16_t len) uint16_t ModbusCRC16(uint8_t *ptr, uint16_t len)
{ {
@ -70,10 +70,10 @@ void GetOneDisInputVal(uint16_t wDisInputAddr, uint8_t *pDisInputVal)
} }
/******************************************************************************* /*******************************************************************************
GetHoldRegData GetHoldRegData
RegAdd的数据 RegAdd的数据
u16 RegAdd u16 RegAdd
*******************************************************************************/ *******************************************************************************/
uint16_t GetHoldRegData(uint16_t RegAdd) uint16_t GetHoldRegData(uint16_t RegAdd)
{ {
@ -85,10 +85,10 @@ uint16_t GetHoldRegData(uint16_t RegAdd)
} }
/******************************************************************************* /*******************************************************************************
GetInputRegData GetInputRegData
RegAdd的数据 RegAdd的数据
u16 RegAdd u16 RegAdd
*******************************************************************************/ *******************************************************************************/
uint16_t GetInputRegData(uint16_t RegAdd) uint16_t GetInputRegData(uint16_t RegAdd)
{ {
@ -100,10 +100,10 @@ uint16_t GetInputRegData(uint16_t RegAdd)
} }
/******************************************************************************* /*******************************************************************************
: WriteHoldRegData : WriteHoldRegData
: :
: u16 StartAdd : u16 StartAdd
: :
*******************************************************************************/ *******************************************************************************/
void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData) void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData)
{ {
@ -111,10 +111,10 @@ void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData)
} }
/******************************************************************************* /*******************************************************************************
: WriteOneCoilData : WriteOneCoilData
: 线 : 线
: u16 StartAdd : u16 StartAdd
: :
*******************************************************************************/ *******************************************************************************/
void WriteOneCoilData(uint16_t wRegAddr, uint16_t RegData) void WriteOneCoilData(uint16_t wRegAddr, uint16_t RegData)
{ {

View File

@ -2,49 +2,49 @@
void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode); void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode);
uint8_t uart1_rx_buf[UART1_RXSIZE]; //发送数据缓冲数组 uint8_t uart1_rx_buf[UART1_RXSIZE]; //发送数据缓冲数组
uint8_t uart1_tx_buf[UART1_TXSIZE]; //接收数据缓冲数据 uint8_t uart1_tx_buf[UART1_TXSIZE]; //接收数据缓冲数据
void modbus_rtu_init(void) 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_buf_cnt = 0;
MODBUS_UART.rx_size = 0; MODBUS_UART.rx_size = 0;
MODBUS_UART.rx_flag = 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_buf_cnt = UART1_TXSIZE;
MODBUS_UART.tx_size = 0; MODBUS_UART.tx_size = 0;
HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1); //开启接收中断 HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1); //开启接收中断
__HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE); //手动添加 __HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE); //手动添加
HAL_TIM_Base_Start_IT(&MODBUS_HTIM); HAL_TIM_Base_Start_IT(&MODBUS_HTIM);
} }
void modbus_rx_cb(void) 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; MODBUS_UART.rx_buf_cnt = 0;
memset(MODBUS_UART.rx_buf, 0x00, sizeof(&MODBUS_UART.rx_buf)); 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_Base_Stop_IT(&MODBUS_HTIM);
__HAL_TIM_SET_COUNTER(&MODBUS_HTIM, 0); __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); HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1);
} }
/******************************************************************************* /*******************************************************************************
ReadCoilStateFUNC ReadCoilStateFUNC
:0x01,线 :0x01,线
*:[][01][线][线][线][线][CRC低][CRC高] *:[][01][线][线][线][线][CRC低][CRC高]
*:[][01][][线][线][线][CRC低][CRC高] *:[][01][][线][线][线][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 i,k,uCommIndexNum = 0,uByteCount,uCoilVal,uErrorCode,uExit = 0;
uint8_t upTxdbuf[100] = {0}; uint8_t upTxdbuf[100] = {0};
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址 wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM)) if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM))
{ {
if(((wCoilStartAddr <= COIL_ADD_MAX)) && if(((wCoilStartAddr <= COIL_ADD_MAX)) &&
(wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) && (wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) &&
{ {
uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数 uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数
upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS; upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS;
upTxdbuf[uCommIndexNum ++] = ReadCoilState; upTxdbuf[uCommIndexNum ++] = ReadCoilState;
@ -116,12 +116,12 @@ void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
ReadDisInputStateFUNC ReadDisInputStateFUNC
:0x02, :0x02,
*:[][02][][][][][CRC低][CRC高] *:[][02][][][][][CRC低][CRC高]
*:[][02][][][][][CRC低][CRC高] *:[][02][][][][][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 i,k,uCommIndexNum = 0,uByteCount,uDisVal,uErrorCode,uExit = 0;
uint8_t upTxdbuf[100]; uint8_t upTxdbuf[100];
wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址 wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址
wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数 wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数
if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM)) if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM))
{ {
if(((wDisStartAddr <= DIS_ADD_MAX)) && if(((wDisStartAddr <= DIS_ADD_MAX)) &&
(wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) && (wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) &&
{ {
uByteCount = (wDisNum + 7) / 8; //返回数据字节个数 uByteCount = (wDisNum + 7) / 8; //返回数据字节个数
upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS; upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS;
upTxdbuf[uCommIndexNum ++] = ReadDisInputState; upTxdbuf[uCommIndexNum ++] = ReadDisInputState;
@ -193,12 +193,12 @@ void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
ReadHoldRegFUNC ReadHoldRegFUNC
:0x03, :0x03,
*:[][03][][][][][CRC低][CRC高] *:[][03][][][][][CRC低][CRC高]
*:[][03][][0][0][1][1][n高][n低][CRC低][CRC高] *:[][03][][0][0][1][1][n高][n低][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
if((wRegLen >= 0x01) && (wRegLen <= MAX_HOLD_REG_NUM)) 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++) for(i = 0; i < wRegLen; i++)
{ {
//获取16位数据并返回 //获取16位数据并返回
wRegValue = GetHoldRegData(wRegStartAdd + i); wRegValue = GetHoldRegData(wRegStartAdd + i);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
} }
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); 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); memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size);
@ -252,12 +252,12 @@ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
ReadInputRegFUNC ReadInputRegFUNC
:0x04, :0x04,
*:[][04][][][][][ CRC低 ][ CRC高 ] *:[][04][][][][][ CRC低 ][ CRC高 ]
*:[][04][ ][0 ][ 0 ][ 1 ][ 1 ][ n高 ][ n低 ][ CRC低 ][ CRC高 ] *:[][04][ ][0 ][ 0 ][ 1 ][ 1 ][ n高 ][ n低 ][ CRC低 ][ CRC高 ]
*******************************************************************************/ *******************************************************************************/
void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
if((wRegLen >= 0x01) && (wRegLen <= MAX_INPUT_REG_NUM)) 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++) for(i = 0; i < wRegLen; i++)
{ {
//获取16位数据并返回 //获取16位数据并返回
wRegValue = GetInputRegData(wRegStartAdd + i); wRegValue = GetInputRegData(wRegStartAdd + i);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
} }
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); 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); memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size);
@ -311,12 +311,12 @@ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
WriteSingleRegFUNC WriteSingleRegFUNC
:0x06 () :0x06 ()
*:[][06][][][][][CRC低][CRC高] *:[][06][][][][][CRC低][CRC高]
*:[][06][][][][][CRC低][CRC高] *:[][06][][][][][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据 wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据
if((wRegAddr <= HOLD_REG_ADD_MAX))//(wRegAddr >= HOLD_REG_ADD_MIN) && 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; uCommIndexNum += 4;
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); 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); memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size);
@ -356,10 +356,10 @@ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
WriteMultiRegFUNC WriteMultiRegFUNC
:0x10 :0x10
*******************************************************************************/ *******************************************************************************/
void writemultireg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量 wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量
uByteNum = upRxdbuf[4]; //获取字节数 uByteNum = upRxdbuf[4]; //获取字节数
if((wRegNum >= 0x01) && (wRegNum <= MAX_HOLD_REG_NUM) && (uByteNum == wRegNum * 2)) 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 WriteSingleCoilFUNC
:0x05 线 :0x05 线
*******************************************************************************/ *******************************************************************************/
void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 uCommIndexNum = 0, uErrorCode;
uint8_t upTxdbuf[100]; uint8_t upTxdbuf[100];
wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据 wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据
if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00)) if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00))
{ {
@ -462,12 +462,12 @@ void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
WriteMultiCoilFUNC WriteMultiCoilFUNC
:0x0F,线 :0x0F,线
*:[][0F][][][线][线][][线][CRC低][CRC高] *:[][0F][][][线][线][][线][CRC低][CRC高]
*:[][0F][][][线][线][CRC低][CRC高] *:[][0F][][][线][线][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void writemulticoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 i,k,uCommIndexNum = 0,uByteNum,uByteVal,uExit = 0,uErrorCode;
uint8_t upTxdbuf[100]; uint8_t upTxdbuf[100];
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
uByteNum = upRxdbuf[4]; //获取字节数 uByteNum = upRxdbuf[4]; //获取字节数
if((wCoilNum >= 0x01) && (wCoilNum <= MAX_COIL_NUM) && (wCoilNum <= 8 * uByteNum)) 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 : MODBUS_ERRFunction
: :
: :
: :
= +0x80 = +0x80
*******************************************************************************/ *******************************************************************************/
void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode) 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; upTxdbuf[uCommIndexNum ++] = uErrorCode;
CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); //crc16低字节在前 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); //crc16低字节在前
upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8);
MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); 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 Modbus_Analysis
CRC校验 CRC校验
ptr-- len-- ptr-- len--
CRC校验码 CRC校验码
*******************************************************************************/ *******************************************************************************/
void modbus_analysis_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) 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]; uSlaveAdd = upRxdbuf[0];
uCmdCode = upRxdbuf[1]; uCmdCode = upRxdbuf[1];
// 从机地址为本机地址或者是广播帧 // 从机地址为本机地址或者是广播帧
if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS)) if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS))
{ {
switch(uCmdCode) switch(uCmdCode)
{ {
case ReadCoilState: case ReadCoilState:
readcoilstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读线圈状态, read&write binary readcoilstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读线圈状态, read&write binary
break; break;
case ReadDisInputState: case ReadDisInputState:
readdisinputstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读离散输入状态, only read readdisinputstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读离散输入状态, only read
break; break;
case ReadHoldReg: case ReadHoldReg:
readholdreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取保持寄存器, read&write u16 readholdreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取保持寄存器, read&write u16
break; break;
case ReadInputReg: case ReadInputReg:
readinputreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取输入寄存器 readinputreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取输入寄存器
break; break;
case WriteSingleReg: case WriteSingleReg:
writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个寄存器 writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个寄存器
break; break;
case WriteMultiCoil: case WriteMultiCoil:
writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个线圈 writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个线圈
break; break;
case WriteMultiReg: case WriteMultiReg:
writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个寄存器 writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个寄存器
break; break;
case WriteSingleCoil: case WriteSingleCoil:
writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个线圈 writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个线圈
break; break;
default: default:
modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 错误码处理 modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 错误码处理
break; break;
} }
} }
@ -629,18 +629,18 @@ void modbus_process_rtu(void)
uint16_t wFrameLen = 0; uint16_t wFrameLen = 0;
uint16_t wFrameCRC, wCalCRC; uint16_t wFrameCRC, wCalCRC;
pFrame = MODBUS_UART.rx_buf; // 接收数据起始地址 pFrame = MODBUS_UART.rx_buf; // 接收数据起始地址
wFrameLen = MODBUS_UART.rx_size; // 接收数据长度 wFrameLen = MODBUS_UART.rx_size; // 接收数据长度
if(wFrameLen < 2) return; // 数据长度不是有效值 if(wFrameLen < 2) return; // 数据长度不是有效值
// 获取接收数据帧中的校验和 // 获取接收数据帧中的校验和
wFrameCRC = MAKEWORD(pFrame[wFrameLen - 2], pFrame[wFrameLen - 1]); wFrameCRC = MAKEWORD(pFrame[wFrameLen - 2], pFrame[wFrameLen - 1]);
// 计算接收到的数据的校验和 // 计算接收到的数据的校验和
wCalCRC = ModbusCRC16(pFrame, wFrameLen - 2); wCalCRC = ModbusCRC16(pFrame, wFrameLen - 2);
if(wFrameCRC != wCalCRC) return; 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);// 协议处理
} }

View File

@ -6,12 +6,12 @@
void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode); void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode);
/******************************************************************************* /*******************************************************************************
ReadCoilStateFUNC ReadCoilStateFUNC
:0x01,线 :0x01,线
*:[][01][线][线][线][线][CRC低][CRC高] *:[][01][线][线][线][线][CRC低][CRC高]
*:[][01][][线][线][线][CRC低][CRC高] *:[][01][][线][线][线][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 i,k,uCommIndexNum = 0,uByteCount,uCoilVal,uErrorCode,uExit = 0;
uint8_t upTxdbuf[100] = {0}; uint8_t upTxdbuf[100] = {0};
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址 wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM)) if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM))
{ {
if(((wCoilStartAddr <= COIL_ADD_MAX)) && if(((wCoilStartAddr <= COIL_ADD_MAX)) &&
(wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) && (wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) &&
{ {
uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数 uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数
upTxdbuf[uCommIndexNum ++] = 0x00; upTxdbuf[uCommIndexNum ++] = 0x00;
upTxdbuf[uCommIndexNum ++] = 0x01; upTxdbuf[uCommIndexNum ++] = 0x01;
@ -84,12 +84,12 @@ void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
ReadDisInputStateFUNC ReadDisInputStateFUNC
:0x02, :0x02,
*:[][02][][][][][CRC低][CRC高] *:[][02][][][][][CRC低][CRC高]
*:[][02][][][][][CRC低][CRC高] *:[][02][][][][][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 i,k,uCommIndexNum = 0,uByteCount,uDisVal,uErrorCode,uExit = 0;
uint8_t upTxdbuf[100]; uint8_t upTxdbuf[100];
wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址 wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址
wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数 wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数
if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM)) if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM))
{ {
if(((wDisStartAddr <= DIS_ADD_MAX)) && if(((wDisStartAddr <= DIS_ADD_MAX)) &&
(wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) && (wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) &&
{ {
uByteCount = (wDisNum + 7) / 8; //返回数据字节个数 uByteCount = (wDisNum + 7) / 8; //返回数据字节个数
upTxdbuf[uCommIndexNum ++] = 0x00; upTxdbuf[uCommIndexNum ++] = 0x00;
upTxdbuf[uCommIndexNum ++] = 0x01; upTxdbuf[uCommIndexNum ++] = 0x01;
@ -162,12 +162,12 @@ void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
ReadHoldRegFUNC ReadHoldRegFUNC
:0x03, :0x03,
*:[][03][][][][][CRC低][CRC高] *:[][03][][][][][CRC低][CRC高]
*:[][03][][0][0][1][1][n高][n低][CRC低][CRC高] *:[][03][][0][0][1][1][n高][n低][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
if((wRegLen >= 0x01) && (wRegLen <= MAX_HOLD_REG_NUM)) 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++) for(i = 0; i < wRegLen; i++)
{ {
//获取16位数据并返回 //获取16位数据并返回
wRegValue = GetHoldRegData(wRegStartAdd + i); wRegValue = GetHoldRegData(wRegStartAdd + i);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
@ -223,12 +223,12 @@ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
ReadInputRegFUNC ReadInputRegFUNC
:0x04, :0x04,
*:[][04][][][][][ CRC低 ][ CRC高 ] *:[][04][][][][][ CRC低 ][ CRC高 ]
*:[][04][ ][0 ][ 0 ][ 1 ][ 1 ][ n高 ][ n低 ][ CRC低 ][ CRC高 ] *:[][04][ ][0 ][ 0 ][ 1 ][ 1 ][ n高 ][ n低 ][ CRC低 ][ CRC高 ]
*******************************************************************************/ *******************************************************************************/
void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址
wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度
if((wRegLen >= 0x01) && (wRegLen <= MAX_INPUT_REG_NUM)) 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++) for(i = 0; i < wRegLen; i++)
{ {
//获取16位数据并返回 //获取16位数据并返回
wRegValue = GetInputRegData(wRegStartAdd + i); wRegValue = GetInputRegData(wRegStartAdd + i);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8);
upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF);
@ -284,12 +284,12 @@ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
WriteSingleRegFUNC WriteSingleRegFUNC
:0x06 () :0x06 ()
*:[][06][][][][][CRC低][CRC高] *:[][06][][][][][CRC低][CRC高]
*:[][06][][][][][CRC低][CRC高] *:[][06][][][][][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void writesinglereg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据 wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据
if((wRegAddr <= HOLD_REG_ADD_MAX))//(wRegAddr >= HOLD_REG_ADD_MIN) && 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 WriteMultiRegFUNC
:0x10 :0x10
*******************************************************************************/ *******************************************************************************/
void writemultireg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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; if(upRxdbuf == NULL) return;
wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址
wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量 wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量
uByteNum = upRxdbuf[4]; //获取字节数 uByteNum = upRxdbuf[4]; //获取字节数
if((wRegNum >= 0x01) && (wRegNum <= MAX_HOLD_REG_NUM) && (uByteNum == wRegNum * 2)) 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 WriteSingleCoilFUNC
:0x05 线 :0x05 线
*******************************************************************************/ *******************************************************************************/
void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 uCommIndexNum = 0, uErrorCode;
uint8_t upTxdbuf[100]; uint8_t upTxdbuf[100];
wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据 wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据
if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00)) if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00))
{ {
@ -441,12 +441,12 @@ void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen)
} }
/******************************************************************************* /*******************************************************************************
WriteMultiCoilFUNC WriteMultiCoilFUNC
:0x0F,线 :0x0F,线
*:[][0F][][][线][线][][线][CRC低][CRC高] *:[][0F][][][线][线][][线][CRC低][CRC高]
*:[][0F][][][线][线][CRC低][CRC高] *:[][0F][][][线][线][CRC低][CRC高]
*******************************************************************************/ *******************************************************************************/
void writemulticoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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 i,k,uCommIndexNum = 0,uByteNum,uByteVal,uExit = 0,uErrorCode;
uint8_t upTxdbuf[100]; uint8_t upTxdbuf[100];
wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址
wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数
uByteNum = upRxdbuf[4]; //获取字节数 uByteNum = upRxdbuf[4]; //获取字节数
if((wCoilNum >= 0x01) && (wCoilNum <= MAX_COIL_NUM) && (wCoilNum <= 8 * uByteNum)) 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 : MODBUS_ERRFunction
: :
: :
: :
= +0x80 = +0x80
*******************************************************************************/ *******************************************************************************/
void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode) 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 Modbus_Analysis
CRC校验 CRC校验
ptr-- len-- ptr-- len--
CRC校验码 CRC校验码
*******************************************************************************/ *******************************************************************************/
void modbus_analysis_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) 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]; uSlaveAdd = upRxdbuf[6];
uCmdCode = upRxdbuf[7]; uCmdCode = upRxdbuf[7];
// 从机地址为本机地址或者是广播帧 // 从机地址为本机地址或者是广播帧
if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS)) if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS))
{ {
switch(uCmdCode) switch(uCmdCode)
{ {
case ReadCoilState: case ReadCoilState:
readcoilstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读线圈状态 readcoilstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读线圈状态
break; break;
case ReadDisInputState: case ReadDisInputState:
readdisinputstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读离散输入状态 readdisinputstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读离散输入状态
break; break;
case ReadHoldReg: case ReadHoldReg:
readholdreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取保持寄存器 readholdreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取保持寄存器
break; break;
case ReadInputReg: case ReadInputReg:
readinputreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取输入寄存器 readinputreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取输入寄存器
break; break;
case WriteSingleReg: case WriteSingleReg:
writesinglereg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个寄存器 writesinglereg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个寄存器
break; break;
case WriteMultiCoil: case WriteMultiCoil:
writemulticoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个线圈 writemulticoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个线圈
break; break;
case WriteMultiReg: case WriteMultiReg:
writemultireg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个寄存器 writemultireg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个寄存器
break; break;
case WriteSingleCoil: case WriteSingleCoil:
writesinglecoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个线圈 writesinglecoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个线圈
break; break;
default: default:
modbus_errfunction_tcp(upRxdbuf[7], 0x01); // 错误码处理 modbus_errfunction_tcp(upRxdbuf[7], 0x01); // 错误码处理
break; break;
} }
} }
@ -609,12 +609,12 @@ void modbus_process_tcp(void)
uint8_t *pFrame; uint8_t *pFrame;
uint16_t wFrameLen = 0; uint16_t wFrameLen = 0;
pFrame = MODBUS_TCP.recv.buf; // 接收数据 pFrame = MODBUS_TCP.recv.buf; // 接收数据
wFrameLen = MODBUS_TCP.recv.size; // 接收数据长度 wFrameLen = MODBUS_TCP.recv.size; // 接收数据长度
if(wFrameLen < 2) return; // 数据长度不是有效值 if(wFrameLen < 2) return; // 数据长度不是有效值
modbus_analysis_tcp(pFrame, wFrameLen); // 协议处理 modbus_analysis_tcp(pFrame, wFrameLen); // 协议处理
} }

View File

@ -1,9 +1,9 @@
#include "adcs.h" #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) void adcs_init(void)
{ {
@ -20,10 +20,10 @@ void analog_gather(void)
if(it_10ms_flag == 1) if(it_10ms_flag == 1)
{ {
it_10ms_flag = 0; it_10ms_flag = 0;
mf5803_loop(); //sensor_1 and sensor_2, 气压检测 mf5803_loop(); //sensor_1 and sensor_2, 气压检测
adcs_data(); //定位器输出回采 adcs_data(); //定位器输出回采
ads1256_get_data(); //8路模拟输入 ads1256_get_data(); //8路模拟输入
ads1220_get_data(); //比例阀1&2自带反馈 + 输出回采 ads1220_get_data(); //比例阀1&2自带反馈 + 输出回采
} }
if(it_100ms_flag == 1) if(it_100ms_flag == 1)

View File

@ -1,7 +1,7 @@
#include "encoder.h" #include "encoder.h"
//编码器相关参数 //编码器相关参数
int last_encode_num = 0; int last_encode_num = 0;
int curr_encode_num = 0; int curr_encode_num = 0;
uint32_t encode_num = 0; uint32_t encode_num = 0;
@ -9,30 +9,30 @@ int cnt_update = 152;
void encoder_init(void) void encoder_init(void)
{ {
HAL_TIM_Encoder_Stop(&htim1, TIM_CHANNEL_ALL); //定时器1编码器关闭 HAL_TIM_Encoder_Stop(&htim1, TIM_CHANNEL_ALL); //定时器1编码器关闭
__HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万 __HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万
HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //定时器1编码器启动 HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //定时器1编码器启动
last_encode_num = 0; last_encode_num = 0;
curr_encode_num = 0; curr_encode_num = 0;
encode_num = 0; encode_num = 0;
cnt_update = 152; cnt_update = 152;
CoilState[3] &= 0x7F; //初始化完成后线圈寄存器0x28置零 CoilState[3] &= 0x7F; //初始化完成后线圈寄存器0x28置零
} }
void encoder_run(void) void encoder_run(void)
{ {
//编码器 //编码器
last_encode_num = curr_encode_num; last_encode_num = curr_encode_num;
curr_encode_num = __HAL_TIM_GET_COUNTER(&htim1); 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++; 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--; cnt_update--;
encode_num = curr_encode_num + cnt_update * 0xFFFF; //编码器,返回计数脉冲值 encode_num = curr_encode_num + cnt_update * 0xFFFF; //编码器,返回计数脉冲值
InputReg[20] = (encode_num >> 16) & 0xffff; //32位int 拆分成两个 uint16_t高16位 InputReg[20] = (encode_num >> 16) & 0xffff; //32位int 拆分成两个 uint16_t高16位
InputReg[21] = encode_num & 0xffff; //32位int 拆分成两个 uint16_t低16位 InputReg[21] = encode_num & 0xffff; //32位int 拆分成两个 uint16_t低16位
} }

View File

@ -13,9 +13,9 @@ void led_ctrl()
void digital_ctrl() void digital_ctrl()
{ {
led_ctrl();//指示灯 led_ctrl();//指示灯
//八位DO输出控制 //八位DO输出控制
PE2_DO1((GPIO_PinState)((CoilState[0]>>0)&0x01)); PE2_DO1((GPIO_PinState)((CoilState[0]>>0)&0x01));
PE3_DO2((GPIO_PinState)((CoilState[0]>>1)&0x01)); PE3_DO2((GPIO_PinState)((CoilState[0]>>1)&0x01));
PE4_DO3((GPIO_PinState)((CoilState[0]>>2)&0x01)); PE4_DO3((GPIO_PinState)((CoilState[0]>>2)&0x01));
@ -28,7 +28,7 @@ void digital_ctrl()
coil1 = coil2; coil1 = coil2;
coil2 = CoilState[2]; coil2 = CoilState[2];
//当有595级联的时候先发的数据会级联到第二块595芯片中 //当有595级联的时候先发的数据会级联到第二块595芯片中
if(coil1 != coil2) if(coil1 != coil2)
{ {
hc595_write_data(CoilState[2]); hc595_write_data(CoilState[2]);
@ -46,7 +46,7 @@ void digital_ctrl()
DisState[2] = DI_NAMUR1 + DI_NAMUR2 * 2; DisState[2] = DI_NAMUR1 + DI_NAMUR2 * 2;
//encoder reset //encoder reset
if( ((CoilState[3]>>7)&0x01) == 1 ) //CoilState[3]的D7位地址0x28 if( ((CoilState[3]>>7)&0x01) == 1 ) //CoilState[3]的D7位地址0x28
{ {
encoder_init(); encoder_init();
} }

View File

@ -150,7 +150,7 @@ void analog_ctrl(void)
{ {
it_50ms_flag_pv = 0; it_50ms_flag_pv = 0;
atm_pressure = 1000; //大气绝压更新 atm_pressure = 1012; //大气绝压更新
//比例阀1数据更新当前气压、当前气压百分比、百分比偏差、当前输入电流单片机->比例阀) //比例阀1数据更新当前气压、当前气压百分比、百分比偏差、当前输入电流单片机->比例阀)
pv_one.current_pressure = (InputReg[16] - atm_pressure)/(float)10; //Kpasensor1 A口绝压转表压 pv_one.current_pressure = (InputReg[16] - atm_pressure)/(float)10; //Kpasensor1 A口绝压转表压

View File

@ -72,7 +72,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
} }
uint8_t exit_check = 0; 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) if(GPIO_Pin == GPIO_PIN_13)
{ {

View File

@ -3,8 +3,8 @@
#define UART6_RX_BUFFER_SIZE 256 #define UART6_RX_BUFFER_SIZE 256
uint8_t UART6_RxBuffer[UART6_RX_BUFFER_SIZE]; uint8_t UART6_RxBuffer[UART6_RX_BUFFER_SIZE];
UART_BUF uart1; //串口结构体实体 UART_BUF uart1; //串口结构体实体
uint8_t RxBuffer; //接收数据中间变量 uint8_t RxBuffer; //接收数据中间变量
#pragma import(__use_no_semihosting_swi) #pragma import(__use_no_semihosting_swi)
#pragma import(__use_no_semihosting) #pragma import(__use_no_semihosting)
@ -19,7 +19,7 @@ struct __FILE {
/* standard output using printf() for debugging, no file handling */ /* standard output using printf() for debugging, no file handling */
/* is required. */ /* is required. */
}; };
/* FILE is typedef d in stdio.h. */ /* FILE is typedef d in stdio.h. */
FILE __stdout; FILE __stdout;
int fputc(int ch, FILE *f) int fputc(int ch, FILE *f)