修改驱动程序
This commit is contained in:
parent
063c3fcc07
commit
a69c1a58d6
@ -1,41 +1,41 @@
|
||||
#include "main.h"
|
||||
|
||||
|
||||
int DiReadChann(int chann)
|
||||
int DiReadChann (int chann)
|
||||
{
|
||||
int ret = -1;
|
||||
switch(chann)
|
||||
switch (chann)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin(DI1_GPIO_Port,DI1_Pin);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin(DI2_GPIO_Port,DI2_Pin);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin(DI3_GPIO_Port,DI4_Pin);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin(DI4_GPIO_Port,DI4_Pin);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin(DI5_GPIO_Port,DI5_Pin);
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin(DI6_GPIO_Port,DI6_Pin);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin (DI1_GPIO_Port, DI1_Pin);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin (DI2_GPIO_Port, DI2_Pin);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin (DI3_GPIO_Port, DI4_Pin);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin (DI4_GPIO_Port, DI4_Pin);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin (DI5_GPIO_Port, DI5_Pin);
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
ret = HAL_GPIO_ReadPin (DI6_GPIO_Port, DI6_Pin);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
#ifndef _DI_BOARD_H
|
||||
#define _DI_BOARD_H
|
||||
|
||||
void DiInit(void);
|
||||
int DiReadChann(int chann);
|
||||
void DiInit (void);
|
||||
int DiReadChann (int chann);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@ -7,11 +7,11 @@
|
||||
|
||||
|
||||
// ³¢ÊÔ´´½¨Socket
|
||||
const char
|
||||
const char
|
||||
|
||||
|
||||
|
||||
void EthMqttTick(void)
|
||||
void EthMqttTick (void)
|
||||
{
|
||||
if (s_tx_timeout > 1)
|
||||
s_tx_timeout--;
|
||||
@ -27,7 +27,8 @@ void EthMqttTick(void)
|
||||
// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
|
||||
//}
|
||||
|
||||
static enum {
|
||||
static enum
|
||||
{
|
||||
DeviceReboot,
|
||||
DeviceConfig,
|
||||
DeviceGetPara,
|
||||
@ -35,13 +36,14 @@ static enum {
|
||||
DeviceReset,
|
||||
DeviceLink,
|
||||
DeviceIdle,
|
||||
}DeviceState = DeviceReboot ;
|
||||
static enum {
|
||||
} DeviceState = DeviceReboot ;
|
||||
static enum
|
||||
{
|
||||
FistIn,
|
||||
Runing,
|
||||
End,
|
||||
JumpUp
|
||||
}s_run = FistIn;
|
||||
} s_run = FistIn;
|
||||
|
||||
|
||||
|
||||
@ -54,11 +56,11 @@ static enum {
|
||||
// NetFunc.ReSubTopic = EthMqttReSubTopic;
|
||||
// NetFunc.Task = EthMqttTask;
|
||||
|
||||
void EthMqttInit(void)
|
||||
void EthMqttInit (void)
|
||||
{
|
||||
// char str[128];
|
||||
// char addr_str[10];
|
||||
|
||||
|
||||
// GPIO_InitTypeDef GPIO_InitStruct;
|
||||
// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
// GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
@ -67,7 +69,7 @@ void EthMqttInit(void)
|
||||
// GPIO_InitStruct.Pin = GPIO_PIN_1;
|
||||
// HAL_GPIO_Init (GPIOB, &GPIO_InitStruct);
|
||||
// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
|
||||
|
||||
|
||||
// GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
// GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
@ -101,42 +103,42 @@ void EthMqttDisConnectd (void)
|
||||
s_lost_timer = 0;
|
||||
DisWriteNetSte (2, QUEUE);
|
||||
DeviceState = DeviceReboot;
|
||||
dbg_printf("Eth Device IsDisconnected \r\n");
|
||||
dbg_printf ("Eth Device IsDisconnected \r\n");
|
||||
}
|
||||
|
||||
int EthMqttReadData(char * buf,int length)
|
||||
int EthMqttReadData (char * buf, int length)
|
||||
{
|
||||
int k =0;
|
||||
if (UartInfoRxIsReady(uEth) == 1)
|
||||
int k = 0;
|
||||
if (UartInfoRxIsReady (uEth) == 1)
|
||||
{
|
||||
k = UartInfoReadData(uEth,(char *)buf,length);
|
||||
dbg_printf("<<<<<<<<<<<<%d\r\n",k);
|
||||
k = UartInfoReadData (uEth, (char *) buf, length);
|
||||
dbg_printf ("<<<<<<<<<<<<%d\r\n", k);
|
||||
s_lost_timer = 60000;
|
||||
DisWriteNetSte (1, QUEUE);
|
||||
}
|
||||
return k;
|
||||
}
|
||||
|
||||
int EthMqttIsReady(void)
|
||||
int EthMqttIsReady (void)
|
||||
{
|
||||
if (DeviceState != DeviceIdle )
|
||||
if (DeviceState != DeviceIdle)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return UartInfoRxIsReady(uEth);
|
||||
return UartInfoRxIsReady (uEth);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EthMqttWriteData(char * data,int length)
|
||||
void EthMqttWriteData (char * data, int length)
|
||||
{
|
||||
UartInfoWriteData(uEth,data,length);
|
||||
UartInfoWriteData (uEth, data, length);
|
||||
}
|
||||
|
||||
|
||||
int EthMqttIsIdle(void)
|
||||
int EthMqttIsIdle (void)
|
||||
{
|
||||
if (EthMqttIsConnect() == 0)
|
||||
{
|
||||
@ -148,209 +150,213 @@ int EthMqttIsIdle(void)
|
||||
}
|
||||
|
||||
|
||||
int EthMqttIsConnect(void)
|
||||
int EthMqttIsConnect (void)
|
||||
{
|
||||
if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_4) == GPIO_PIN_SET)
|
||||
if (HAL_GPIO_ReadPin (GPIOC, GPIO_PIN_4) == GPIO_PIN_SET)
|
||||
return 1;
|
||||
else
|
||||
else
|
||||
return 0;
|
||||
//return s_isconnect;
|
||||
}
|
||||
|
||||
void EthMqttTask(void)
|
||||
void EthMqttTask (void)
|
||||
{
|
||||
int rx_size;
|
||||
char str[128];
|
||||
//static pst_Work_Pragma pstWork_Pragma;
|
||||
switch(DeviceState)
|
||||
switch (DeviceState)
|
||||
{
|
||||
case DeviceReboot:
|
||||
case DeviceReboot:
|
||||
{
|
||||
if (s_run == FistIn)
|
||||
{
|
||||
if (s_run == FistIn)
|
||||
{
|
||||
dbg_printf("EthDeviceReboot\r\n");
|
||||
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
|
||||
s_run_timer = 500;
|
||||
s_run = Runing;
|
||||
}
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
if(s_run_timer == 1)
|
||||
{
|
||||
s_run_timer = 0;
|
||||
s_run = End;
|
||||
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
|
||||
dbg_printf("Reboot Finsh\r\n");
|
||||
s_run_timer = 5000;
|
||||
}
|
||||
}
|
||||
else if (s_run == End){
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
//dbg_printf("Reboot Finsh\r\n");
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
s_run = FistIn ;
|
||||
DeviceState = DeviceConfig;
|
||||
}
|
||||
break;
|
||||
dbg_printf ("EthDeviceReboot\r\n");
|
||||
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
|
||||
s_run_timer = 500;
|
||||
s_run = Runing;
|
||||
}
|
||||
// 这里要等待3s
|
||||
case DeviceConfig: // 进入配置模式
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
if(s_run == FistIn)
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
dbg_printf("DeviceConfig\r\n");
|
||||
UartInfoClearData (uEth) ;
|
||||
UartInfoWriteData(uEth,"++++++++++",10);
|
||||
s_run_timer = 0;
|
||||
s_run = End;
|
||||
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
|
||||
dbg_printf ("Reboot Finsh\r\n");
|
||||
s_run_timer = 5000;
|
||||
}
|
||||
}
|
||||
else if (s_run == End)
|
||||
{
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
//dbg_printf("Reboot Finsh\r\n");
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
s_run = FistIn ;
|
||||
DeviceState = DeviceConfig;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// 这里要等待3s
|
||||
case DeviceConfig: // 进入配置模式
|
||||
{
|
||||
if (s_run == FistIn)
|
||||
{
|
||||
dbg_printf ("DeviceConfig\r\n");
|
||||
UartInfoClearData (uEth) ;
|
||||
UartInfoWriteData (uEth, "++++++++++", 10);
|
||||
s_run_timer = 50;
|
||||
s_run = Runing;
|
||||
}
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
s_run_timer = 0;
|
||||
UartInfoWriteData (uEth, "{\"Command\":\"config\"}", strlen ("{\"Command\":\"config\"}"));
|
||||
dbg_printf ("Command\r\n");
|
||||
s_run = End;
|
||||
s_run_timer = 3000;
|
||||
}
|
||||
// 获取发送的数据
|
||||
}
|
||||
else if (s_run == End)
|
||||
{
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
s_run = FistIn;
|
||||
DeviceState = DeviceGetPara;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DeviceGetPara:
|
||||
{
|
||||
if (UartInfoRxIsReady (uEth) == 1)
|
||||
{
|
||||
dbg_printf ("DeviceGetPara\r\n");
|
||||
rx_size = UartInfoReadData (uEth, (char *) s_buffer, 1024);
|
||||
dbg_printf ("(%d)[%d]\r\n", rx_size, s_buffer[0]) ;
|
||||
DeviceState = DeviceSetPara;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DeviceSetPara:
|
||||
{
|
||||
if (s_run == FistIn)
|
||||
{
|
||||
memset (s_buffer, 0, 1024);
|
||||
//dbg_printf("subtopic:%s\r\n",(char *)pstWork_Pragma->stExternPragma.stMQTTClient.SubTopic);
|
||||
sprintf (s_buffer,
|
||||
"{\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":%d,\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\"}",
|
||||
"Command", "config",
|
||||
"RemoteHost", SysInfo.remoteAddr,
|
||||
"RemotePort", SysInfo.remotePort,
|
||||
"WorkMode", "MQTT",
|
||||
"UserName", SysInfo.remoteuser,
|
||||
"Password", SysInfo.remotepass,
|
||||
"PubTopic", pub_topic,
|
||||
"SubTopic", sub_topic
|
||||
);
|
||||
//SetParametersToData(pstWork_Pragma,(char *)s_buffer,1024);
|
||||
dbg_printf ("%s\r\n", s_buffer);
|
||||
UartInfoWriteData (uEth, s_buffer, strlen (s_buffer));
|
||||
s_run_timer = 1000;
|
||||
s_run = Runing;
|
||||
}
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
s_run_timer = 0;
|
||||
UartInfoWriteData (uEth, "{\"Command\":\"exit\"}", strlen ("{\"Command\":\"exit\"}"));
|
||||
dbg_printf ("Command\r\n");
|
||||
s_run = End;
|
||||
s_run_timer = 50;
|
||||
s_run = Runing;
|
||||
}
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
if(s_run_timer == 1)
|
||||
{
|
||||
s_run_timer = 0;
|
||||
UartInfoWriteData(uEth,"{\"Command\":\"config\"}",strlen("{\"Command\":\"config\"}"));
|
||||
dbg_printf("Command\r\n");
|
||||
s_run = End;
|
||||
s_run_timer = 3000;
|
||||
}
|
||||
// 获取发送的数据
|
||||
}
|
||||
else if (s_run == End)
|
||||
{
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
s_run = FistIn;
|
||||
DeviceState = DeviceGetPara;
|
||||
}
|
||||
break;
|
||||
// 获取发送的数据
|
||||
}
|
||||
case DeviceGetPara:
|
||||
else if (s_run == End)
|
||||
{
|
||||
if (UartInfoRxIsReady(uEth) == 1)
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
dbg_printf("DeviceGetPara\r\n");
|
||||
rx_size = UartInfoReadData(uEth,(char *)s_buffer,1024);
|
||||
dbg_printf("(%d)[%d]\r\n",rx_size,s_buffer[0]) ;
|
||||
DeviceState = DeviceSetPara;
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DeviceSetPara:
|
||||
else
|
||||
{
|
||||
if(s_run == FistIn)
|
||||
{
|
||||
memset(s_buffer,0,1024);
|
||||
//dbg_printf("subtopic:%s\r\n",(char *)pstWork_Pragma->stExternPragma.stMQTTClient.SubTopic);
|
||||
sprintf(s_buffer,
|
||||
"{\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":%d,\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\"}",
|
||||
"Command", "config",
|
||||
"RemoteHost",SysInfo.remoteAddr,
|
||||
"RemotePort",SysInfo.remotePort,
|
||||
"WorkMode","MQTT",
|
||||
"UserName",SysInfo.remoteuser,
|
||||
"Password" ,SysInfo.remotepass,
|
||||
"PubTopic",pub_topic,
|
||||
"SubTopic",sub_topic
|
||||
);
|
||||
//SetParametersToData(pstWork_Pragma,(char *)s_buffer,1024);
|
||||
dbg_printf("%s\r\n",s_buffer);
|
||||
UartInfoWriteData(uEth,s_buffer,strlen(s_buffer));
|
||||
s_run_timer = 1000;
|
||||
s_run = Runing;
|
||||
}
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
if(s_run_timer == 1)
|
||||
{
|
||||
s_run_timer = 0;
|
||||
UartInfoWriteData(uEth,"{\"Command\":\"exit\"}",strlen("{\"Command\":\"exit\"}"));
|
||||
dbg_printf("Command\r\n");
|
||||
s_run = End;
|
||||
s_run_timer = 50;
|
||||
}
|
||||
// 获取发送的数据
|
||||
}
|
||||
else if (s_run == End)
|
||||
{
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
s_run = FistIn;
|
||||
DeviceState = DeviceReset;
|
||||
}
|
||||
break;
|
||||
s_run = FistIn;
|
||||
DeviceState = DeviceReset;
|
||||
}
|
||||
case DeviceReset:
|
||||
break;
|
||||
}
|
||||
case DeviceReset:
|
||||
{
|
||||
if (s_run == FistIn)
|
||||
{
|
||||
if (s_run == FistIn)
|
||||
{
|
||||
|
||||
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
|
||||
s_run_timer = 500;
|
||||
s_run = Runing;
|
||||
}
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
if(s_run_timer == 1)
|
||||
{
|
||||
s_run_timer = 0;
|
||||
s_run = End;
|
||||
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
|
||||
dbg_printf("Reboot Finsh\r\n");
|
||||
s_run_timer = 3000;
|
||||
}
|
||||
}
|
||||
else if (s_run == End){
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
dbg_printf("Reboot Finsh\r\n");
|
||||
UartInfoClearData (uEth) ;
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
s_run = FistIn ;
|
||||
DeviceState = DeviceIdle;
|
||||
}
|
||||
break;
|
||||
|
||||
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
|
||||
s_run_timer = 500;
|
||||
s_run = Runing;
|
||||
}
|
||||
case DeviceLink:// 检查上线
|
||||
else if (s_run == Runing)
|
||||
{
|
||||
s_isconnect = 1;
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
s_run_timer = 0;
|
||||
s_run = End;
|
||||
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
|
||||
dbg_printf ("Reboot Finsh\r\n");
|
||||
s_run_timer = 3000;
|
||||
}
|
||||
}
|
||||
else if (s_run == End)
|
||||
{
|
||||
if (s_run_timer == 1)
|
||||
{
|
||||
dbg_printf ("Reboot Finsh\r\n");
|
||||
UartInfoClearData (uEth) ;
|
||||
s_run = JumpUp;
|
||||
s_run_timer = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
s_run = FistIn ;
|
||||
DeviceState = DeviceIdle;
|
||||
break;
|
||||
}
|
||||
case DeviceIdle:
|
||||
break;
|
||||
}
|
||||
case DeviceLink:// 检查上线
|
||||
{
|
||||
s_isconnect = 1;
|
||||
DeviceState = DeviceIdle;
|
||||
break;
|
||||
}
|
||||
case DeviceIdle:
|
||||
{
|
||||
if (s_lost_timer == 0)
|
||||
{
|
||||
if (s_lost_timer == 0)
|
||||
if (EthMqttIsConnect())
|
||||
{
|
||||
if (EthMqttIsConnect())
|
||||
{
|
||||
EthMqttConnectd();
|
||||
s_lost_timer = 60000;
|
||||
}
|
||||
// 第一次上线
|
||||
EthMqttConnectd();
|
||||
s_lost_timer = 60000;
|
||||
}
|
||||
break;
|
||||
// 第一次上线
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (s_lost_timer == 1)
|
||||
{
|
||||
@ -358,17 +364,17 @@ void EthMqttTask(void)
|
||||
s_run = FistIn ;
|
||||
}
|
||||
}
|
||||
int EthMqttReSubTopic(char * topic)
|
||||
int EthMqttReSubTopic (char * topic)
|
||||
{
|
||||
char addr_str[10];
|
||||
memset(addr_str,0,10);
|
||||
hexbyte_to_hex_str((char *)SysInfo.Addr,addr_str,4);
|
||||
memset(sub_topic,0,64);
|
||||
sprintf(sub_topic,"device/%s/tx/22000073%s",topic,addr_str);
|
||||
memset(pub_topic,0,64);
|
||||
sprintf(pub_topic,"device/%s/rx/22000073%s",topic,addr_str);
|
||||
|
||||
dbg_printf("EthMqttReSubTopic\r\n");
|
||||
char addr_str[10];
|
||||
memset (addr_str, 0, 10);
|
||||
hexbyte_to_hex_str ( (char *) SysInfo.Addr, addr_str, 4);
|
||||
memset (sub_topic, 0, 64);
|
||||
sprintf (sub_topic, "device/%s/tx/22000073%s", topic, addr_str);
|
||||
memset (pub_topic, 0, 64);
|
||||
sprintf (pub_topic, "device/%s/rx/22000073%s", topic, addr_str);
|
||||
|
||||
dbg_printf ("EthMqttReSubTopic\r\n");
|
||||
// memset(sub_topic,0,64);
|
||||
// sprintf(sub_topic,"device/%s/tx/22000000%08x",topic,SysInfo.Addr);
|
||||
// memset(pub_topic,0,64);
|
||||
|
||||
@ -1,27 +1,27 @@
|
||||
#ifndef _ETH_BOARD_H
|
||||
#define _ETH_BOARD_H µçѹ
|
||||
|
||||
void EthMqttTick(void);
|
||||
void EthMqttTask(void);
|
||||
void EthMqttInit(void);
|
||||
void EthMqttTick (void);
|
||||
void EthMqttTask (void);
|
||||
void EthMqttInit (void);
|
||||
|
||||
|
||||
int EthMqttReadData(char * buf,int length);
|
||||
int EthMqttReadData (char * buf, int length);
|
||||
|
||||
int EthMqttIsReady(void);
|
||||
int EthMqttIsReady (void);
|
||||
|
||||
|
||||
void EthMqttWriteData(char * data,int length);
|
||||
void EthMqttWriteData (char * data, int length);
|
||||
|
||||
|
||||
int EthMqttIsIdle(void);
|
||||
int EthMqttIsIdle (void);
|
||||
|
||||
|
||||
int EthMqttIsConnect(void);
|
||||
int EthMqttIsConnect (void);
|
||||
|
||||
int EthMqttReSubTopic(char * topic);
|
||||
int EthMqttReSubTopic (char * topic);
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
101
Board/network/dtu-board.c
Normal file
101
Board/network/dtu-board.c
Normal file
@ -0,0 +1,101 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#include "os-app.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <rtthread.h>
|
||||
#include <string.h>
|
||||
#include "usart-board.h"
|
||||
|
||||
|
||||
|
||||
#if !defined(LOG_TAG)
|
||||
#define LOG_TAG "dtu"
|
||||
#endif
|
||||
#include <elog.h>
|
||||
|
||||
ALIGN (RT_ALIGN_SIZE)
|
||||
static char thread_stack[2048];
|
||||
static struct rt_thread dtu_thread;
|
||||
|
||||
static struct
|
||||
{
|
||||
uint32_t isConnected; // 连接成功
|
||||
|
||||
} g_dtuDrv ;
|
||||
|
||||
|
||||
|
||||
static enum
|
||||
{
|
||||
netDrvInit = 0, // 初始化网络驱动
|
||||
netDrvJoin = 1, // 等待网络注册成功
|
||||
netDrvSend = 2, // 发送数据
|
||||
netDrvRecv = 3, // 读取数据
|
||||
netDrvIdle = 4, // 读取数据
|
||||
} eDrvStatus;
|
||||
|
||||
|
||||
|
||||
static void net_data_rxdone(void)
|
||||
{
|
||||
rt_event_send(gUartEvents,EVENT_UART_ETH1_RX);
|
||||
//rt_kprintf("net_data_rxdone\r\n");
|
||||
}
|
||||
|
||||
|
||||
static void thread_entry (void * argument)
|
||||
{
|
||||
// eDrvStatus = netDrvInit;
|
||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
||||
// gnetEvents = rt_event_create("gnetEvents", RT_IPC_FLAG_FIFO) ;
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
|
||||
HAL_GPIO_WritePin(ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(ETH_PW_GPIO_Port, ETH_PW_Pin, GPIO_PIN_SET);
|
||||
g_ETH1Drv.rxdone = net_data_rxdone;
|
||||
MX_UART_Init(&g_ETH1Drv);
|
||||
|
||||
// // 注册网络驱动
|
||||
// 注册网络驱动
|
||||
while (1)
|
||||
{
|
||||
//MX_UART_PutBuffer(&g_ETH1Drv,"20140524",8);
|
||||
if( RT_EOK == rt_event_recv( gUartEvents, EVENT_UART_ETH1_RX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
rt_kprintf("<<<<<<<<<<<<<<<<<<<<rx1:\r\n");
|
||||
for(int i =0; i < g_ETH1Drv.rx_size;i++)
|
||||
{
|
||||
rt_kprintf("%02X ",g_ETH1Drv.rx_buffer[i]);
|
||||
}
|
||||
rt_kprintf("\r\n");
|
||||
MX_UART_Clear(&g_ETH1Drv);
|
||||
}
|
||||
|
||||
|
||||
rt_thread_delay (100);
|
||||
}
|
||||
}
|
||||
|
||||
void DTUThreadStart (void)
|
||||
{
|
||||
/* 创建线程1,名称是thread1,入口是thread1_entry*/
|
||||
rt_thread_init (&dtu_thread, "dtu_thread",
|
||||
thread_entry, RT_NULL,
|
||||
&thread_stack[0],
|
||||
sizeof (thread_stack),
|
||||
DTU_THREAD_PRIORITY, DTU_THREAD_TIMESLICE);
|
||||
rt_thread_startup (&dtu_thread);
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
9
Board/network/dtu-board.h
Normal file
9
Board/network/dtu-board.h
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef _DTU_BOARD_H
|
||||
#define _DTU_BOARD_H
|
||||
|
||||
typedef struct {
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
101
Board/network/dtu2-board.c
Normal file
101
Board/network/dtu2-board.c
Normal file
@ -0,0 +1,101 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#include "os-app.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <rtthread.h>
|
||||
#include <string.h>
|
||||
#include "usart-board.h"
|
||||
|
||||
|
||||
|
||||
#if !defined(LOG_TAG)
|
||||
#define LOG_TAG "dtu2"
|
||||
#endif
|
||||
#include <elog.h>
|
||||
|
||||
ALIGN (RT_ALIGN_SIZE)
|
||||
static char thread_stack[2048];
|
||||
static struct rt_thread dtu2_thread;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static enum
|
||||
{
|
||||
netDrvInit = 0, // 初始化网络驱动
|
||||
netDrvJoin = 1, // 等待网络注册成功
|
||||
netDrvSend = 2, // 发送数据
|
||||
netDrvRecv = 3, // 读取数据
|
||||
netDrvIdle = 4, // 读取数据
|
||||
} eDrvStatus;
|
||||
|
||||
|
||||
|
||||
|
||||
static void net_data_rxdone(void)
|
||||
{
|
||||
rt_event_send(gUartEvents,EVENT_UART_ETH2_RX);
|
||||
//rt_kprintf("net_data_rxdone\r\n");
|
||||
}
|
||||
|
||||
static void thread_entry (void * argument)
|
||||
{
|
||||
// eDrvStatus = netDrvInit;
|
||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
||||
|
||||
g_ETH2Drv.rxdone = net_data_rxdone;
|
||||
MX_UART_Init(&g_ETH2Drv);
|
||||
// // 注册网络驱动
|
||||
// 注册网络驱动
|
||||
while (1)
|
||||
{
|
||||
//MX_UART_PutBuffer(&g_ETH1Drv,"20140524",8);
|
||||
if( RT_EOK == rt_event_recv( gUartEvents, EVENT_UART_ETH1_RX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
rt_kprintf("<<<<<<<<<<<<<<<<<<<<rx1:\r\n");
|
||||
for(int i =0; i < g_ETH1Drv.rx_size;i++)
|
||||
{
|
||||
rt_kprintf("%02X ",g_ETH1Drv.rx_buffer[i]);
|
||||
}
|
||||
rt_kprintf("\r\n");
|
||||
MX_UART_Clear(&g_ETH1Drv);
|
||||
}
|
||||
|
||||
if( RT_EOK == rt_event_recv( gUartEvents, EVENT_UART_ETH2_RX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
rt_kprintf("<<<<<<<<<<<<<<<<<<<<rx2:\r\n");
|
||||
for(int i =0; i < g_ETH2Drv.rx_size;i++)
|
||||
{
|
||||
rt_kprintf("%02X ",g_ETH2Drv.rx_buffer[i]);
|
||||
}
|
||||
rt_kprintf("\r\n");
|
||||
MX_UART_Clear(&g_ETH2Drv);
|
||||
}
|
||||
rt_thread_delay (100);
|
||||
}
|
||||
}
|
||||
|
||||
void DTU2ThreadStart (void)
|
||||
{
|
||||
/* 创建线程1,名称是thread1,入口是thread1_entry*/
|
||||
rt_thread_init (&dtu2_thread, "dtu2_thread",
|
||||
thread_entry, RT_NULL,
|
||||
&thread_stack[0],
|
||||
sizeof (thread_stack),
|
||||
DTU2_THREAD_PRIORITY, DTU2_THREAD_TIMESLICE);
|
||||
rt_thread_startup (&dtu2_thread);
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
9
Board/network/dtu2-board.h
Normal file
9
Board/network/dtu2-board.h
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef _DTU_BOARD_H
|
||||
#define _DTU_BOARD_H
|
||||
|
||||
typedef struct {
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
@ -4,8 +4,8 @@
|
||||
void PwmInfoInit()
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
MX_TIM2_PWMInit(5); // PA15
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
MX_TIM2_PWMInit (5); // PA15
|
||||
// // __HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
// // __HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
|
||||
@ -16,7 +16,7 @@ void PwmInfoInit()
|
||||
//// GPIO_InitStruct.Pin = GPIO_PIN_15;
|
||||
//// HAL_GPIO_Init (GPIOA, &GPIO_InitStruct);
|
||||
//// HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_RESET);
|
||||
//
|
||||
//
|
||||
// //TIM2-CH2 PB3 GPIO_AF2_TIM2
|
||||
// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
// GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
@ -26,7 +26,7 @@ void PwmInfoInit()
|
||||
// GPIO_InitStruct.Pin = GPIO_PIN_3;
|
||||
// HAL_GPIO_Init (GPIOB, &GPIO_InitStruct);
|
||||
// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET);
|
||||
//
|
||||
//
|
||||
// //TIM2-CH3 PB10 GPIO_AF2_TIM2
|
||||
// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
// GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
@ -45,11 +45,11 @@ void PwmInfoInit()
|
||||
// GPIO_InitStruct.Pin = GPIO_PIN_11;
|
||||
// HAL_GPIO_Init (GPIOB, &GPIO_InitStruct);
|
||||
// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET);
|
||||
//
|
||||
//
|
||||
//// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET);
|
||||
//// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
|
||||
//// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_RESET);
|
||||
////
|
||||
////
|
||||
//// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET);
|
||||
//// HAL_Delay(10);
|
||||
//// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);
|
||||
@ -60,20 +60,20 @@ void PwmInfoInit()
|
||||
// //PwmInfoStart(2);
|
||||
// //PwmInfoStart(3);
|
||||
// //PwmInfoStart(4);
|
||||
PwmInfoSetDuty(1,100) ;// 全部默认100 占空比
|
||||
PwmInfoSetDuty(2,100) ;// 全部默认100 占空比
|
||||
PwmInfoSetDuty(3,100) ;// 全部默认100 占空比
|
||||
PwmInfoSetDuty(4,100) ;// 全部默认100 占空比
|
||||
PwmInfoSetDuty (1, 100) ; // 全部默认100 占空比
|
||||
PwmInfoSetDuty (2, 100) ; // 全部默认100 占空比
|
||||
PwmInfoSetDuty (3, 100) ; // 全部默认100 占空比
|
||||
PwmInfoSetDuty (4, 100) ; // 全部默认100 占空比
|
||||
}
|
||||
|
||||
// Õ¼¿Õ±È
|
||||
void PwmInfoSetDuty(int index,int duty)
|
||||
void PwmInfoSetDuty (int index, int duty)
|
||||
{
|
||||
|
||||
MX_TIM2_PWMStart(index,duty);
|
||||
MX_TIM2_PWMStart (index, duty);
|
||||
}
|
||||
|
||||
//void PwmInfoStop(int index)
|
||||
//{
|
||||
// MX_TIM2_PWMStop(index);
|
||||
// MX_TIM2_PWMStop(index);
|
||||
//}
|
||||
|
||||
@ -8,12 +8,12 @@
|
||||
#define PWM_DIO 0//设置为普通IO空输出
|
||||
#define PWM_PWM 1//设置为PWM输出
|
||||
|
||||
void PwmInfoInit(void);
|
||||
void PwmInfoSetDuty(int index,int duty);
|
||||
void PwmInfoStop(int index) ;
|
||||
void PwmInfoInit (void);
|
||||
void PwmInfoSetDuty (int index, int duty);
|
||||
void PwmInfoStop (int index) ;
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2,9 +2,10 @@
|
||||
|
||||
|
||||
|
||||
RelayInfo_t RelayInfo = {
|
||||
{GPIOB, GPIO_PIN_8, GPIO_MODE_OUTPUT_PP,GPIO_PULLUP, GPIO_SPEED_FREQ_VERY_HIGH, NULL}, //PB5
|
||||
{GPIOB, GPIO_PIN_9, GPIO_MODE_OUTPUT_PP,GPIO_PULLUP, GPIO_SPEED_FREQ_VERY_HIGH, NULL}, //PB5
|
||||
RelayInfo_t RelayInfo =
|
||||
{
|
||||
{GPIOB, GPIO_PIN_8, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_VERY_HIGH, NULL}, //PB5
|
||||
{GPIOB, GPIO_PIN_9, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_VERY_HIGH, NULL}, //PB5
|
||||
};
|
||||
/********************************************
|
||||
函数名称:UartInfoInit
|
||||
@ -12,42 +13,42 @@ RelayInfo_t RelayInfo = {
|
||||
输出参数:NULL
|
||||
功能描述:初始化一个串口
|
||||
********************************************/
|
||||
void RelayInfoInit(void)
|
||||
void RelayInfoInit (void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
|
||||
GPIO_InitStruct.Mode = RelayInfo.Relay1.mode;
|
||||
GPIO_InitStruct.Pull = RelayInfo.Relay1.Pull;
|
||||
GPIO_InitStruct.Speed = RelayInfo.Relay1.Speed;
|
||||
|
||||
GPIO_InitStruct.Pin = RelayInfo.Relay1.pin;
|
||||
HAL_GPIO_Init (RelayInfo.Relay1.GPIOx, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay1.GPIOx,RelayInfo.Relay1.pin,GPIO_PIN_RESET);
|
||||
|
||||
|
||||
HAL_GPIO_WritePin (RelayInfo.Relay1.GPIOx, RelayInfo.Relay1.pin, GPIO_PIN_RESET);
|
||||
|
||||
|
||||
GPIO_InitStruct.Mode = RelayInfo.Relay2.mode;
|
||||
GPIO_InitStruct.Pull = RelayInfo.Relay2.Pull;
|
||||
GPIO_InitStruct.Speed = RelayInfo.Relay2.Speed;
|
||||
|
||||
GPIO_InitStruct.Pin = RelayInfo.Relay2.pin;
|
||||
HAL_GPIO_Init (RelayInfo.Relay2.GPIOx, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay2.GPIOx,RelayInfo.Relay2.pin,GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin (RelayInfo.Relay2.GPIOx, RelayInfo.Relay2.pin, GPIO_PIN_RESET);
|
||||
}
|
||||
void RelayOpenDoor(void)
|
||||
void RelayOpenDoor (void)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay1.GPIOx,RelayInfo.Relay1.pin,GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin (RelayInfo.Relay1.GPIOx, RelayInfo.Relay1.pin, GPIO_PIN_SET);
|
||||
}
|
||||
void RelayCloseDoor(void)
|
||||
void RelayCloseDoor (void)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay1.GPIOx,RelayInfo.Relay1.pin,GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin (RelayInfo.Relay1.GPIOx, RelayInfo.Relay1.pin, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
|
||||
void RelayOpenK2(void)
|
||||
void RelayOpenK2 (void)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay2.GPIOx,RelayInfo.Relay2.pin,GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin (RelayInfo.Relay2.GPIOx, RelayInfo.Relay2.pin, GPIO_PIN_SET);
|
||||
}
|
||||
void RelayCloseK2(void)
|
||||
void RelayCloseK2 (void)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay2.GPIOx,RelayInfo.Relay2.pin,GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin (RelayInfo.Relay2.GPIOx, RelayInfo.Relay2.pin, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
@ -11,15 +11,15 @@ typedef struct RelayInfo_t
|
||||
GpioInfo_t Relay1; // 用于控制485的收发
|
||||
GpioInfo_t Relay2; // 用于控制485的收发
|
||||
|
||||
}RelayInfo_t;
|
||||
} RelayInfo_t;
|
||||
|
||||
void RelayInfoInit(void);
|
||||
void RelayOpenDoor(void);
|
||||
void RelayCloseDoor(void);
|
||||
void RelayOpenK2(void);
|
||||
void RelayCloseK2(void);
|
||||
void RelayInfoInit (void);
|
||||
void RelayOpenDoor (void);
|
||||
void RelayCloseDoor (void);
|
||||
void RelayOpenK2 (void);
|
||||
void RelayCloseK2 (void);
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@ -1,14 +1,148 @@
|
||||
#include "usart-board.h"
|
||||
#include "usart.h"
|
||||
|
||||
|
||||
#define UART_LPUART1_BUFF_SIZE 256 // 4853
|
||||
#define UART_LPUART2_BUFF_SIZE 2400 // gsm
|
||||
#define UART_UART1_BUFF_SIZE 256 // 4852
|
||||
#define UART_UART2_BUFF_SIZE 2048 // debbug
|
||||
#define UART_UART3_BUFF_SIZE 256 // 4852
|
||||
#define UART_UART4_BUFF_SIZE 2400 // eth1
|
||||
#define UART_UART5_BUFF_SIZE 256 // 4851
|
||||
#define UART_UART6_BUFF_SIZE 256 // view
|
||||
|
||||
|
||||
|
||||
static char s_lpuart1_buff[UART_LPUART1_BUFF_SIZE];
|
||||
static char s_lpuart2_buff[UART_LPUART2_BUFF_SIZE];
|
||||
static char s_uart1_buff[UART_UART1_BUFF_SIZE];
|
||||
static char s_uart2_buff[UART_UART2_BUFF_SIZE];
|
||||
static char s_uart3_buff[UART_UART3_BUFF_SIZE];
|
||||
static char s_uart4_buff[UART_UART4_BUFF_SIZE];
|
||||
static char s_uart5_buff[UART_UART5_BUFF_SIZE];
|
||||
static char s_uart6_buff[UART_UART6_BUFF_SIZE];
|
||||
|
||||
|
||||
extern UART_HandleTypeDef hlpuart1;
|
||||
extern UART_HandleTypeDef hlpuart2;
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart2;
|
||||
extern UART_HandleTypeDef huart3;
|
||||
extern UART_HandleTypeDef huart4;
|
||||
extern UART_HandleTypeDef huart5;
|
||||
extern UART_HandleTypeDef huart6;
|
||||
|
||||
UartDrv_t g_DebugDrv = { G0_UART2, 115200, PARITY_DATA_8N1, s_uart2_buff, 0, NULL, 0 }; // 调试串口驱动
|
||||
UartDrv_t g_U4851Drv = { G0_UART5, 115200, PARITY_DATA_8N1, s_uart5_buff, 0, NULL, 0 }; // 4851 驱动
|
||||
UartDrv_t g_U4852Drv = { G0_UART3, 115200, PARITY_DATA_8N1, s_uart3_buff, 0, NULL, 0 }; // 4852 驱动
|
||||
UartDrv_t g_U4853Drv = { G0_UART1, 115200, PARITY_DATA_8N1, s_uart1_buff, 0, NULL, 0 }; // 4853 驱动
|
||||
UartDrv_t g_ViewDrv = { G0_UART6, 115200, PARITY_DATA_8N1, s_uart6_buff, 0, NULL, 0 }; // view 驱动
|
||||
UartDrv_t g_ETH1Drv = { G0_UART4, 115200, PARITY_DATA_8N1, s_uart4_buff, 0, NULL, 0 }; // 以太网通道1 驱动
|
||||
UartDrv_t g_ETH2Drv = { G0_LPUART1, 115200, PARITY_DATA_8N1, s_lpuart1_buff, 0, NULL, 0 }; // 以太网通道2 驱动
|
||||
UartDrv_t g_GSMDrv = { G0_LPUART2, 115200, PARITY_DATA_8N1, s_lpuart2_buff, 0, NULL, 0 }; // 4G模块 驱动
|
||||
UartDrv_t g_LoRaDrv = { G0_UART3, 115200, PARITY_DATA_8N1, s_uart3_buff, 0, NULL, 0 }; // LoRa 模块驱动
|
||||
|
||||
|
||||
void MX_UART_TickHandle (void)
|
||||
{
|
||||
// 调试串口
|
||||
if (g_DebugDrv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_DebugDrv.rxdone != NULL)
|
||||
{
|
||||
g_DebugDrv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_DebugDrv.rx_timer > 1)
|
||||
g_DebugDrv.rx_timer--;
|
||||
|
||||
// 4851
|
||||
|
||||
|
||||
if (g_U4851Drv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_U4851Drv.rxdone != NULL)
|
||||
{
|
||||
g_U4851Drv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_U4851Drv.rx_timer > 1)
|
||||
g_U4851Drv.rx_timer--;
|
||||
// 4852
|
||||
if (g_U4852Drv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_U4852Drv.rxdone != NULL)
|
||||
{
|
||||
g_U4852Drv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_U4852Drv.rx_timer > 1)
|
||||
g_U4852Drv.rx_timer--;
|
||||
|
||||
// 4853
|
||||
if (g_U4853Drv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_U4853Drv.rxdone != NULL)
|
||||
{
|
||||
g_U4853Drv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_U4853Drv.rx_timer > 1)
|
||||
g_U4853Drv.rx_timer--;
|
||||
// GSM
|
||||
if (g_GSMDrv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_GSMDrv.rxdone != NULL)
|
||||
{
|
||||
g_GSMDrv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_GSMDrv.rx_timer > 1)
|
||||
g_GSMDrv.rx_timer--;
|
||||
// ETH1
|
||||
if (g_ETH1Drv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_ETH1Drv.rxdone != NULL)
|
||||
{
|
||||
g_ETH1Drv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_ETH1Drv.rx_timer > 1)
|
||||
g_ETH1Drv.rx_timer--;
|
||||
// ETH2
|
||||
if (g_ETH2Drv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_ETH2Drv.rxdone != NULL)
|
||||
{
|
||||
g_ETH2Drv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_ETH2Drv.rx_timer > 1)
|
||||
g_ETH2Drv.rx_timer--;
|
||||
//VIEW
|
||||
if (g_ViewDrv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_ViewDrv.rxdone != NULL)
|
||||
{
|
||||
g_ViewDrv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_ViewDrv.rx_timer > 1)
|
||||
g_ViewDrv.rx_timer--;
|
||||
// LORA
|
||||
if (g_LoRaDrv.rx_timer == 2) // 通过事件通知到业务app
|
||||
{
|
||||
if (g_LoRaDrv.rxdone != NULL)
|
||||
{
|
||||
g_LoRaDrv.rxdone();// 接受回调函数处理
|
||||
}
|
||||
}
|
||||
if (g_LoRaDrv.rx_timer > 1)
|
||||
g_LoRaDrv.rx_timer--;
|
||||
|
||||
}
|
||||
|
||||
|
||||
UartDrv_t g_DebugDrv; // 调试串口驱动
|
||||
UartDrv_t g_U4851Drv; // 4851 驱动
|
||||
UartDrv_t g_U4852Drv; // 4852 驱动
|
||||
UartDrv_t g_U4853Drv; // 4853 驱动
|
||||
UartDrv_t g_ViewDrv; // View 驱动
|
||||
UartDrv_t g_ETH1Drv; // 以太网通道1 驱动
|
||||
UartDrv_t g_ETH2Drv; // 以太网通道1 驱动
|
||||
UartDrv_t g_GSMDrv; // 以太网通道1 驱动
|
||||
UartDrv_t g_LoRaDrv; // LoRa 模块驱动
|
||||
/********************************************
|
||||
函数名称:UartInfoInit
|
||||
输入参数:串口句柄
|
||||
@ -17,46 +151,353 @@ UartDrv_t g_LoRaDrv; // LoRa ģ
|
||||
********************************************/
|
||||
|
||||
|
||||
void UartInfoInit()
|
||||
void MX_UART_Init (UartDrv_t *drv)
|
||||
{
|
||||
|
||||
}
|
||||
void RelayInfoInit(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
GPIO_InitStruct.Mode = RelayInfo.Relay1.mode;
|
||||
GPIO_InitStruct.Pull = RelayInfo.Relay1.Pull;
|
||||
GPIO_InitStruct.Speed = RelayInfo.Relay1.Speed;
|
||||
|
||||
GPIO_InitStruct.Pin = RelayInfo.Relay1.pin;
|
||||
HAL_GPIO_Init (RelayInfo.Relay1.GPIOx, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay1.GPIOx,RelayInfo.Relay1.pin,GPIO_PIN_RESET);
|
||||
|
||||
|
||||
GPIO_InitStruct.Mode = RelayInfo.Relay2.mode;
|
||||
GPIO_InitStruct.Pull = RelayInfo.Relay2.Pull;
|
||||
GPIO_InitStruct.Speed = RelayInfo.Relay2.Speed;
|
||||
|
||||
GPIO_InitStruct.Pin = RelayInfo.Relay2.pin;
|
||||
HAL_GPIO_Init (RelayInfo.Relay2.GPIOx, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay2.GPIOx,RelayInfo.Relay2.pin,GPIO_PIN_RESET);
|
||||
}
|
||||
void RelayOpenDoor(void)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay1.GPIOx,RelayInfo.Relay1.pin,GPIO_PIN_SET);
|
||||
}
|
||||
void RelayCloseDoor(void)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay1.GPIOx,RelayInfo.Relay1.pin,GPIO_PIN_RESET);
|
||||
uint32_t Parity = NULL, WordLength = NULL;
|
||||
// 检验位
|
||||
if (drv->DataParity && PARITY_EVEN_MASK != 0)
|
||||
{
|
||||
Parity = UART_PARITY_EVEN;
|
||||
}
|
||||
else if (drv->DataParity && PARITY_ODD_MASK != 0)
|
||||
{
|
||||
Parity = UART_PARITY_ODD;
|
||||
}
|
||||
else
|
||||
{
|
||||
Parity = UART_PARITY_NONE;
|
||||
}
|
||||
// 数据位
|
||||
if (drv->DataParity && DATA8_MASK != 0)
|
||||
{
|
||||
WordLength = UART_WORDLENGTH_7B;
|
||||
}
|
||||
else
|
||||
{
|
||||
WordLength = UART_WORDLENGTH_8B;
|
||||
}
|
||||
switch (drv->Id)
|
||||
{
|
||||
case G0_LPUART1: // ETH2
|
||||
{
|
||||
hlpuart1.Instance = LPUART1;
|
||||
hlpuart1.Init.BaudRate = drv->BaudRate;
|
||||
hlpuart1.Init.WordLength = WordLength;
|
||||
hlpuart1.Init.Parity = Parity;
|
||||
hlpuart1.Init.StopBits = UART_STOPBITS_1;
|
||||
hlpuart1.Init.Mode = UART_MODE_TX_RX;
|
||||
hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
|
||||
if (HAL_UART_Init (&hlpuart1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetTxFifoThreshold (&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetRxFifoThreshold (&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_DisableFifoMode (&hlpuart1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
__HAL_UART_ENABLE_IT (&hlpuart1, UART_IT_RXNE);
|
||||
break;
|
||||
}
|
||||
case G0_LPUART2 : // GSM
|
||||
hlpuart2.Instance = LPUART2;
|
||||
hlpuart2.Init.BaudRate = drv->BaudRate;
|
||||
hlpuart2.Init.WordLength = WordLength;
|
||||
hlpuart2.Init.Parity = Parity;
|
||||
hlpuart2.Init.StopBits = UART_STOPBITS_1;
|
||||
hlpuart2.Init.Mode = UART_MODE_TX_RX;
|
||||
hlpuart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
hlpuart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
hlpuart2.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
hlpuart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
hlpuart2.FifoMode = UART_FIFOMODE_DISABLE;
|
||||
if (HAL_UART_Init (&hlpuart2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetTxFifoThreshold (&hlpuart2, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetRxFifoThreshold (&hlpuart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_DisableFifoMode (&hlpuart2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
break;
|
||||
case G0_UART1 : // 4853
|
||||
huart1.Instance = USART1;
|
||||
huart1.Init.BaudRate = drv->BaudRate;
|
||||
huart1.Init.WordLength = WordLength;
|
||||
huart1.Init.StopBits = UART_STOPBITS_1;
|
||||
huart1.Init.Parity = Parity;
|
||||
huart1.Init.Mode = UART_MODE_TX_RX;
|
||||
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
if (HAL_UART_Init (&huart1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetTxFifoThreshold (&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetRxFifoThreshold (&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_DisableFifoMode (&huart1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
break;
|
||||
case G0_UART2: // debug
|
||||
huart2.Instance = USART2;
|
||||
huart2.Init.BaudRate = drv->BaudRate;
|
||||
huart2.Init.WordLength = WordLength;
|
||||
huart2.Init.StopBits = UART_STOPBITS_1;
|
||||
huart2.Init.Parity = Parity;
|
||||
huart2.Init.Mode = UART_MODE_TX_RX;
|
||||
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
huart2.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
// 初始化串口
|
||||
if (HAL_UART_Init (&huart2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetTxFifoThreshold (&huart2, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetRxFifoThreshold (&huart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_DisableFifoMode (&huart2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
// 使能串口接受中断,用于接受数据
|
||||
__HAL_UART_ENABLE_IT (&huart2, UART_IT_RXNE);
|
||||
break;
|
||||
case G0_UART3: // 4852
|
||||
huart3.Instance = USART3;
|
||||
huart3.Init.BaudRate = drv->BaudRate;
|
||||
huart3.Init.WordLength = WordLength;
|
||||
huart3.Init.StopBits = UART_STOPBITS_1;
|
||||
huart3.Init.Parity = Parity;
|
||||
huart3.Init.Mode = UART_MODE_TX_RX;
|
||||
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
if (HAL_UART_Init (&huart3) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetTxFifoThreshold (&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_SetRxFifoThreshold (&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_UARTEx_DisableFifoMode (&huart3) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
break;
|
||||
case G0_UART4: // ETH1
|
||||
huart4.Instance = USART4;
|
||||
huart4.Init.BaudRate = drv->BaudRate;
|
||||
huart4.Init.WordLength = WordLength;
|
||||
huart4.Init.StopBits = UART_STOPBITS_1;
|
||||
huart4.Init.Parity = Parity;
|
||||
huart4.Init.Mode = UART_MODE_TX_RX;
|
||||
huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart4.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
if (HAL_UART_Init (&huart4) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN USART4_Init 2 */
|
||||
__HAL_UART_ENABLE_IT (&huart4, UART_IT_RXNE);
|
||||
break;
|
||||
case G0_UART5: // 4851
|
||||
huart5.Instance = USART5;
|
||||
huart5.Init.BaudRate = drv->BaudRate;
|
||||
huart5.Init.WordLength = WordLength;
|
||||
huart5.Init.StopBits = UART_STOPBITS_1;
|
||||
huart5.Init.Parity = Parity;
|
||||
huart5.Init.Mode = UART_MODE_TX_RX;
|
||||
huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart5.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart5.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
huart5.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
huart5.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
if (HAL_UART_Init (&huart5) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN USART5_Init 2 */
|
||||
__HAL_UART_ENABLE_IT (&huart5, UART_IT_RXNE);
|
||||
break;
|
||||
case G0_UART6: // View
|
||||
huart6.Instance = USART6;
|
||||
huart6.Init.BaudRate = drv->BaudRate;
|
||||
huart6.Init.WordLength = WordLength;
|
||||
huart6.Init.StopBits = UART_STOPBITS_1;
|
||||
huart6.Init.Parity = Parity;
|
||||
huart6.Init.Mode = UART_MODE_TX_RX;
|
||||
huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart6.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
huart6.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||
huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
if (HAL_UART_Init (&huart6) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RelayOpenK2(void)
|
||||
|
||||
void MX_UART_IRQHandle (void)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay2.GPIOx,RelayInfo.Relay2.pin,GPIO_PIN_SET);
|
||||
uint8_t ret;
|
||||
if (USART2->ISR & (1 << 5)) // 串口2
|
||||
{
|
||||
ret = USART2->RDR;
|
||||
if( g_DebugDrv.rx_buffer != NULL)
|
||||
{
|
||||
g_DebugDrv.rx_buffer[g_DebugDrv.rx_size++] = ret;
|
||||
g_DebugDrv.rx_timer = 30; // 30ms
|
||||
if (g_DebugDrv.rx_size > UART_UART2_BUFF_SIZE)
|
||||
g_DebugDrv.rx_size = 0;
|
||||
}
|
||||
}
|
||||
if (USART4->ISR & (1 << 5))
|
||||
{
|
||||
ret = USART4->RDR;
|
||||
if( g_ETH1Drv.rx_buffer != NULL)
|
||||
{
|
||||
g_ETH1Drv.rx_buffer[g_ETH1Drv.rx_size++] = ret;
|
||||
g_ETH1Drv.rx_timer = 30; // 30ms
|
||||
if (g_ETH1Drv.rx_size > UART_UART4_BUFF_SIZE)
|
||||
g_ETH1Drv.rx_size = 0;
|
||||
}
|
||||
}
|
||||
if (USART5->ISR & (1 << 5))
|
||||
{
|
||||
ret = USART5->RDR;
|
||||
if( g_U4851Drv.rx_buffer != NULL)
|
||||
{
|
||||
g_U4851Drv.rx_buffer[g_U4851Drv.rx_size++] = ret;
|
||||
g_U4851Drv.rx_timer = 30; // 30ms
|
||||
if (g_U4851Drv.rx_size > UART_UART5_BUFF_SIZE)
|
||||
g_U4851Drv.rx_size = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (LPUART1->ISR & (1 << 5))
|
||||
{
|
||||
ret = LPUART1->RDR;
|
||||
if( g_ETH2Drv.rx_buffer != NULL)
|
||||
{
|
||||
g_ETH2Drv.rx_buffer[g_ETH2Drv.rx_size++] = ret;
|
||||
g_ETH2Drv.rx_timer = 30; // 30ms
|
||||
if (g_ETH2Drv.rx_size > UART_LPUART1_BUFF_SIZE)
|
||||
g_ETH2Drv.rx_size = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
void RelayCloseK2(void)
|
||||
|
||||
|
||||
void MX_UART_Clear (UartDrv_t * drv)
|
||||
{
|
||||
HAL_GPIO_WritePin(RelayInfo.Relay2.GPIOx,RelayInfo.Relay2.pin,GPIO_PIN_RESET);
|
||||
drv->rx_size = 0;
|
||||
drv->rx_timer = 0;
|
||||
}
|
||||
|
||||
void MX_UART_PutChar (UartDrv_t * drv, char ch)
|
||||
{
|
||||
switch (drv->Id)
|
||||
{
|
||||
case G0_LPUART1:
|
||||
HAL_UART_Transmit (&hlpuart1, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case G0_LPUART2:
|
||||
HAL_UART_Transmit (&hlpuart2, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case G0_UART1:
|
||||
HAL_UART_Transmit (&huart1, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case G0_UART2:
|
||||
HAL_UART_Transmit (&huart2, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case G0_UART3:
|
||||
HAL_UART_Transmit (&huart3, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case G0_UART4:
|
||||
HAL_UART_Transmit (&huart4, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case G0_UART5:
|
||||
HAL_UART_Transmit (&huart5, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case G0_UART6:
|
||||
HAL_UART_Transmit (&huart6, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MX_UART_PutBuffer (UartDrv_t * drv, char *buff, int size)
|
||||
{
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
MX_UART_PutChar (drv, buff[i]);
|
||||
}
|
||||
}
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
// 重定义fputc函数
|
||||
int fputc (int ch, FILE *f)
|
||||
{
|
||||
HAL_UART_Transmit (&huart2, (uint8_t *) &ch, 1, 2000);
|
||||
return ch;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2,43 +2,73 @@
|
||||
#define _UART_BOARD_H
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
typedef enum UartId_t
|
||||
{
|
||||
LpUart1,
|
||||
LpUart2,
|
||||
Uart1,
|
||||
Uart2,
|
||||
Uart3,
|
||||
Uart4,
|
||||
Uart5,
|
||||
Uart6,
|
||||
}UartId_t;
|
||||
G0_LPUART1,
|
||||
G0_LPUART2,
|
||||
G0_UART1,
|
||||
G0_UART2,
|
||||
G0_UART3,
|
||||
G0_UART4,
|
||||
G0_UART5,
|
||||
G0_UART6,
|
||||
G0_UARTM
|
||||
} UartId_t;
|
||||
|
||||
|
||||
typedef enum UartPara_t{
|
||||
_8N1,
|
||||
_8E1,
|
||||
_8O1,
|
||||
_7O1,
|
||||
_7E1,
|
||||
_7N1,
|
||||
}UartPara_t;
|
||||
#define PARITY_EVEN_MASK 0X02
|
||||
#define PARITY_ODD_MASK 0x04
|
||||
#define PARITY_NONE_MASK 0x00
|
||||
#define DATA8_MASK 0X00
|
||||
#define DATA7_MASK 0X01
|
||||
|
||||
typedef struct UartDrv_t
|
||||
|
||||
#define PARITY_DATA_8N1 (DATA8_MASK | PARITY_NONE_MASK) // 00H
|
||||
#define PARITY_DATA_7N1 (DATA7_MASK | PARITY_NONE_MASK) // 01H
|
||||
#define PARITY_DATA_8E1 (DATA8_MASK | PARITY_EVEN_MASK) // 02H
|
||||
#define PARITY_DATA_7E1 (DATA7_MASK | PARITY_EVEN_MASK) // 03H
|
||||
#define PARITY_DATA_8O1 (DATA8_MASK | PARITY_ODD_MASK) // 04H
|
||||
#define PARITY_DATA_7O1 (DATA7_MASK | PARITY_ODD_MASK) // 05H
|
||||
|
||||
typedef struct UartDrv_t
|
||||
{
|
||||
UartId_t Id;// ´®¿ÚºÅ
|
||||
uint32_t BaudRate;// ²¨ÌØÂÊ
|
||||
UartPara_t Para; // 数据位
|
||||
uint32_t DataParity; // 数据位
|
||||
char * rx_buffer;
|
||||
uint16_t rx_size;
|
||||
uint32_t rx_ready;// 接受完成等待处理
|
||||
}UartDrv_t;
|
||||
void (*rxdone) (void); // 接受完成回调函数
|
||||
uint32_t rx_timer;
|
||||
} UartDrv_t;
|
||||
|
||||
|
||||
|
||||
extern UartDrv_t g_DebugDrv ;
|
||||
extern UartDrv_t g_U4851Drv ;
|
||||
extern UartDrv_t g_U4852Drv ;
|
||||
extern UartDrv_t g_U4853Drv ;
|
||||
extern UartDrv_t g_ViewDrv ;
|
||||
extern UartDrv_t g_ETH1Drv ;
|
||||
extern UartDrv_t g_ETH2Drv ;
|
||||
extern UartDrv_t g_GSMDrv ;
|
||||
extern UartDrv_t g_LoRaDrv ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
// function
|
||||
|
||||
|
||||
extern void MX_UART_TickHandle (void);
|
||||
extern void MX_UART_Init (UartDrv_t *drv);
|
||||
extern void MX_UART_IRQHandle (void);
|
||||
extern void MX_UART_Clear (UartDrv_t * drv);
|
||||
extern void MX_UART_PutChar (UartDrv_t * drv, char ch);
|
||||
extern void MX_UART_PutBuffer (UartDrv_t * drv, char *buff, int size);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
31
Comm/modbusaddr.h
Normal file
31
Comm/modbusaddr.h
Normal file
@ -0,0 +1,31 @@
|
||||
#ifndef MODBUS_ADDR_H
|
||||
#define MODBUS_ADDR_H
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
|
||||
#define REG_GOPENH 0X0000
|
||||
#define REG_GOPENL 0X0001
|
||||
|
||||
#define REG_ALOADH 0X0002
|
||||
#define REG_ALOADL 0X0003
|
||||
|
||||
#define REG_BLOADH 0X0004
|
||||
#define REG_BLOADL 0X0005
|
||||
|
||||
#define REG_SOPEN 0X0007
|
||||
#define REG_SLOPT 0X0008 // 执行闸门动作
|
||||
|
||||
|
||||
|
||||
#define REG_MAX 0X0009
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -2,9 +2,6 @@
|
||||
#define _NET_APP_H
|
||||
|
||||
|
||||
// Ô¶³ÌÉý¼¶ºê
|
||||
#define ETH_MQTT 1
|
||||
#define EC200_MQTT 0
|
||||
|
||||
|
||||
|
||||
@ -17,7 +14,6 @@ typedef struct netWorkInterface_t
|
||||
int (*IsReady) (void);
|
||||
int (*IsIdle) (void);
|
||||
int (*ReSubTopic) (char *);
|
||||
void (*Task) (void);
|
||||
} netWorkInterface_t;
|
||||
|
||||
|
||||
|
||||
@ -6,12 +6,42 @@
|
||||
#include <stdio.h>
|
||||
#include <rtthread.h>
|
||||
#include <net-app.h>
|
||||
#include <easyflash.h>
|
||||
#include <string.h>
|
||||
#include "usart-board.h"
|
||||
|
||||
|
||||
ALIGN(RT_ALIGN_SIZE)
|
||||
static char thread_stack[4096];
|
||||
static struct rt_thread netapp_thread;
|
||||
|
||||
static rt_event_t gnetEvents;
|
||||
|
||||
#define EVENT_COMM_TX (1U << 0)
|
||||
#define EVENT_COMM_RX (1U << 1) //
|
||||
|
||||
|
||||
|
||||
// case ssKHYSet:
|
||||
// {
|
||||
// vv = value*10;
|
||||
// dbg_printf ("MbusSetValue vv:%d\r\n",vv);
|
||||
// sendcmd[type][4] = ((vv >> 8) & 0xff);
|
||||
// sendcmd[type][5] = (vv & 0xff);
|
||||
// vv = bsp_crc_calc16((uint8_t *)sendcmd[type],6);
|
||||
// sendcmd[type][7] = ((vv >> 8) & 0xff);
|
||||
// sendcmd[type][6] = (vv & 0xff);
|
||||
// for(int i = 0;i < 8;i++)
|
||||
// {
|
||||
// dbg_printf("%02X ",sendcmd[type][i]);
|
||||
// }
|
||||
// dbg_printf("\r\n");
|
||||
// }
|
||||
|
||||
// {0x01, 0x03, 0x00, 0x00, 0x00, 0x06, 0xC5, 0xC8}, // 闸位计读取开度
|
||||
// {0x01, 0x06, 0x00, 0x07, 0x00, 0x02, 0xE6, 0x69}, // 闸位计设置开度
|
||||
// {0x01, 0x06, 0x00, 0x04, 0x01, 0x00, 0xC9, 0x9B}, // 启动闸位计
|
||||
// {0x01, 0x06, 0x00, 0x04, 0x00, 0x00, 0xC8, 0x0B}, // 停止闸位计
|
||||
|
||||
static enum {
|
||||
netDrvInit = 0, // 初始化网络驱动
|
||||
@ -22,45 +52,62 @@ static enum {
|
||||
}eDrvStatus;
|
||||
static netWorkInterface_t interface;
|
||||
|
||||
static void net_send_frame(void)
|
||||
{
|
||||
rt_event_send(gnetEvents,EVENT_COMM_TX) ;
|
||||
}
|
||||
// 网络链接成功
|
||||
static void net_connected(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void thread_entry(void * argument)
|
||||
{
|
||||
eDrvStatus = netDrvInit;
|
||||
rt_kprintf("%s was start!\r\n",__FILE__);
|
||||
gnetEvents = rt_event_create("gnetEvents", RT_IPC_FLAG_FIFO) ;
|
||||
// 读取网络驱动类型
|
||||
char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
||||
if(strcmp("dtu",drv) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
||||
{
|
||||
DTUThreadStart();
|
||||
// 初始化串口驱动
|
||||
// interface.Init = NULL;
|
||||
// interface.IsConnected = NULL;
|
||||
// interface.IsIdle = NULL;
|
||||
// interface.IsReady = NULL;
|
||||
// interface.ReadData = NULL;
|
||||
// interface.ReSubTopic = NULL;
|
||||
// interface.WriteData = NULL;
|
||||
|
||||
}
|
||||
// 注册网络驱动
|
||||
// 注册网络驱动
|
||||
while (1)
|
||||
{
|
||||
switch (eDrvStatus)
|
||||
// 发送数据
|
||||
if( RT_EOK == rt_event_recv( gnetEvents, EVENT_COMM_TX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
case netDrvInit:
|
||||
break;
|
||||
case netDrvJoin:
|
||||
break;
|
||||
case netDrvSend:
|
||||
break;
|
||||
case netDrvRecv:
|
||||
break;
|
||||
case netDrvIdle:
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
|
||||
}
|
||||
rt_thread_delay(10);
|
||||
if ( RT_EOK == rt_event_recv( gnetEvents, EVENT_COMM_RX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
|
||||
}
|
||||
rt_thread_delay(10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void NET_APPThreadStart(void )
|
||||
{
|
||||
/* 创建线程1,名称是thread1,入口是thread1_entry*/
|
||||
/* 创建线程1,名称是thread1,入口是thread1_entry*/
|
||||
rt_thread_init(&netapp_thread, "netapp_thread",
|
||||
thread_entry, RT_NULL,
|
||||
&thread_stack[0],
|
||||
sizeof(thread_stack),
|
||||
NET_APP_THREAD_PRIORITY, NET_APP_THREAD_TIMESLICE);
|
||||
|
||||
rt_thread_startup(&netapp_thread);
|
||||
|
||||
return ;
|
||||
@ -75,3 +122,5 @@ void NET_APPThreadStart(void )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
172
Comm/probusthread.c
Normal file
172
Comm/probusthread.c
Normal file
@ -0,0 +1,172 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#include "os-app.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <rtthread.h>
|
||||
#include <net-app.h>
|
||||
#include <easyflash.h>
|
||||
#include <string.h>
|
||||
#include "usart-board.h"
|
||||
#include "modbus-s.h"
|
||||
#include "modbusaddr.h"
|
||||
|
||||
|
||||
ALIGN(RT_ALIGN_SIZE)
|
||||
static char thread_stack[4096];
|
||||
static struct rt_thread probus_thread;
|
||||
|
||||
|
||||
uint16_t REG_DATA[REG_MAX] = {0x00};
|
||||
|
||||
|
||||
|
||||
// 寄存器对应的数据
|
||||
|
||||
|
||||
|
||||
|
||||
// case ssKHYSet:
|
||||
// {
|
||||
// vv = value*10;
|
||||
// dbg_printf ("MbusSetValue vv:%d\r\n",vv);
|
||||
// sendcmd[type][4] = ((vv >> 8) & 0xff);
|
||||
// sendcmd[type][5] = (vv & 0xff);
|
||||
// vv = bsp_crc_calc16((uint8_t *)sendcmd[type],6);
|
||||
// sendcmd[type][7] = ((vv >> 8) & 0xff);
|
||||
// sendcmd[type][6] = (vv & 0xff);
|
||||
// for(int i = 0;i < 8;i++)
|
||||
// {
|
||||
// dbg_printf("%02X ",sendcmd[type][i]);
|
||||
// }
|
||||
// dbg_printf("\r\n");
|
||||
// }
|
||||
|
||||
// {0x01, 0x03, 0x00, 0x00, 0x00, 0x06, 0xC5, 0xC8}, // 闸位计读取开度
|
||||
// {0x01, 0x06, 0x00, 0x07, 0x00, 0x02, 0xE6, 0x69}, // 闸位计设置开度
|
||||
// {0x01, 0x06, 0x00, 0x04, 0x01, 0x00, 0xC9, 0x9B}, // 启动闸位计
|
||||
// {0x01, 0x06, 0x00, 0x04, 0x00, 0x00, 0xC8, 0x0B}, // 停止闸位计
|
||||
|
||||
|
||||
static ModBusSlave_t modbus_slave;
|
||||
static uint8_t modbus_rx_data[32];
|
||||
|
||||
|
||||
static void eth2_data_rxdone(void)
|
||||
{
|
||||
rt_event_send(gUartEvents,EVENT_UART_ETH2_RX);
|
||||
//rt_kprintf("net_data_rxdone\r\n");
|
||||
}
|
||||
|
||||
|
||||
static void probus_handle(uint16_t addr,uint8_t * data)
|
||||
{
|
||||
switch (addr)
|
||||
{
|
||||
case REG_SOPEN: // 设定闸门开度
|
||||
break;
|
||||
case REG_SLOPT: // 执行闸门动作
|
||||
if (data[0] == 0x01) // 执行
|
||||
{
|
||||
rt_event_send(gCtrlEvents,EVENT_CTRL_SET_OPEN);
|
||||
rt_kprintf("probus_handle set open\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void thread_entry(void * argument)
|
||||
{
|
||||
|
||||
int k = 0;
|
||||
uint8_t txbuff[128] = {0};
|
||||
int tx_size = 0;
|
||||
rt_kprintf("%s was start!\r\n",__FILE__);
|
||||
|
||||
g_ETH2Drv.rxdone = eth2_data_rxdone;
|
||||
g_ETH2Drv.BaudRate = 115200;
|
||||
MX_UART_Init(&g_ETH2Drv);
|
||||
|
||||
ModbusSlaveInit(&modbus_slave,0x01,modbus_rx_data,REG_DATA,REG_MAX);
|
||||
// 注册网络驱动
|
||||
// 注册网络驱动
|
||||
while (1)
|
||||
{
|
||||
if( RT_EOK == rt_event_recv( gUartEvents, EVENT_UART_ETH2_RX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
// rt_kprintf("<<<<<<<<<<<<<<<<<<<<probus2:\r\n");
|
||||
// for(int i =0; i < g_ETH2Drv.rx_size;i++)
|
||||
// {
|
||||
// rt_kprintf("%02X ",g_ETH2Drv.rx_buffer[i]);
|
||||
// }
|
||||
// rt_kprintf("\r\n");
|
||||
k = ModbusSlaveHandle(&modbus_slave,(uint8_t *)g_ETH2Drv.rx_buffer,g_ETH2Drv.rx_size);
|
||||
//rt_kprintf("k:%d\r\n",k);
|
||||
if( k == 0)
|
||||
{
|
||||
switch (modbus_slave.func)
|
||||
{
|
||||
case 0x03:
|
||||
tx_size = ModbusSlavePacket(&modbus_slave,txbuff);
|
||||
// 直接返回当前寄存器中的数据
|
||||
break;
|
||||
case 0x06:
|
||||
//处理对应的事件
|
||||
probus_handle(modbus_slave.Addr,modbus_slave.data);
|
||||
// 数据打包回复
|
||||
tx_size = ModbusSlavePacket(&modbus_slave,txbuff);
|
||||
break;
|
||||
default:
|
||||
tx_size = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tx_size = 0;
|
||||
}
|
||||
if (tx_size > 0)
|
||||
{
|
||||
MX_UART_PutBuffer(&g_ETH2Drv,(char *)txbuff,tx_size);
|
||||
}
|
||||
|
||||
MX_UART_Clear(&g_ETH2Drv);
|
||||
}
|
||||
rt_thread_delay(10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PROBUS_APPThreadStart(void )
|
||||
{
|
||||
/* 创建线程1,名称是thread1,入口是thread1_entry*/
|
||||
rt_thread_init(&probus_thread, "probus_thread",
|
||||
thread_entry, RT_NULL,
|
||||
&thread_stack[0],
|
||||
sizeof(thread_stack),
|
||||
PROBUS_APP_THREAD_PRIORITY, PROBUS_APP_THREAD_TIMESLICE);
|
||||
rt_thread_startup(&probus_thread);
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -89,8 +89,8 @@ void Error_Handler(void);
|
||||
#define DBG_TX_GPIO_Port GPIOA
|
||||
#define DBG_RX_Pin GPIO_PIN_3
|
||||
#define DBG_RX_GPIO_Port GPIOA
|
||||
#define DAC1_Pin GPIO_PIN_4
|
||||
#define DAC1_GPIO_Port GPIOA
|
||||
#define ETH_PW_Pin GPIO_PIN_4
|
||||
#define ETH_PW_GPIO_Port GPIOA
|
||||
#define DAC2_Pin GPIO_PIN_5
|
||||
#define DAC2_GPIO_Port GPIOA
|
||||
#define ADCPW_Pin GPIO_PIN_7
|
||||
|
||||
@ -41,33 +41,9 @@ extern "C" {
|
||||
#define UART_TXE_IRQ 7
|
||||
|
||||
|
||||
#define LPUART_MAX_LENGTH 1200
|
||||
#define USART1_MAX_LENGTH 1200
|
||||
#define USART2_MAX_LENGTH 1200
|
||||
#define USART4_MAX_LENGTH 1200 //
|
||||
#define USART5_MAX_LENGTH 255
|
||||
|
||||
|
||||
typedef enum Uart_t{
|
||||
LpUart1 = 0,
|
||||
LpUart2 = 1,
|
||||
Uart1 = 2,
|
||||
Uart2 = 3,
|
||||
Uart3 = 4,
|
||||
Uart4 = 5,
|
||||
Uart5 = 6,
|
||||
Uart6 = 7,
|
||||
UartMax = 8,
|
||||
}Uart_t;
|
||||
|
||||
typedef struct UartBuff_t{
|
||||
char * rxBuf;
|
||||
uint16_t rxMaxLen;
|
||||
uint16_t rxLen;
|
||||
char * txBuf;
|
||||
uint16_t txMaxLen;
|
||||
uint16_t txLen;
|
||||
}UartBuff_t;
|
||||
|
||||
|
||||
/* USER CODE END Includes */
|
||||
@ -102,13 +78,13 @@ void MX_USART5_UART_Init(void);
|
||||
void MX_USART6_UART_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
int dbg_printf (char* fmt, ...);
|
||||
extern void uart_SystemTick (void);
|
||||
extern int MX_UART_IsReady(Uart_t uart);
|
||||
extern int MX_UART_ReadData(Uart_t uart, char * buff, int maxLength);
|
||||
void MX_UART_Clear(Uart_t uart);
|
||||
void MX_UART_PutChar(Uart_t uart, char ch);
|
||||
void MX_UART_PutBuffer(Uart_t uart, char *buff,int size);
|
||||
|
||||
|
||||
//extern int MX_UART_IsReady(Uart_t uart);
|
||||
//extern int MX_UART_ReadData(Uart_t uart, char * buff, int maxLength);
|
||||
//void MX_UART_Clear(Uart_t uart);
|
||||
//void MX_UART_PutChar(Uart_t uart, char ch);
|
||||
//void MX_UART_PutBuffer(Uart_t uart, char *buff,int size);
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -39,7 +39,7 @@ void MX_CRC_Init(void)
|
||||
hcrc.Instance = CRC;
|
||||
hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
|
||||
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_DISABLE;
|
||||
hcrc.Init.GeneratingPolynomial = 7;
|
||||
hcrc.Init.GeneratingPolynomial = 0x8005;
|
||||
hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
|
||||
hcrc.Init.InitValue = 0xFFFF;
|
||||
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
|
||||
|
||||
@ -38,7 +38,6 @@
|
||||
* Output
|
||||
* EVENT_OUT
|
||||
* EXTI
|
||||
PA4 ------> COMP_DAC11_group
|
||||
PA5 ------> COMP_DAC12_group
|
||||
*/
|
||||
void MX_GPIO_Init(void)
|
||||
@ -57,6 +56,9 @@ void MX_GPIO_Init(void)
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOA, ETH_PW_Pin|GSM_PW_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, U485_RT_Pin|LORA_TX_Pin|LORA_RX_Pin|SPI2_NSS_Pin, GPIO_PIN_RESET);
|
||||
|
||||
@ -64,9 +66,6 @@ void MX_GPIO_Init(void)
|
||||
HAL_GPIO_WritePin(GPIOE, LORA_M1_Pin|RELAY1_Pin|RELAY2_Pin|S4851_RT_Pin
|
||||
|S4852_RT_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GSM_PW_GPIO_Port, GSM_PW_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
|
||||
|
||||
@ -84,10 +83,17 @@ void MX_GPIO_Init(void)
|
||||
HAL_GPIO_Init(ETH_STA_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PAPin PAPin */
|
||||
GPIO_InitStruct.Pin = DAC1_Pin|DAC2_Pin;
|
||||
GPIO_InitStruct.Pin = ETH_PW_Pin|GSM_PW_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = DAC2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
HAL_GPIO_Init(DAC2_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PBPin PBPin PBPin PBPin */
|
||||
GPIO_InitStruct.Pin = U485_RT_Pin|LORA_TX_Pin|LORA_RX_Pin|SPI2_NSS_Pin;
|
||||
@ -111,13 +117,6 @@ void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(LORA_DI0_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = GSM_PW_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GSM_PW_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = GSM_RST_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
@ -131,6 +130,7 @@ void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
@ -74,7 +74,7 @@ extern TIM_HandleTypeDef htim2;
|
||||
|
||||
/* USER CODE BEGIN EV */
|
||||
extern void MX_UART_IRQHandle (void);
|
||||
extern void uart_SystemTick (void);
|
||||
extern void MX_UART_TickHandle (void);
|
||||
//extern void main_Systick (void);
|
||||
/* USER CODE END EV */
|
||||
|
||||
@ -153,7 +153,7 @@ void DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQHandler(void)
|
||||
void TIM2_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_IRQn 0 */
|
||||
uart_SystemTick();
|
||||
MX_UART_TickHandle();
|
||||
//main_Systick();
|
||||
MX_IWDG_Reload();
|
||||
MX_WWDG_Relad();
|
||||
|
||||
120
Core/Src/usart.c
120
Core/Src/usart.c
@ -24,21 +24,8 @@
|
||||
|
||||
|
||||
|
||||
__IO static uint32_t s_UartRecvTimer[UartMax] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
// static USART_TypeDef *UARTInstance[UartMax] = {LPUART1, LPUART2, USART1, USART2, USART3, USART4, USART5, USART6};
|
||||
static char s_u2RxBuf[USART2_MAX_LENGTH];
|
||||
static char s_u4RxBuf[USART4_MAX_LENGTH];
|
||||
|
||||
UartBuff_t s_Ubuffer[UartMax];
|
||||
|
||||
void uart_SystemTick (void)
|
||||
{
|
||||
for (int i = 0; i < UartMax; i++)
|
||||
{
|
||||
if (s_UartRecvTimer[i] > 1)
|
||||
s_UartRecvTimer[i]--;
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
@ -191,8 +178,6 @@ void MX_USART2_UART_Init(void)
|
||||
|
||||
/* USER CODE BEGIN USART2_Init 0 */
|
||||
|
||||
s_Ubuffer[Uart2].rxBuf = s_u2RxBuf;
|
||||
s_Ubuffer[Uart2].rxMaxLen = USART2_MAX_LENGTH;
|
||||
/* USER CODE END USART2_Init 0 */
|
||||
|
||||
/* USER CODE BEGIN USART2_Init 1 */
|
||||
@ -281,8 +266,6 @@ void MX_USART4_UART_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN USART4_Init 0 */
|
||||
s_Ubuffer[Uart4].rxBuf = s_u4RxBuf;
|
||||
s_Ubuffer[Uart4].rxMaxLen = USART4_MAX_LENGTH;
|
||||
/* USER CODE END USART4_Init 0 */
|
||||
|
||||
/* USER CODE BEGIN USART4_Init 1 */
|
||||
@ -625,7 +608,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
||||
*/
|
||||
GPIO_InitStruct.Pin = U485_TX_Pin|U485_RX_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF8_USART5;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
@ -886,108 +869,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
void MX_UART_IRQHandle (void)
|
||||
{
|
||||
uint8_t ret;
|
||||
if (USART2->ISR & (1 << 5))
|
||||
{
|
||||
ret = USART2->RDR;
|
||||
|
||||
if (s_Ubuffer[Uart2].rxBuf != NULL)
|
||||
{
|
||||
s_Ubuffer[Uart2].rxBuf[s_Ubuffer[Uart2].rxLen++] = ret;
|
||||
s_UartRecvTimer[Uart2] = 30;
|
||||
if (s_Ubuffer[Uart2].rxLen > s_Ubuffer[Uart2].rxMaxLen)
|
||||
s_Ubuffer[Uart2].rxLen = 0;
|
||||
}
|
||||
}
|
||||
if (USART4->ISR & (1 << 5))
|
||||
{
|
||||
ret = USART4->RDR;
|
||||
if (s_Ubuffer[Uart4].rxBuf != NULL)
|
||||
{
|
||||
s_Ubuffer[Uart4].rxBuf[s_Ubuffer[Uart4].rxLen++] = ret;
|
||||
s_UartRecvTimer[Uart4] = 30;
|
||||
if (s_Ubuffer[Uart4].rxLen > s_Ubuffer[Uart4].rxMaxLen)
|
||||
s_Ubuffer[Uart4].rxLen = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int MX_UART_IsReady (Uart_t uart)
|
||||
{
|
||||
uint32_t ret = s_UartRecvTimer[uart];
|
||||
return ret;
|
||||
}
|
||||
|
||||
void MX_UART_Clear (Uart_t uart)
|
||||
{
|
||||
s_UartRecvTimer[uart] = 0;
|
||||
s_Ubuffer[uart].rxLen = 0;
|
||||
}
|
||||
int MX_UART_ReadData (Uart_t uart, char *buff, int maxLength)
|
||||
{
|
||||
int length = 0;
|
||||
if (s_Ubuffer[uart].rxBuf != NULL)
|
||||
{
|
||||
length = (maxLength > s_Ubuffer[uart].rxLen) ? s_Ubuffer[uart].rxLen : maxLength;
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
buff[i] = s_Ubuffer[uart].rxBuf[i];
|
||||
}
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
void MX_UART_PutChar (Uart_t uart, char ch)
|
||||
{
|
||||
switch (uart)
|
||||
{
|
||||
case LpUart1:
|
||||
HAL_UART_Transmit (&hlpuart1, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case LpUart2:
|
||||
HAL_UART_Transmit (&hlpuart2, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case Uart1:
|
||||
HAL_UART_Transmit (&huart1, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case Uart2:
|
||||
HAL_UART_Transmit (&huart2, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case Uart3:
|
||||
HAL_UART_Transmit (&huart3, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case Uart4:
|
||||
HAL_UART_Transmit (&huart4, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case Uart5:
|
||||
HAL_UART_Transmit (&huart5, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
case Uart6:
|
||||
HAL_UART_Transmit (&huart6, (uint8_t *) &ch, 1, 1000);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MX_UART_PutBuffer (Uart_t uart, char *buff, int size)
|
||||
{
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
MX_UART_PutChar (uart, buff[i]);
|
||||
}
|
||||
}
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
// ÖØ¶¨Òåfputcº¯Êý
|
||||
int fputc (int ch, FILE *f)
|
||||
{
|
||||
HAL_UART_Transmit (&huart2, (uint8_t *) &ch, 1, 2000);
|
||||
return ch;
|
||||
}
|
||||
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
12
GB01VETx.ioc
12
GB01VETx.ioc
@ -220,9 +220,9 @@ PA3.Locked=true
|
||||
PA3.Mode=Asynchronous
|
||||
PA3.Signal=USART2_RX
|
||||
PA4.GPIOParameters=GPIO_Label
|
||||
PA4.GPIO_Label=DAC1
|
||||
PA4.GPIO_Label=ETH_PW
|
||||
PA4.Locked=true
|
||||
PA4.Signal=COMP_DAC11_group
|
||||
PA4.Signal=GPIO_Output
|
||||
PA5.GPIOParameters=GPIO_Label
|
||||
PA5.GPIO_Label=DAC2
|
||||
PA5.Locked=true
|
||||
@ -497,16 +497,18 @@ RCC.USART3Freq_Value=64000000
|
||||
RCC.USBFreq_Value=48000000
|
||||
RCC.VCOInputFreq_Value=8000000
|
||||
RCC.VCOOutputFreq_Value=128000000
|
||||
RealThread.RT-Thread.3.1.5.IPParameters=RTOSJjkernel,RTOSJjdevice,RT_MAIN_THREAD_STACK_SIZE
|
||||
RealThread.RT-Thread.3.1.5.IPParameters=RT_MAIN_THREAD_STACK_SIZE,RT_USING_EVENT,RT_USING_MAILBOX,RT_USING_MESSAGEQUEUE,RT_USING_HEAP,RTOSJjkernel,RTOSJjdevice
|
||||
RealThread.RT-Thread.3.1.5.RTOSJjdevice=true
|
||||
RealThread.RT-Thread.3.1.5.RTOSJjdevice_Checked=true
|
||||
RealThread.RT-Thread.3.1.5.RTOSJjkernel=true
|
||||
RealThread.RT-Thread.3.1.5.RTOSJjkernel_Checked=true
|
||||
RealThread.RT-Thread.3.1.5.RTOSJjshell_Checked=false
|
||||
RealThread.RT-Thread.3.1.5.RT_MAIN_THREAD_STACK_SIZE=4096
|
||||
RealThread.RT-Thread.3.1.5.RT_USING_EVENT=1
|
||||
RealThread.RT-Thread.3.1.5.RT_USING_HEAP=1
|
||||
RealThread.RT-Thread.3.1.5.RT_USING_MAILBOX=1
|
||||
RealThread.RT-Thread.3.1.5.RT_USING_MESSAGEQUEUE=1
|
||||
RealThread.RT-Thread.3.1.5_SwParameter=RTOSJjkernel\:true;RTOSJjshell\:true;RTOSJjdevice\:true;
|
||||
SH.COMP_DAC11_group.0=DAC1_OUT1
|
||||
SH.COMP_DAC11_group.ConfNb=1
|
||||
SH.COMP_DAC12_group.0=DAC1_OUT2
|
||||
SH.COMP_DAC12_group.ConfNb=1
|
||||
SH.S_TIM15_CH1.0=TIM15_CH1,PWM Generation1 CH1
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -103,7 +103,7 @@
|
||||
<bEvRecOn>1</bEvRecOn>
|
||||
<bSchkAxf>0</bSchkAxf>
|
||||
<bTchkAxf>0</bTchkAxf>
|
||||
<nTsel>4</nTsel>
|
||||
<nTsel>3</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
@ -114,7 +114,7 @@
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile></tIfile>
|
||||
<pMon>Segger\JL2CM3.dll</pMon>
|
||||
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
@ -125,7 +125,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>CMSIS_AGDI</Key>
|
||||
<Name>-X"Any" -UAny -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32G0Bx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32G0B1VETx$CMSIS\Flash\STM32G0Bx_512.FLM)</Name>
|
||||
<Name>-X"Any" -UAny -O206 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32G0Bx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32G0B1VETx$CMSIS\Flash\STM32G0Bx_512.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@ -983,14 +983,6 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Middlewares/RT-Thread/RTOS/kernel</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
@ -998,7 +990,7 @@
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>59</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1010,7 +1002,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>60</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1022,7 +1014,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>61</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1034,7 +1026,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>62</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1046,7 +1038,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>63</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1058,7 +1050,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>64</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1070,7 +1062,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>65</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1082,7 +1074,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>66</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1094,7 +1086,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>67</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1106,7 +1098,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>68</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1118,7 +1110,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>69</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1130,7 +1122,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>70</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1142,7 +1134,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>71</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1154,7 +1146,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>72</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1166,7 +1158,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>73</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1178,7 +1170,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>74</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1190,7 +1182,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>75</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1202,7 +1194,7 @@
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<GroupNumber>9</GroupNumber>
|
||||
<FileNumber>76</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1222,7 +1214,7 @@
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<FileNumber>77</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
@ -1235,4 +1227,12 @@
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
Subproject commit 1f362879968fe20398a8a5544d6a403fd513e691
|
||||
@ -1 +0,0 @@
|
||||
Subproject commit 8b0e625e0f5d0d3c43610598c7ecf3946d886c59
|
||||
@ -93,17 +93,17 @@
|
||||
|
||||
// <c1>Using Event
|
||||
// <i>Using Event
|
||||
//#define RT_USING_EVENT
|
||||
#define RT_USING_EVENT
|
||||
// </c>
|
||||
|
||||
// <c1>Using MailBox
|
||||
// <i>Using MailBox
|
||||
//#define RT_USING_MAILBOX
|
||||
#define RT_USING_MAILBOX
|
||||
// </c>
|
||||
|
||||
// <c1>Using Message Queue
|
||||
// <i>Using Message Queue
|
||||
//#define RT_USING_MESSAGEQUEUE
|
||||
#define RT_USING_MESSAGEQUEUE
|
||||
// </c>
|
||||
// </h>
|
||||
|
||||
@ -114,7 +114,7 @@
|
||||
// </c>
|
||||
// <c1>Dynamic Heap Management
|
||||
// <i>Dynamic Heap Management
|
||||
//#define RT_USING_HEAP
|
||||
#define RT_USING_HEAP
|
||||
// </c>
|
||||
// <c1>using small memory
|
||||
// <i>using small memory
|
||||
|
||||
17
middleware/Util/util.c
Normal file
17
middleware/Util/util.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include "util.h"
|
||||
|
||||
|
||||
float Bytes2Float(char * data)
|
||||
{
|
||||
Float ff ;
|
||||
ff.byte[0] = data[1];
|
||||
ff.byte[1] = data[0];
|
||||
ff.byte[2] = data[3];
|
||||
ff.byte[3] = data[2];
|
||||
return ff.data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
20
middleware/Util/util.h
Normal file
20
middleware/Util/util.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef _UTIL_H
|
||||
#define _UTIL_H
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
typedef union {
|
||||
uint32_t data;
|
||||
char byte[4];
|
||||
} Int;
|
||||
typedef union {
|
||||
float data;
|
||||
char byte[4];
|
||||
} Float;
|
||||
|
||||
|
||||
float Bytes2Float(char * data);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -47,6 +47,8 @@ static const ef_env default_env_set[] = {
|
||||
{"mqtt_port", "1883"},
|
||||
{"boot_times", "0"},
|
||||
{"jump_boot_time", "10"}, // BOOT 等待时间 10s
|
||||
{"net_drv", "dtu"}, // mqtt dtu ec200
|
||||
{"eth2_chann", "1"}, //以太网通道2
|
||||
|
||||
// 传感器基础参数配置
|
||||
{"di1", "0"},// 0 表示未定义 1 表示 上限位,2:下限位 3: 开关4:关 5:停止
|
||||
|
||||
@ -1643,8 +1643,8 @@ void ef_print_env(void)
|
||||
|
||||
env_iterator(&env, &using_size, NULL, print_env_cb);
|
||||
|
||||
ef_print("\nmode: next generation\n");
|
||||
ef_print("size: %lu/%lu bytes.\n", using_size + (SECTOR_NUM - EF_GC_EMPTY_SEC_THRESHOLD) * SECTOR_HDR_DATA_SIZE,
|
||||
ef_print("\nmode: next generation\r\n");
|
||||
ef_print("size: %lu/%lu bytes.\r\n", using_size + (SECTOR_NUM - EF_GC_EMPTY_SEC_THRESHOLD) * SECTOR_HDR_DATA_SIZE,
|
||||
ENV_AREA_SIZE - SECTOR_SIZE * EF_GC_EMPTY_SEC_THRESHOLD);
|
||||
|
||||
/* unlock the ENV cache */
|
||||
|
||||
@ -22,11 +22,24 @@ int modbus_m_read_regist(uint8_t id,uint16_t addr,uint16_t length,uint8_t * data
|
||||
return index;
|
||||
}
|
||||
|
||||
//// 解析通过03 命令读取回来额寄存器数据
|
||||
//int modbus_m_read_regist_ack(uint)
|
||||
//{
|
||||
//
|
||||
//}
|
||||
|
||||
|
||||
// 写入寄存器
|
||||
// addr 寄存器地址
|
||||
// id 丛机地址
|
||||
// length 读取丛机数据长度
|
||||
int modbus_m_write_regist(uint8_t id,uint16_t addr,uint16_t key,uint8_t * data)
|
||||
{
|
||||
uint16_t index = 0,crc;
|
||||
data[index++] = id;
|
||||
data[index++] = 0x06;
|
||||
data[index++] = (addr >> 8) & 0x00FF;
|
||||
data[index++] = addr & 0x00FF;
|
||||
data[index++] = (key >> 8) & 0x00FF;
|
||||
data[index++] = key & 0x00FF;
|
||||
crc = MX_CRC_CALC(data,index);
|
||||
data[index++] = crc & 0x00FF;
|
||||
data[index++] = (crc >> 8) & 0x00FF;
|
||||
return index;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
|
||||
|
||||
int modbus_m_read_regist(uint8_t id,uint16_t addr,uint16_t length,uint8_t * data);
|
||||
int modbus_m_write_regist(uint8_t id,uint16_t addr,uint16_t key,uint8_t * data);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -0,0 +1,121 @@
|
||||
/* modbus 从机实现*/
|
||||
|
||||
#include<stdint.h>
|
||||
#include "crc.h"
|
||||
#include "modbus-s.h"
|
||||
|
||||
#if !defined(LOG_TAG)
|
||||
#define LOG_TAG "main"
|
||||
#endif
|
||||
#include <elog.h>
|
||||
|
||||
|
||||
void ModbusSlaveInit(ModBusSlave_t * drv,uint8_t ID,uint8_t * data,uint16_t * reg,uint16_t max)
|
||||
{
|
||||
drv->ID = ID;
|
||||
drv->data = data ;
|
||||
drv->reg = reg;
|
||||
drv->regmax = max;
|
||||
}
|
||||
|
||||
// 解析modbus 数据
|
||||
//-1 地址错误
|
||||
int ModbusSlaveHandle(ModBusSlave_t * drv,uint8_t * data,uint16_t length )
|
||||
{
|
||||
uint16_t rcrc = 0,ccrc = 0 ;
|
||||
if( (data[0] != drv->ID) && (data[0] != 0x00))
|
||||
{
|
||||
// 地址错误
|
||||
return -1;
|
||||
}
|
||||
rcrc = ((uint16_t)data[length- 1] << 8) + (uint16_t)data[length- 2] ;
|
||||
ccrc = MX_CRC_CALC(data,length-2);
|
||||
if (rcrc != ccrc )
|
||||
{
|
||||
log_e("rcrc:%04X,ccrc:%04X\r\n",rcrc,ccrc) ;
|
||||
return -2;
|
||||
}
|
||||
drv->func = data[1] ;
|
||||
|
||||
switch (drv->func)
|
||||
{
|
||||
case 0x03 :// 读取保持寄存器地址
|
||||
{
|
||||
drv->Addr = ((uint16_t)data[2] << 8) + data[3];
|
||||
drv->length = ((uint16_t)data[4] << 8) + data[5];
|
||||
break;
|
||||
}
|
||||
case 0x04:
|
||||
break;
|
||||
case 0x06: // 写入单个保持寄存器
|
||||
drv->Addr = ((uint16_t)data[2] << 8) + data[3];
|
||||
drv->data[0] = data[4];
|
||||
drv->data[1] = data[5];
|
||||
break;
|
||||
default:
|
||||
return -3 ;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
// if() // 寄存器最大值
|
||||
}
|
||||
// 从机数据应答
|
||||
int ModbusSlavePacket(ModBusSlave_t * drv,uint8_t *data)
|
||||
{
|
||||
int tx_size = 0;
|
||||
uint16_t crc = 0;
|
||||
data[tx_size++] = drv->ID;
|
||||
data[tx_size++] = drv->func;
|
||||
char * p = (char *)&drv->reg[drv->Addr];
|
||||
switch (drv->func)
|
||||
{
|
||||
case 0x03:
|
||||
data[tx_size++] = drv->length *2;
|
||||
for(int i =0;i < drv->length *2;i++)
|
||||
{
|
||||
data[tx_size++] = *p;
|
||||
p++;
|
||||
}
|
||||
break;
|
||||
case 0x06: //
|
||||
data[tx_size++] = (drv->Addr >> 8) & 0x00FF;
|
||||
data[tx_size++] = drv->Addr & 0x00FF;
|
||||
data[tx_size++] = drv->data[0];
|
||||
data[tx_size++] = drv->data[1];
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
crc = MX_CRC_CALC(data,tx_size);
|
||||
data[tx_size++] = crc & 0x00FF;
|
||||
data[tx_size++] = (crc >> 8) & 0x00FF;
|
||||
return tx_size;
|
||||
}
|
||||
|
||||
//// 读取保持寄存器的值
|
||||
//// addr 寄存器地址
|
||||
//// id 丛机地址
|
||||
//// length 读取丛机数据长度
|
||||
//int modbus_m_read_regist(uint8_t id,uint16_t addr,uint16_t length,uint8_t * data)
|
||||
//{
|
||||
// uint16_t index = 0,crc;
|
||||
// data[index++] = id;
|
||||
// data[index++] = 0x03;
|
||||
// data[index++] = (addr >> 8) & 0x00FF;
|
||||
// data[index++] = addr & 0x00FF;
|
||||
// data[index++] = (length >> 8) & 0x00FF;
|
||||
// data[index++] = length & 0x00FF;
|
||||
// crc = MX_CRC_CALC(data,index);
|
||||
// data[index++] = crc & 0x00FF;
|
||||
// data[index++] = (crc >> 8) & 0x00FF;
|
||||
// return index;
|
||||
//}
|
||||
|
||||
//// 解析通过03 命令读取回来额寄存器数据
|
||||
//int modbus_m_read_regist_ack(uint)
|
||||
//{
|
||||
//
|
||||
//}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
#ifndef _MODBUS_S_H
|
||||
#define _MODBUS_S_H
|
||||
#include "stm32g0xx_hal.h"
|
||||
|
||||
|
||||
|
||||
// modbus 支持的最大地址
|
||||
#define MODBUS_S_MAX_ADDR 0X000A
|
||||
|
||||
|
||||
typedef struct ModBusSlave_t{
|
||||
uint8_t ID; // 从机地址
|
||||
uint8_t func;
|
||||
uint16_t Addr; // 寄存器地址
|
||||
uint16_t length; // 寄存器长度
|
||||
uint8_t * data; // 写入的数据
|
||||
uint16_t crc; // crc
|
||||
uint16_t * reg;// 寄存器
|
||||
uint16_t regmax;
|
||||
} ModBusSlave_t;
|
||||
|
||||
|
||||
void ModbusSlaveInit(ModBusSlave_t * drv,uint8_t ID,uint8_t * data,uint16_t * reg,uint16_t max);
|
||||
int ModbusSlaveHandle(ModBusSlave_t * drv,uint8_t * data,uint16_t length );
|
||||
int ModbusSlavePacket(ModBusSlave_t * drv,uint8_t *data);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user