修改串口数据接收解析策略,添加OTA升级功能 zsxfly20240820
This commit is contained in:
parent
87184aa643
commit
5bb0d06413
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -444,6 +444,18 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>16</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\src\app_modbus.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>app_modbus.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -454,7 +466,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>16</FileNumber>
|
<FileNumber>17</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -466,7 +478,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>17</FileNumber>
|
<FileNumber>18</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -478,7 +490,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>18</FileNumber>
|
<FileNumber>19</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -490,7 +502,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>19</FileNumber>
|
<FileNumber>20</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -502,7 +514,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>20</FileNumber>
|
<FileNumber>21</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -514,7 +526,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>21</FileNumber>
|
<FileNumber>22</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -526,7 +538,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>22</FileNumber>
|
<FileNumber>23</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -538,7 +550,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>23</FileNumber>
|
<FileNumber>24</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -550,7 +562,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>24</FileNumber>
|
<FileNumber>25</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -562,7 +574,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>25</FileNumber>
|
<FileNumber>26</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -574,7 +586,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>26</FileNumber>
|
<FileNumber>27</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -586,7 +598,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>27</FileNumber>
|
<FileNumber>28</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -598,7 +610,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>28</FileNumber>
|
<FileNumber>29</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -610,7 +622,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>29</FileNumber>
|
<FileNumber>30</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -622,7 +634,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>30</FileNumber>
|
<FileNumber>31</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -634,7 +646,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>31</FileNumber>
|
<FileNumber>32</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -646,7 +658,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>32</FileNumber>
|
<FileNumber>33</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -658,7 +670,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>33</FileNumber>
|
<FileNumber>34</FileNumber>
|
||||||
<FileType>4</FileType>
|
<FileType>4</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -678,7 +690,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>34</FileNumber>
|
<FileNumber>35</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -698,7 +710,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>35</FileNumber>
|
<FileNumber>36</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -718,7 +730,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>36</FileNumber>
|
<FileNumber>37</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -730,7 +742,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>37</FileNumber>
|
<FileNumber>38</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -742,7 +754,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>38</FileNumber>
|
<FileNumber>39</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -754,7 +766,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>39</FileNumber>
|
<FileNumber>40</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -766,7 +778,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>40</FileNumber>
|
<FileNumber>41</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -778,7 +790,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>41</FileNumber>
|
<FileNumber>42</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -798,7 +810,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>42</FileNumber>
|
<FileNumber>43</FileNumber>
|
||||||
<FileType>4</FileType>
|
<FileType>4</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -818,7 +830,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>43</FileNumber>
|
<FileNumber>44</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -830,7 +842,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>44</FileNumber>
|
<FileNumber>45</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
|
|
@ -461,6 +461,11 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\src\app_ota.c</FilePath>
|
<FilePath>..\src\app_ota.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>app_modbus.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\src\app_modbus.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
|
|
@ -83,7 +83,6 @@ static tmr_tk_t BAT_Message_Handle(tmr_id_t id) {
|
||||||
}else{
|
}else{
|
||||||
Time_Event_Off(GRB_WS2812_Event,NULL);
|
Time_Event_Off(GRB_WS2812_Event,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BAT_Message.Bat_Voltage =Bat_Voltage;
|
BAT_Message.Bat_Voltage =Bat_Voltage;
|
||||||
|
|
|
@ -28,7 +28,9 @@ typedef enum {
|
||||||
|
|
||||||
typedef struct BAT_Message{
|
typedef struct BAT_Message{
|
||||||
uint8_t Bat_STA;
|
uint8_t Bat_STA;
|
||||||
|
uint8_t Bat_Remain_Time; // 剩余充电时间
|
||||||
uint16_t Bat_Voltage; // 480=48.0V
|
uint16_t Bat_Voltage; // 480=48.0V
|
||||||
|
uint16_t Bat_Percent; // 420=42.0%
|
||||||
} BAT_Message_t;
|
} BAT_Message_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -195,16 +195,19 @@ void app_control_init(void){
|
||||||
sys_sta.IOgps = Get_Status(IN_GPS);
|
sys_sta.IOgps = Get_Status(IN_GPS);
|
||||||
sys_sta.IOmanager = Get_Status(IO_MANAGER_MODE);
|
sys_sta.IOmanager = Get_Status(IO_MANAGER_MODE);
|
||||||
|
|
||||||
sys_sta.O_12V = 0;
|
|
||||||
sys_sta.O_lock = 0;
|
|
||||||
sys_sta.I_01 = Get_Status(IN_01);
|
sys_sta.I_01 = Get_Status(IN_01);
|
||||||
sys_sta.I_brake = Get_Status(IO_BRAKE);
|
|
||||||
sys_sta.I_back = Get_Status(IO_BACK);
|
sys_sta.I_back = Get_Status(IO_BACK);
|
||||||
sys_sta.IO_TX = Get_Status(IO_TTL_TX);
|
sys_sta.I_brake = Get_Status(IO_BRAKE);
|
||||||
sys_sta.IO_RX = Get_Status(IO_TTL_RX);
|
|
||||||
sys_sta.A_brake = 0;
|
sys_sta.A_brake = 0;
|
||||||
sys_sta.A_Speed_Cut = 0;
|
sys_sta.A_Speed_Cut = 0;
|
||||||
sys_sta.Reserve = 0;
|
sys_sta.O_lock = 0;
|
||||||
|
sys_sta.Reserve0 = 0;
|
||||||
|
|
||||||
|
sys_sta.IO_TX = Get_Status(IO_TTL_TX);
|
||||||
|
sys_sta.IO_RX = Get_Status(IO_TTL_RX);
|
||||||
|
sys_sta.O_12V = 0;
|
||||||
|
sys_sta.Reserve1 = 0;
|
||||||
|
|
||||||
DEBUG("sys_sta_t:lenght=%d",sizeof(sys_sta));
|
DEBUG("sys_sta_t:lenght=%d",sizeof(sys_sta));
|
||||||
DEBUG("sys_sta_t=%#04X",*(uint16_t*)&sys_sta);
|
DEBUG("sys_sta_t=%#04X",*(uint16_t*)&sys_sta);
|
||||||
|
|
||||||
|
@ -244,25 +247,8 @@ void EXTI_IRQHandler(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// // PAD控制进入管理员模式
|
|
||||||
// bool PAD_Manager_Mode =0;
|
|
||||||
// // PAD控制进入游客模式
|
|
||||||
// bool PAD_User_Mode =0;
|
|
||||||
// // PAD控制LED开关
|
|
||||||
// bool PAD_LED_ONOFF =0;
|
|
||||||
// // 系统自动刹车
|
|
||||||
// bool SYS_AUTO_brake =0;
|
|
||||||
// // 系统自动减速
|
|
||||||
// bool SYS_AUTO_Speed_Cut =0;
|
|
||||||
|
|
||||||
// uint8_t Get_SYS_Status(void){
|
|
||||||
// return (PAD_Manager_Mode << 3) | (PAD_User_Mode << 2) | (PAD_LED_ONOFF << 1) | (SYS_AUTO_brake << 0) | (SYS_AUTO_Speed_Cut << 4);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 控制进程,定时调用
|
// 控制进程,定时调用
|
||||||
void Control_procedure(void){
|
void Control_procedure(void){
|
||||||
|
|
||||||
|
|
||||||
//电门锁
|
//电门锁
|
||||||
// sys_sta.Smode = 0;
|
// sys_sta.Smode = 0;
|
||||||
sys_sta.IOgps = Get_Status(IN_GPS); //更新GPS状态
|
sys_sta.IOgps = Get_Status(IN_GPS); //更新GPS状态
|
||||||
|
|
|
@ -57,28 +57,38 @@ typedef struct sys_sta{
|
||||||
// uint16_t Pmode:2;
|
// uint16_t Pmode:2;
|
||||||
union{
|
union{
|
||||||
uint8_t Pmode:2;
|
uint8_t Pmode:2;
|
||||||
|
uint8_t Smode:2;
|
||||||
struct{
|
struct{
|
||||||
uint8_t Tourist:1;
|
uint8_t Tourist:1;
|
||||||
uint8_t Manager:1;
|
uint8_t Manager:1;
|
||||||
};
|
uint8_t RES0 :2;
|
||||||
};
|
|
||||||
union{
|
|
||||||
uint8_t Smode:2;
|
|
||||||
struct{
|
|
||||||
uint8_t IOgps:1;
|
uint8_t IOgps:1;
|
||||||
uint8_t IOmanager:1;
|
uint8_t IOmanager:1;
|
||||||
|
uint8_t RES1 :2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
union{// 输入状态
|
||||||
|
uint8_t I_STA:8;
|
||||||
|
struct{
|
||||||
|
uint8_t I_01 :1; // 自定义输入状态
|
||||||
|
uint8_t I_brake :1; // 制动信号输入状态
|
||||||
|
uint8_t I_back :1; // 倒车信号输入状态
|
||||||
|
uint8_t A_brake :1; // 自动刹车状态
|
||||||
|
uint8_t A_Speed_Cut :1; // 自动减速状态
|
||||||
|
uint8_t O_lock :1; // 电门锁输出状态
|
||||||
|
uint8_t Reserve0:2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
union{// 输入输出状态
|
||||||
|
uint8_t IO_STA:8;
|
||||||
|
struct{
|
||||||
|
uint8_t IO_TX :1;
|
||||||
|
uint8_t IO_RX :1;
|
||||||
|
uint8_t O_12V :1; // 12V电源输出状态
|
||||||
|
uint8_t Reserve1:5;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
uint16_t O_12V:1; // 12V电源输出状态
|
|
||||||
uint16_t O_lock:1; // 电门锁输出状态
|
|
||||||
uint16_t I_01:1; // 自定义输入状态
|
|
||||||
uint16_t I_brake:1;// 制动信号输入状态
|
|
||||||
uint16_t I_back:1; // 倒车信号输入状态
|
|
||||||
uint16_t IO_TX :1;
|
|
||||||
uint16_t IO_RX :1;
|
|
||||||
uint16_t A_brake :1; // 自动刹车状态
|
|
||||||
uint16_t A_Speed_Cut :1;// 自动减速状态
|
|
||||||
uint16_t Reserve:7;
|
|
||||||
} sys_sta_t;
|
} sys_sta_t;
|
||||||
|
|
||||||
extern sys_sta_t sys_sta;
|
extern sys_sta_t sys_sta;
|
||||||
|
@ -95,15 +105,6 @@ extern bool app_control_en[PA_MAX];
|
||||||
#define SYS_Back_STA Get_Status(IO_BACK) //倒车状态
|
#define SYS_Back_STA Get_Status(IO_BACK) //倒车状态
|
||||||
#define SYS_Brake_STA Get_Status(IO_BRAKE) //制动状态
|
#define SYS_Brake_STA Get_Status(IO_BRAKE) //制动状态
|
||||||
|
|
||||||
// // PAD控制进入管理员模式
|
|
||||||
// extern bool PAD_Manager_Mode;
|
|
||||||
// // PAD控制进入游客模式
|
|
||||||
// extern bool PAD_User_Mode;
|
|
||||||
// // 系统自动刹车
|
|
||||||
// extern bool SYS_AUTO_brake;
|
|
||||||
// // 系统自动减速
|
|
||||||
// extern bool SYS_AUTO_Speed_Cut;
|
|
||||||
|
|
||||||
//中控控制IO初始化
|
//中控控制IO初始化
|
||||||
void app_control_init(void);
|
void app_control_init(void);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,493 @@
|
||||||
|
#include "b6x.h"
|
||||||
|
#include "drvs.h"
|
||||||
|
#include "dbg.h"
|
||||||
|
#include "sftmr.h"
|
||||||
|
|
||||||
|
#include "app_modbus.h"
|
||||||
|
#include "CRCxx.h"
|
||||||
|
#include "app_ota.h"
|
||||||
|
#include "sys_config.h"
|
||||||
|
|
||||||
|
#define ModbusCRC16_EN 0
|
||||||
|
|
||||||
|
#define DEBUG_MODBUS 1
|
||||||
|
|
||||||
|
#if DEBUG_MODBUS
|
||||||
|
#define DEBUG(fmt, args...) debug("[modbus]" fmt, ##args)
|
||||||
|
#else
|
||||||
|
#define DEBUG(fmt, args...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MODBUS_MAX_LEN 64
|
||||||
|
|
||||||
|
static uint8_t MODBUS_ReceCount =0;
|
||||||
|
static uint8_t MODBUS_Rece_BUF[MODBUS_MAX_LEN];
|
||||||
|
static uint8_t MODBUS_Sent_BUF[MODBUS_MAX_LEN];
|
||||||
|
|
||||||
|
// 需掉电不丢失数据12*2字节//40027-40030//40514-40520
|
||||||
|
uint16_t MODBUS_FLASH_DAT[12] ={
|
||||||
|
[0]=1,//MODBUS从机地址
|
||||||
|
[1]=1,// 出厂模式状态 //写入 1,设备将重置进入出厂模式
|
||||||
|
[2]=100,// 固件版本
|
||||||
|
[3]=1,// 硬件版本
|
||||||
|
|
||||||
|
[4]=30,//30*100ms // 代码过期时间
|
||||||
|
[5]=30,//30*100ms// 输出继电器的关闭时间
|
||||||
|
[6]=100,//100*100ms// Led 激活时间
|
||||||
|
[7]=10,//10*10ms// 蜂鸣器激活时间
|
||||||
|
|
||||||
|
[8]=0x001f,// Led 键盘颜色//RGB565 格式
|
||||||
|
[9]=0xf800,// Led Mifare 读卡颜色//RGB565 格式
|
||||||
|
[10]=0x07E0,// Led 状态灯0颜色//RGB565 格式
|
||||||
|
[11]=0x07ff,// Led 状态灯1颜色//RGB565 格式
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool app_modbus_CheckData(uint8_t *dat , uint8_t len);
|
||||||
|
|
||||||
|
|
||||||
|
//发送数据并计算CRC
|
||||||
|
void app_modbus_SendData(uint8_t *dat ,uint8_t len){
|
||||||
|
if(0 == len){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uint16_t CRC16=crc16_modbus(dat ,len);
|
||||||
|
|
||||||
|
dat[len++] =CRC16 & 0xff;// CRC低字节在前
|
||||||
|
dat[len++] =CRC16 >> 8;
|
||||||
|
|
||||||
|
uart_send(UART1_PORT ,len ,dat);
|
||||||
|
while(len){//清空发送数据缓存
|
||||||
|
dat[--len] =0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 01 功能码
|
||||||
|
void FunctionalCode_01(uint16_t reg_addr){//ID寄存器地址//返回7字节
|
||||||
|
uint8_t len_count=0;
|
||||||
|
|
||||||
|
// DEBUG("FuncCode_01:0x%X\n",reg_addr);
|
||||||
|
|
||||||
|
MODBUS_Sent_BUF[len_count++] =MODBUS_ADDR;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =0x01;
|
||||||
|
switch(reg_addr){
|
||||||
|
case 0x0005:
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
len_count =0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 03 功能码 # 读 - 保持寄存器
|
||||||
|
// 06 功能码 # 写 - 单个寄存器
|
||||||
|
void FunctionalCode_03_06(uint8_t CMDCode, uint16_t reg_addr , uint16_t reg_val_num){//寄存器地址//返回8字节或15字节
|
||||||
|
|
||||||
|
uint8_t len_count=0;
|
||||||
|
|
||||||
|
// DEBUG("FuncCode_03:0x%X\n",reg_addr);
|
||||||
|
|
||||||
|
MODBUS_Sent_BUF[len_count++] =MODBUS_ADDR;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =CMDCode;
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
len_count++;
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =(reg_addr >> 8) & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =reg_addr & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(reg_addr){
|
||||||
|
case 0x0001: // 设备的 Modbus地址
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =0x00;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =MODBUS_ADDR & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
MODBUS_ADDR =reg_val_num & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =MODBUS_ADDR >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =MODBUS_ADDR & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
{ // 0x0101-0x0002
|
||||||
|
case 0x0101: // // 读写系统配置
|
||||||
|
if(CMDCode == 0x03){ // # 读 - 保持寄存器
|
||||||
|
|
||||||
|
break;
|
||||||
|
}else if(CMDCode == 0x06){ // # 写 - 单个寄存器
|
||||||
|
write_cfg(&sys_conf); //保存写入配置
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0102: // 管理员模式油门极限寄存器(Unit:%)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Manager_sLim >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Manager_sLim & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_conf.Manager_sLim =reg_val_num & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Manager_sLim >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Manager_sLim & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0103: // 游客模式油门极限寄存器(Unit:%)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Tourist_sLim >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Tourist_sLim & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_conf.Tourist_sLim =reg_val_num & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Tourist_sLim >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Tourist_sLim & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0104: // 减速油门极限寄存器(Unit:%)(自动减速时油门极限)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_sLim >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_sLim & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_conf.Speed_Cut_sLim =reg_val_num & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_sLim >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_sLim & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0105: // 刹车距离寄存器(前进)(Unit:mm)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_conf.Brake_DLimit =reg_val_num;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0106: // 减速距离寄存器(Unit:mm)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_conf.Speed_Cut_DLimit =reg_val_num;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0107: // 刹车距离极限寄存器(后退)(Unit:mm)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit_B >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit_B & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_conf.Brake_DLimit_B =reg_val_num;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit_B >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Brake_DLimit_B & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0108: // 减速距离极限寄存器(Unit:mm)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit_B >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit_B & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_conf.Speed_Cut_DLimit_B =reg_val_num;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit_B >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_conf.Speed_Cut_DLimit_B & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{ // 0x0109-0x010D
|
||||||
|
case 0x0201: //PAD模式寄存器
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.Pmode >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.Pmode & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_sta.Pmode =reg_val_num & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.Pmode >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.Pmode & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0202: //系统模式寄存器(只读)
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.Smode >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.Smode & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
// sys_sta.Smode =reg_val_num & 0xff;
|
||||||
|
// MODBUS_Sent_BUF[len_count++] =sys_sta.Smode >> 8;
|
||||||
|
// MODBUS_Sent_BUF[len_count++] =sys_sta.Smode & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0203: //输入输出状态寄存器
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.IO_STA >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.IO_STA & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){// 输入输出状态寄存器可写
|
||||||
|
// sys_sta.I_STA =reg_val_num & 0xff;//输入寄存器不可写
|
||||||
|
sys_sta.IO_STA =reg_val_num & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.IO_STA >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.IO_STA & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0204: //输入状态寄存器
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.I_STA >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.I_STA & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
// sys_sta.I_STA =reg_val_num & 0xff;//输入寄存器不可写
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.I_STA >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.I_STA & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0205: //0 关闭12V输出//1 开启12V输出
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.O_12V >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.O_12V & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
sys_sta.O_12V =reg_val_num & 0xff;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.O_12V >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =sys_sta.O_12V & 0xff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{ // 0x0201-0x0203
|
||||||
|
case 0x0301: // 电池状态
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_STA >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_STA & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0302: // 电池电压
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_Voltage >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_Voltage & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0303: // 电池电量
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_Percent >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_Percent & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0304: // 剩余充电时间
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_Remain_Time >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_Remain_Time & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x0305: // 雷达距离信息
|
||||||
|
if(CMDCode == 0x03){
|
||||||
|
MODBUS_Sent_BUF[len_count++] =radar_data.distance >> 8;
|
||||||
|
MODBUS_Sent_BUF[len_count++] =radar_data.distance & 0xff;
|
||||||
|
MODBUS_Sent_BUF[2] +=2;
|
||||||
|
if(0 == --reg_val_num){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if(CMDCode == 0x06){
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
len_count =0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
app_modbus_SendData(MODBUS_Sent_BUF ,len_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool app_modbus_CheckData(uint8_t *dat , uint8_t len){//检查数据
|
||||||
|
uint16_t CRC16;
|
||||||
|
|
||||||
|
// DEBUG("len:%d\n",len);
|
||||||
|
if(len > 8){
|
||||||
|
len = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(dat[0] ==MODBUS_ADDR){//验证从机地址
|
||||||
|
CRC16 =crc16_modbus(dat ,len-2);//计算CRC
|
||||||
|
DEBUG("CRC16:0x%X\n",CRC16);
|
||||||
|
#if !ModbusCRC16_EN
|
||||||
|
CRC16 =((uint16_t)(dat[len-1])<<8) + dat[len-2];
|
||||||
|
#endif
|
||||||
|
if(CRC16 ==((uint16_t)(dat[len-1])<<8) + dat[len-2]){//CRC低字节在前
|
||||||
|
switch(dat[1]){//功能码
|
||||||
|
case 0x01:// 功能码 01
|
||||||
|
FunctionalCode_01(((uint16_t)dat[2]<<8) + dat[3]);
|
||||||
|
break;
|
||||||
|
case 0x03:// 功能码03 # 读 - 保持寄存器
|
||||||
|
FunctionalCode_03_06(0x03,((uint16_t)dat[2]<<8) + dat[3] ,((uint16_t)dat[4]<<8) + dat[5]);
|
||||||
|
// FunctionalCode_03(((uint16_t)dat[2]<<8) + dat[3] ,((uint16_t)dat[4]<<8) + dat[5]);
|
||||||
|
break;
|
||||||
|
case 0x06:// 功能码06 # 写 - 单个寄存器
|
||||||
|
FunctionalCode_03_06(0x06,((uint16_t)dat[2]<<8) + dat[3] ,((uint16_t)dat[4]<<8) + dat[5]);
|
||||||
|
// FunctionalCode_06(((uint16_t)dat[2]<<8) + dat[3] ,((uint16_t)dat[4]<<8) + dat[5]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(Modbus_RBUF_SIZE)
|
||||||
|
#define Modbus_RBUF_SIZE 0x100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Modbus_FIFO_RXTL 8
|
||||||
|
|
||||||
|
#undef RBUF_SIZE
|
||||||
|
#define RBUF_SIZE Modbus_RBUF_SIZE
|
||||||
|
#include "rbuf.h"
|
||||||
|
|
||||||
|
/// RingBuffer for modbus1
|
||||||
|
static rbuf_t ModbusRbRx;
|
||||||
|
|
||||||
|
void app_modbus_Rb_Reset(void){
|
||||||
|
rbuf_init(&ModbusRbRx);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t app_modbus_Rb_Len(void){
|
||||||
|
return rbuf_len(&ModbusRbRx);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t app_modbus_Rb_Read(uint8_t *buff, uint16_t max){
|
||||||
|
return rbuf_gets(&ModbusRbRx, buff, max);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define Rx_timeout _MS(20) // 接收超时时间
|
||||||
|
static tmr_tk_t Rx_timeout_id=0;
|
||||||
|
|
||||||
|
static tmr_tk_t Rx_timeout_handler(tmr_id_t id){
|
||||||
|
(void)(id);
|
||||||
|
|
||||||
|
MODBUS_ReceCount = app_modbus_Rb_Read(&MODBUS_Rece_BUF[0], MODBUS_MAX_LEN);
|
||||||
|
|
||||||
|
DEBUG("RC:%d\n",MODBUS_ReceCount);
|
||||||
|
// uart_send(UART1_PORT ,MODBUS_ReceCount ,MODBUS_Rece_BUF);
|
||||||
|
|
||||||
|
app_modbus_CheckData(MODBUS_Rece_BUF, MODBUS_ReceCount);//modbus数据解析
|
||||||
|
app_otas_rxd(MODBUS_ReceCount ,MODBUS_Rece_BUF);//otas数据解析
|
||||||
|
while(MODBUS_ReceCount){
|
||||||
|
MODBUS_Rece_BUF[--MODBUS_ReceCount] = 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_modbus_Init(uint32_t baudrate, uint8_t io_tx, uint8_t io_rx){
|
||||||
|
|
||||||
|
uart_init(UART1_PORT, io_tx, io_rx);
|
||||||
|
uart_conf(UART1_PORT, BRR_BAUD(baudrate), LCR_BITS(8, 1, none));
|
||||||
|
|
||||||
|
// 使能FIFO 接收8字节时触发、使能超过20字节触发超时中断
|
||||||
|
uart_fctl(UART1_PORT, FCR_FIFOEN_BIT | FCR_RXTL_8BYTE,
|
||||||
|
20/*bits_rto*/, UART_IR_RXRD_BIT | UART_IR_RTO_BIT);
|
||||||
|
|
||||||
|
// empty buffer
|
||||||
|
rbuf_init(&ModbusRbRx);
|
||||||
|
|
||||||
|
DEBUG("MODBUS init success!\n");
|
||||||
|
|
||||||
|
NVIC_EnableIRQ(UART1_IRQn);
|
||||||
|
Rx_timeout_id =sftmr_start(10, Rx_timeout_handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UART1_IRQHandler(void){
|
||||||
|
uint32_t state = UART1->IFM.Word; // UART1->RIF.Word;
|
||||||
|
|
||||||
|
if (state & 0x01){ //(BIT_RXRD)
|
||||||
|
UART1->IDR.RXRD = 1; // Disable RXRD Interrupt
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < Modbus_FIFO_RXTL; i++){
|
||||||
|
rbuf_putc(&ModbusRbRx, UART1->RBR);
|
||||||
|
}
|
||||||
|
sftmr_Refresh(Rx_timeout_id ,Rx_timeout);
|
||||||
|
UART1->ICR.RXRD = 1; // Clear RXRD Interrupt Flag
|
||||||
|
UART1->IER.RXRD = 1; // Enable RXRD Interrupt
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state & 0x10){ //(BIT_RTO)
|
||||||
|
|
||||||
|
UART1->IDR.RTO = 1; // Disable RTO Interrupt
|
||||||
|
|
||||||
|
while (UART1->SR.RFNE){
|
||||||
|
rbuf_putc(&ModbusRbRx, UART1->RBR);
|
||||||
|
if(0 ==UART1->SR.RFNE){
|
||||||
|
sftmr_Refresh(Rx_timeout_id ,Rx_timeout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UART1->ICR.RTO = 1; // Clear RTO Interrupt Flag
|
||||||
|
UART1->IER.RTO = 1; // Enable RTO Interrupt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef _APP_MODBUS_H_
|
||||||
|
#define _APP_MODBUS_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
//MODBUS从机地址(广播地址0)
|
||||||
|
#define MODBUS_ADDR sys_conf.Modbus_addr
|
||||||
|
|
||||||
|
|
||||||
|
void app_modbus_Init(uint32_t baudrate, uint8_t io_tx, uint8_t io_rx);
|
||||||
|
|
||||||
|
// Empty RingBuffer to reset.
|
||||||
|
void app_modbus_Rb_Reset(void);
|
||||||
|
|
||||||
|
// Get Length of data in RB.
|
||||||
|
uint16_t app_modbus_Rb_Len(void);
|
||||||
|
|
||||||
|
// Read data from RB, return the Length of data copied.
|
||||||
|
uint16_t app_modbus_Rb_Read(uint8_t *buff, uint16_t max);
|
||||||
|
|
||||||
|
// Uart Data procedure
|
||||||
|
void app_modbus_procedure(void);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -16,8 +16,8 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
#include "app_ota.h"
|
#include "app_ota.h"
|
||||||
#include "sys_config.h"
|
// #include "app_led_control.h"
|
||||||
|
#include "app_modbus.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -74,8 +74,6 @@
|
||||||
#define OTA_TIMER_TICK _MS(3000) // 3s
|
#define OTA_TIMER_TICK _MS(3000) // 3s
|
||||||
#define OTA_MAX_TIMEOUT (400) // 600s/20min
|
#define OTA_MAX_TIMEOUT (400) // 600s/20min
|
||||||
|
|
||||||
#define OTA_CRC_EN 0 // CRC校验使能/0:不检验/1:检验
|
|
||||||
|
|
||||||
enum ota_state{
|
enum ota_state{
|
||||||
OTA_IDLE,
|
OTA_IDLE,
|
||||||
OTA_START,
|
OTA_START,
|
||||||
|
@ -164,7 +162,6 @@ static void flash_wr_protect(uint8_t val)
|
||||||
* Refout: True
|
* Refout: True
|
||||||
* Xorout: 0x0000
|
* Xorout: 0x0000
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#if (OTA_CRC_EN)
|
|
||||||
static uint16_t crc16_modbus(uint8_t *data, uint16_t length)
|
static uint16_t crc16_modbus(uint8_t *data, uint16_t length)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
@ -189,34 +186,24 @@ static uint16_t crc16_modbus(uint8_t *data, uint16_t length)
|
||||||
|
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void app_otas_rxd(uint16_t len, const uint8_t *data)
|
void app_otas_rxd(uint16_t len, const uint8_t *data)
|
||||||
{
|
{
|
||||||
#if (OTA_CRC_EN)
|
|
||||||
uint8_t OTA_pack_len =OTA_PKT_LEN;
|
|
||||||
#else
|
|
||||||
uint8_t OTA_pack_len = OTA_DATA_LEN - 2;//减去CRC16的两字节
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// 接收20字节数据包
|
// 接收20字节数据包
|
||||||
if (len > OTA_pack_len){
|
if (len > OTA_PKT_LEN){
|
||||||
len = OTA_pack_len;
|
len = OTA_PKT_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
// memcpy(ota_recv_buf, data, ota_env.data_len);
|
// memcpy(ota_recv_buf, data, ota_env.data_len);
|
||||||
for(uint16_t i = 0; i < len; i++){
|
for(uint16_t i = 0; i < OTA_PKT_LEN; i++){
|
||||||
ota_recv_buf[i] = data[i];
|
ota_recv_buf[i] = data[i];
|
||||||
}
|
}
|
||||||
// uart_send(UART1_PORT ,len ,ota_recv_buf);
|
// uart_send(UART1_PORT ,len ,ota_recv_buf);
|
||||||
// debugHex(ota_recv_buf, len);
|
|
||||||
ota_env.new_data_flag = OTA_DATA_NEW;
|
ota_env.new_data_flag = OTA_DATA_NEW;
|
||||||
app_ota_proc();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void app_otas_txd(uint16_t len, const uint8_t *data){
|
void app_otas_txd(uint16_t len, const uint8_t *data){
|
||||||
// uart_send(UART1_PORT ,len ,data);
|
uart_send(UART1_PORT ,len ,data);
|
||||||
app_PAD_Sendcmd(OTA_CMD_ID ,OTA_REG_ADDR ,data ,len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tmr_tk_t ota_time_handle(uint8_t timeid){
|
tmr_tk_t ota_time_handle(uint8_t timeid){
|
||||||
|
@ -256,7 +243,6 @@ void app_ota_proc(void){
|
||||||
}
|
}
|
||||||
ota_env.new_data_flag = OTA_DATA_OLD;
|
ota_env.new_data_flag = OTA_DATA_OLD;
|
||||||
if ((PEER_IDX == OTA_CMD_START) && (ota_env.err_info == OTA_ERR_NONE)){ //初始帧
|
if ((PEER_IDX == OTA_CMD_START) && (ota_env.err_info == OTA_ERR_NONE)){ //初始帧
|
||||||
#if (OTA_CRC_EN)
|
|
||||||
uint16_t local_crc16 = crc16_modbus(p_OTAData, OTA_PKT_LEN - 2);
|
uint16_t local_crc16 = crc16_modbus(p_OTAData, OTA_PKT_LEN - 2);
|
||||||
if(local_crc16 != PEER_CRC){
|
if(local_crc16 != PEER_CRC){
|
||||||
DEBUG("CRC16:0x%X,local_crc16:0x%X", PEER_CRC, local_crc16);
|
DEBUG("CRC16:0x%X,local_crc16:0x%X", PEER_CRC, local_crc16);
|
||||||
|
@ -265,7 +251,6 @@ void app_ota_proc(void){
|
||||||
DEBUG("OTA_ERR_CRC");
|
DEBUG("OTA_ERR_CRC");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if((ota_env.bank != FLASH_ADDR_INVALID) && (ota_env.bank ==(0xFFF000 & OTA_read32(PEER_DAT)))){//检验数据包的是否有效
|
if((ota_env.bank != FLASH_ADDR_INVALID) && (ota_env.bank ==(0xFFF000 & OTA_read32(PEER_DAT)))){//检验数据包的是否有效
|
||||||
// Erase
|
// Erase
|
||||||
uint32_t erase_offset = (ota_env.bank & 0xFFFFF000UL);
|
uint32_t erase_offset = (ota_env.bank & 0xFFFFF000UL);
|
||||||
|
@ -303,7 +288,6 @@ void app_ota_proc(void){
|
||||||
}
|
}
|
||||||
ota_env.new_data_flag = OTA_DATA_OLD;
|
ota_env.new_data_flag = OTA_DATA_OLD;
|
||||||
|
|
||||||
#if (OTA_CRC_EN)
|
|
||||||
uint16_t local_crc16 = crc16_modbus(p_OTAData, OTA_PKT_LEN - 2);
|
uint16_t local_crc16 = crc16_modbus(p_OTAData, OTA_PKT_LEN - 2);
|
||||||
if(local_crc16 != PEER_CRC){
|
if(local_crc16 != PEER_CRC){
|
||||||
DEBUG("IDX:%d,CRC16:0x%X,local_crc16:0x%X",PEER_IDX, PEER_CRC, local_crc16);
|
DEBUG("IDX:%d,CRC16:0x%X,local_crc16:0x%X",PEER_IDX, PEER_CRC, local_crc16);
|
||||||
|
@ -312,8 +296,6 @@ void app_ota_proc(void){
|
||||||
DEBUG("OTA_ERR_CRC");
|
DEBUG("OTA_ERR_CRC");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if(ota_env.data_idx == PEER_IDX && ota_env.data_idx < OTA_FW_MAX_SIZE){ //数据索引正确
|
if(ota_env.data_idx == PEER_IDX && ota_env.data_idx < OTA_FW_MAX_SIZE){ //数据索引正确
|
||||||
uint8_t wr_data_pos = (ota_env.data_idx % OTA_DATA_LEN) * OTA_DATA_LEN;
|
uint8_t wr_data_pos = (ota_env.data_idx % OTA_DATA_LEN) * OTA_DATA_LEN;
|
||||||
uint32_t wr_addr = (ota_env.data_idx / OTA_DATA_LEN) * FLASH_PAGE_SIZE + ota_env.bank;
|
uint32_t wr_addr = (ota_env.data_idx / OTA_DATA_LEN) * FLASH_PAGE_SIZE + ota_env.bank;
|
||||||
|
@ -402,13 +384,11 @@ void app_ota_proc(void){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool app_is_ota_proc(void)
|
bool app_is_ota_proc(void){
|
||||||
{
|
|
||||||
return (ota_env.ota_sta != OTA_IDLE);
|
return (ota_env.ota_sta != OTA_IDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ota_env_init(void)
|
static void ota_env_init(void){
|
||||||
{
|
|
||||||
ota_env.bank = FLASH_ADDR_INVALID;
|
ota_env.bank = FLASH_ADDR_INVALID;
|
||||||
ota_env.ota_sta = OTA_IDLE;
|
ota_env.ota_sta = OTA_IDLE;
|
||||||
ota_env.new_data_flag = OTA_DATA_OLD;
|
ota_env.new_data_flag = OTA_DATA_OLD;
|
||||||
|
@ -418,8 +398,7 @@ static void ota_env_init(void)
|
||||||
ota_env.time_id = TMR_ID_NONE;
|
ota_env.time_id = TMR_ID_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void app_ota_init(void)
|
void app_ota_init(void){
|
||||||
{
|
|
||||||
ota_env_init();
|
ota_env_init();
|
||||||
|
|
||||||
#if (CFG_USE_LOAD)
|
#if (CFG_USE_LOAD)
|
||||||
|
|
|
@ -55,37 +55,6 @@ void radar_AUTO_BrakeORSpeedCut(uint8_t radar_id , uint16_t Car_Distance){ //距
|
||||||
// 定时处理数和获取数据
|
// 定时处理数和获取数据
|
||||||
static tmr_tk_t radar_timer_handler(tmr_id_t id){
|
static tmr_tk_t radar_timer_handler(tmr_id_t id){
|
||||||
(void)(id);
|
(void)(id);
|
||||||
// uint16_t Car_Distance=0;
|
|
||||||
|
|
||||||
// if(Get_Status(OUT_Door_lock)){
|
|
||||||
// // 定时发送状态信息
|
|
||||||
// if(radar_flag_cnt > 4){
|
|
||||||
// uint8_t ret_data[20]={0,0};
|
|
||||||
// radar_flag_cnt =0;
|
|
||||||
// ret_data[radar_flag_cnt++] =BAT_Message.Bat_STA; // 电池状态
|
|
||||||
// ret_data[radar_flag_cnt++] =BAT_Message.Bat_Voltage >> 8; //电池电压
|
|
||||||
// ret_data[radar_flag_cnt++] =BAT_Message.Bat_Voltage & 0xff;
|
|
||||||
// ret_data[radar_flag_cnt++] =get_in_acc_percent();// 当前油门百分比
|
|
||||||
// ret_data[radar_flag_cnt++] =radar_daraframe.Front_data /100;// 前雷达距离信息
|
|
||||||
// ret_data[radar_flag_cnt++] =radar_daraframe.Back_data/100;// 后雷达距离信息
|
|
||||||
// // 读取系统配置
|
|
||||||
// ret_data[radar_flag_cnt++]=sys_conf_info.M_mode_sLim;
|
|
||||||
// ret_data[radar_flag_cnt++]=sys_conf_info.U_mode_sLim;
|
|
||||||
// ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Brake_Distance;
|
|
||||||
// ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Speed_Cut_Distance;
|
|
||||||
// ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Brake_Distance_B;
|
|
||||||
// ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Speed_Cut_Distance_B;
|
|
||||||
// ret_data[radar_flag_cnt++] =(Get_Status(IN_GPS)<<0) | (SYS_Back_STA<<1) | (Get_Status(IO_BRAKE)<<2)
|
|
||||||
// | (SYS_Manager_STA<<3) | ((PAD_Manager_Mode)<<4)
|
|
||||||
// | ((PAD_User_Mode)<<5) | ((sys_sta.A_Speed_Cut)<<6) | ((sys_sta.A_brake)<<7);
|
|
||||||
// app_PAD_Sendcmd(0x10,0x01,ret_data,radar_flag_cnt);
|
|
||||||
// radar_flag_cnt =0;
|
|
||||||
// goto radar_end;
|
|
||||||
// }else {
|
|
||||||
// radar_flag_cnt++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// DEBUG("RADAR...");
|
|
||||||
if(radar_NewData_flag == 1){
|
if(radar_NewData_flag == 1){
|
||||||
radar_NewData_flag =0; // 清空新数据标志位
|
radar_NewData_flag =0; // 清空新数据标志位
|
||||||
radar_CMDSend_cnt =0; // 清空发送命令计数
|
radar_CMDSend_cnt =0; // 清空发送命令计数
|
||||||
|
@ -108,9 +77,6 @@ static tmr_tk_t radar_timer_handler(tmr_id_t id){
|
||||||
return _MS(160);//300ms
|
return _MS(160);//300ms
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static uint8_t radar_buff[RADAR_BUFF_MAX];
|
static uint8_t radar_buff[RADAR_BUFF_MAX];
|
||||||
|
|
||||||
// 数据接收
|
// 数据接收
|
||||||
|
|
|
@ -17,20 +17,20 @@ void app_uart_Init(uint8_t port, uint32_t baudrate, uint8_t io_tx, uint8_t io_rx
|
||||||
NVIC_EnableIRQ(port==UART1_PORT?UART1_IRQn:UART2_IRQn);
|
NVIC_EnableIRQ(port==UART1_PORT?UART1_IRQn:UART2_IRQn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UART1_IRQHandler(void)
|
// void UART1_IRQHandler(void)
|
||||||
{
|
// {
|
||||||
uint32_t state = UART1->IFM.Word; // UART1->RIF.Word;
|
// uint32_t state = UART1->IFM.Word; // UART1->RIF.Word;
|
||||||
|
|
||||||
if (state & 0x01) //(BIT_RXRD)
|
// if (state & 0x01) //(BIT_RXRD)
|
||||||
{
|
// {
|
||||||
UART1->IDR.RXRD = 1; // Disable RXRD Interrupt
|
// UART1->IDR.RXRD = 1; // Disable RXRD Interrupt
|
||||||
uint8_t data = UART1->RBR;
|
// uint8_t data = UART1->RBR;
|
||||||
|
|
||||||
app_PAD_Receive(data);
|
// app_PAD_Receive(data);
|
||||||
UART1->ICR.RXRD = 1; // Clear RXRD Interrupt Flag
|
// UART1->ICR.RXRD = 1; // Clear RXRD Interrupt Flag
|
||||||
UART1->IER.RXRD = 1; // Enable RXRD Interrupt
|
// UART1->IER.RXRD = 1; // Enable RXRD Interrupt
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
***************************************UART2*****************************************************
|
***************************************UART2*****************************************************
|
||||||
|
|
|
@ -49,7 +49,6 @@ void GRB_WS2812_Write_24Bits(uint32_t GRB888)
|
||||||
}
|
}
|
||||||
WS2812_DIN_L;
|
WS2812_DIN_L;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GRB_WS2812_Write_GRBs(uint8_t len, uint32_t *GRB888)
|
void GRB_WS2812_Write_GRBs(uint8_t len, uint32_t *GRB888)
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#include "prf_sess.h"
|
#include "prf_sess.h"
|
||||||
#include "sys_config.h"
|
#include "sys_config.h"
|
||||||
|
#include "app_modbus.h"
|
||||||
|
|
||||||
|
|
||||||
#define DBG_MAIN_EN 1
|
#define DBG_MAIN_EN 1
|
||||||
|
|
||||||
|
@ -196,40 +198,16 @@ int main(void)
|
||||||
}
|
}
|
||||||
*****************/
|
*****************/
|
||||||
|
|
||||||
app_uart_Init(UART1_PORT,9600,PAD_TXD1,PAD_RXD1);//上位机PAD
|
app_modbus_Init(9600,PAD_TXD1,PAD_RXD1);//modbus
|
||||||
app_uart_Init(UART2_PORT,9600,RADAR_TXD0,RADAR_RXD0);//雷达
|
app_uart_Init(UART2_PORT,9600,RADAR_TXD0,RADAR_RXD0);//雷达
|
||||||
app_control_init();
|
app_control_init();
|
||||||
|
conf_init();
|
||||||
app_radar_init();
|
app_radar_init();
|
||||||
Time_Event_Init();
|
Time_Event_Init();
|
||||||
GRB_WS2812_Init();
|
GRB_WS2812_Init();
|
||||||
BAT_Message_Init();
|
BAT_Message_Init();
|
||||||
app_ota_init();
|
app_ota_init();
|
||||||
|
|
||||||
// read config
|
|
||||||
uint8_t ret = read_cfg(&sys_conf);
|
|
||||||
if(ret || sys_conf.VERSION != SOFTWARE_ID){
|
|
||||||
DEBUG("Read Config ERROR!\r\n");//读取配置文件失败//使用默认配置
|
|
||||||
sys_conf.VERSION =SOFTWARE_ID;
|
|
||||||
sys_conf.Manager_sLim = D_Manager_sLim,
|
|
||||||
sys_conf.Tourist_sLim = D_Tourist_sLim,
|
|
||||||
sys_conf.Speed_Cut_sLim = D_Speed_Cut_sLim,
|
|
||||||
sys_conf.Brake_DLimit = D_Brake_DLimit,//自动刹车距离
|
|
||||||
sys_conf.Speed_Cut_DLimit = D_Speed_Cut_DLimit,//自动减速距离
|
|
||||||
sys_conf.Brake_DLimit_B = D_Brake_DLimit_B,//自动刹车距离
|
|
||||||
sys_conf.Speed_Cut_DLimit_B = D_Speed_Cut_DLimit_B,//自动减速距离
|
|
||||||
sys_conf.Reserve =0;
|
|
||||||
write_cfg(&sys_conf);
|
|
||||||
}
|
|
||||||
DEBUG("sys_conf:lenght=%d",sizeof(sys_conf));
|
|
||||||
DEBUG("VERSION:%#04X",sys_conf.VERSION);
|
|
||||||
DEBUG("Manager_sLim:%d",sys_conf.Manager_sLim);
|
|
||||||
DEBUG("Tourist_sLim:%d",sys_conf.Tourist_sLim);
|
|
||||||
DEBUG("Speed_Cut_sLim:%d",sys_conf.Speed_Cut_sLim);
|
|
||||||
DEBUG("Brake_DLimit:%d",sys_conf.Brake_DLimit);
|
|
||||||
DEBUG("Speed_Cut_DLimit:%d",sys_conf.Speed_Cut_DLimit);
|
|
||||||
DEBUG("Brake_DLimit_B:%d",sys_conf.Brake_DLimit_B);
|
|
||||||
DEBUG("Speed_Cut_DLimit_B:%d",sys_conf.Speed_Cut_DLimit_B);
|
|
||||||
|
|
||||||
#if (1 ==BLE_ENABLE)
|
#if (1 ==BLE_ENABLE)
|
||||||
// ADC初始化
|
// ADC初始化
|
||||||
sftmr_start(20, test_timer_handler);
|
sftmr_start(20, test_timer_handler);
|
||||||
|
@ -248,7 +226,7 @@ int main(void)
|
||||||
// app_ble_procedure();
|
// app_ble_procedure();
|
||||||
|
|
||||||
// OTA Procedure
|
// OTA Procedure
|
||||||
// app_ota_proc();
|
app_ota_proc();
|
||||||
|
|
||||||
Control_procedure();
|
Control_procedure();
|
||||||
iwdt_feed();//喂狗
|
iwdt_feed();//喂狗
|
||||||
|
|
|
@ -60,22 +60,23 @@ uint8_t read_cfg(SYS_CONF_t *sys_config_info_t){
|
||||||
|
|
||||||
void conf_init(void){
|
void conf_init(void){
|
||||||
// read config
|
// read config
|
||||||
if(read_cfg(&sys_conf)){
|
if( read_cfg(&sys_conf) || (sys_conf.VERSION != SOFTWARE_ID)){
|
||||||
DEBUG("Read Config :CRC_ERROR ");//读取配置文件失败//使用默认配置
|
DEBUG("Read Config :CRC_ERROR ");//读取配置文件失败//使用默认配置
|
||||||
sys_conf.VERSION =SOFTWARE_ID;
|
sys_conf.VERSION =SOFTWARE_ID;
|
||||||
sys_conf.Manager_sLim = D_Manager_sLim,
|
sys_conf.Modbus_addr =D_Modbus_addr;
|
||||||
sys_conf.Tourist_sLim = D_Tourist_sLim,
|
sys_conf.Manager_sLim = D_Manager_sLim;
|
||||||
sys_conf.Speed_Cut_sLim = D_Speed_Cut_sLim,//(自动减速时油门极限)
|
sys_conf.Tourist_sLim = D_Tourist_sLim;
|
||||||
sys_conf.Brake_DLimit = D_Brake_DLimit,//自动刹车距离(前进)
|
sys_conf.Speed_Cut_sLim = D_Speed_Cut_sLim;//(自动减速时油门极限)
|
||||||
sys_conf.Speed_Cut_DLimit = D_Speed_Cut_DLimit,//自动减速距离
|
sys_conf.Brake_DLimit = D_Brake_DLimit;//自动刹车距离(前进)
|
||||||
sys_conf.Brake_DLimit_B = D_Brake_DLimit_B,//自动刹车距离(后退)
|
sys_conf.Speed_Cut_DLimit = D_Speed_Cut_DLimit;//自动减速距离
|
||||||
sys_conf.Speed_Cut_DLimit_B = D_Speed_Cut_DLimit_B,//自动减速距离
|
sys_conf.Brake_DLimit_B = D_Brake_DLimit_B;//自动刹车距离(后退)
|
||||||
sys_conf.Reserve =0;
|
sys_conf.Speed_Cut_DLimit_B = D_Speed_Cut_DLimit_B;//自动减速距离
|
||||||
DEBUG("write Default Config!!!");// 写入默认配置
|
DEBUG("write Default Config!!!");// 写入默认配置
|
||||||
write_cfg(&sys_conf);
|
write_cfg(&sys_conf);
|
||||||
}
|
}
|
||||||
DEBUG("\nsys_conf:lenght=%d",sizeof(sys_conf));
|
DEBUG("\nsys_conf:lenght=%d",sizeof(sys_conf));
|
||||||
DEBUG("VERSION:%#04X",sys_conf.VERSION);
|
DEBUG("VERSION:%#04X",sys_conf.VERSION);
|
||||||
|
DEBUG("Modbus_addr:%#04X",sys_conf.Modbus_addr);
|
||||||
DEBUG("Manager_sLim:%d",sys_conf.Manager_sLim);
|
DEBUG("Manager_sLim:%d",sys_conf.Manager_sLim);
|
||||||
DEBUG("Tourist_sLim:%d",sys_conf.Tourist_sLim);
|
DEBUG("Tourist_sLim:%d",sys_conf.Tourist_sLim);
|
||||||
DEBUG("Speed_Cut_sLim:%d",sys_conf.Speed_Cut_sLim);
|
DEBUG("Speed_Cut_sLim:%d",sys_conf.Speed_Cut_sLim);
|
||||||
|
|
|
@ -17,10 +17,10 @@
|
||||||
// 必须4字节对齐
|
// 必须4字节对齐
|
||||||
typedef struct SYS_CONF{
|
typedef struct SYS_CONF{
|
||||||
uint16_t VERSION; // 软件版本号
|
uint16_t VERSION; // 软件版本号
|
||||||
|
uint8_t Modbus_addr; // MODBUS地址
|
||||||
uint8_t Manager_sLim; // 管理员模式油门极限(Unit:%)
|
uint8_t Manager_sLim; // 管理员模式油门极限(Unit:%)
|
||||||
uint8_t Tourist_sLim; // 游客模式油门极限
|
uint8_t Tourist_sLim; // 游客模式油门极限
|
||||||
uint8_t Speed_Cut_sLim; // 减速油门极限(Unit:%)(自动减速时油门极限)
|
uint8_t Speed_Cut_sLim; // 减速油门极限(Unit:%)(自动减速时油门极限)
|
||||||
uint8_t Reserve; // 保留凑足4字节对齐
|
|
||||||
uint16_t Brake_DLimit; // 刹车距离极限(前进)(Unit:mm)
|
uint16_t Brake_DLimit; // 刹车距离极限(前进)(Unit:mm)
|
||||||
uint16_t Speed_Cut_DLimit; // 减速距离极限
|
uint16_t Speed_Cut_DLimit; // 减速距离极限
|
||||||
uint16_t Brake_DLimit_B; // 刹车距离极限(后退)
|
uint16_t Brake_DLimit_B; // 刹车距离极限(后退)
|
||||||
|
@ -35,7 +35,8 @@ extern BAT_Message_t BAT_Message;
|
||||||
void write_cfg(SYS_CONF_t *sys_config_info_t);
|
void write_cfg(SYS_CONF_t *sys_config_info_t);
|
||||||
// 读配置
|
// 读配置
|
||||||
uint8_t read_cfg(SYS_CONF_t *sys_config_info_t);
|
uint8_t read_cfg(SYS_CONF_t *sys_config_info_t);
|
||||||
|
// 初始化配置
|
||||||
|
void conf_init(void);
|
||||||
|
|
||||||
|
|
||||||
// 油门ADC
|
// 油门ADC
|
||||||
|
@ -49,7 +50,8 @@ uint8_t read_cfg(SYS_CONF_t *sys_config_info_t);
|
||||||
|
|
||||||
/**************************系统版本**************************/
|
/**************************系统版本**************************/
|
||||||
// 软件本号
|
// 软件本号
|
||||||
#define SOFTWARE_ID 0x0101
|
#define SOFTWARE_ID 0x0102
|
||||||
|
#define D_Modbus_addr 0x01
|
||||||
/************************油门(Unit:%)************************/
|
/************************油门(Unit:%)************************/
|
||||||
// 管理员模式默认油门极限(0-100%)
|
// 管理员模式默认油门极限(0-100%)
|
||||||
#define D_Manager_sLim 100
|
#define D_Manager_sLim 100
|
||||||
|
|
Loading…
Reference in New Issue