This commit is contained in:
2026-01-30 17:04:39 +08:00
parent b94a28aacf
commit ef112855bf
30 changed files with 2786 additions and 4505 deletions

View File

@@ -92,7 +92,7 @@ int main(void)
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
App_Init();
app_init();
/* USER CODE END 2 */
/* Infinite loop */
@@ -102,7 +102,7 @@ int main(void)
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
App_Task();
app_task();
}
/* USER CODE END 3 */
}

View File

@@ -23,7 +23,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "os_timer.h"
#include "app_timer.h"
#include "bsp_Uart.h"
/* USER CODE END Includes */
@@ -194,12 +194,12 @@ void PendSV_Handler(void)
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
OsTimer_Increment(1);
COM_Uart1.Rx_TimeIncrementInt(&COM_Uart1,1);
COM_Uart2.Rx_TimeIncrementInt(&COM_Uart2,1);
COM_Uart4.Rx_TimeIncrementInt(&COM_Uart4,1);
app_timer.increment_int(1);
com_uart1.rx_time_increment_int(&com_uart1,1);
com_uart2.rx_time_increment_int(&com_uart2,1);
com_uart4.rx_time_increment_int(&com_uart4,1);
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */
@@ -277,7 +277,7 @@ void USART1_IRQHandler(void)
// if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE))
// {
// __HAL_UART_CLEAR_IDLEFLAG(&huart1);
// COM_Uart1.Rx_IdleInt(&COM_Uart1);
// com_uart1.Rx_IdleInt(&com_uart1);
// }
// /* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
@@ -295,7 +295,7 @@ void USART2_IRQHandler(void)
// if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE))
// {
// __HAL_UART_CLEAR_IDLEFLAG(&huart2);
// COM_Uart2.Rx_IdleInt(&COM_Uart2);
// com_uart2.Rx_IdleInt(&com_uart2);
// }
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
@@ -313,7 +313,7 @@ void UART4_IRQHandler(void)
// if (__HAL_UART_GET_FLAG(&huart4, UART_FLAG_IDLE))
// {
// __HAL_UART_CLEAR_IDLEFLAG(&huart4);
// COM_Uart4.Rx_IdleInt(&COM_Uart4);
// com_uart4.Rx_IdleInt(&com_uart4);
// }
/* USER CODE END UART4_IRQn 0 */
HAL_UART_IRQHandler(&huart4);

View File

@@ -10,7 +10,7 @@
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<tExt>*.txt; *.h; *.inc; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
@@ -117,6 +117,25 @@
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
@@ -140,7 +159,7 @@
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>0</viewmode>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
@@ -283,7 +302,7 @@
<Group>
<GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@@ -483,7 +502,7 @@
<Group>
<GroupName>Drivers/CMSIS</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@@ -526,8 +545,8 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\os_timer.c</PathWithFileName>
<FilenameWithoutPath>os_timer.c</FilenameWithoutPath>
<PathWithFileName>..\usr\app\gas_data.c</PathWithFileName>
<FilenameWithoutPath>gas_data.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@@ -538,8 +557,32 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\gas_data.c</PathWithFileName>
<FilenameWithoutPath>gas_data.c</FilenameWithoutPath>
<PathWithFileName>..\usr\app\app_timer.c</PathWithFileName>
<FilenameWithoutPath>app_timer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\app_leakage.c</PathWithFileName>
<FilenameWithoutPath>app_leakage.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\app_com.c</PathWithFileName>
<FilenameWithoutPath>app_com.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@@ -553,7 +596,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -573,7 +616,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -585,7 +628,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -597,19 +640,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\bsp_Uart.c</PathWithFileName>
<FilenameWithoutPath>bsp_Uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -621,7 +652,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -633,7 +664,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -645,25 +676,33 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\tjc_usart_hmi.c</PathWithFileName>
<FilenameWithoutPath>tjc_usart_hmi.c</FilenameWithoutPath>
<PathWithFileName>..\usr\bsp\bsp_uart.c</PathWithFileName>
<FilenameWithoutPath>bsp_uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>gui</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>36</FileNumber>
<FileType>5</FileType>
<GroupNumber>8</GroupNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\tjc_usart_hmi.h</PathWithFileName>
<FilenameWithoutPath>tjc_usart_hmi.h</FilenameWithoutPath>
<PathWithFileName>..\usr\gui\gui_tjc_hmi.c</PathWithFileName>
<FilenameWithoutPath>gui_tjc_hmi.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@@ -676,8 +715,8 @@
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>37</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -688,8 +727,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>38</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -700,8 +739,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>39</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -712,8 +751,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>40</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@@ -10,14 +10,14 @@
<TargetName>CalibBoard</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STM32F407VGTx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F4xx_DFP.2.15.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
@@ -185,6 +185,7 @@
<uocXRam>0</uocXRam>
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@@ -338,7 +339,7 @@
<MiscControls></MiscControls>
<Define>USE_HAL_DRIVER,STM32F407xx</Define>
<Undefine></Undefine>
<IncludePath>../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../usr/algo;../usr/app;../usr/bsp;../usr/protocol</IncludePath>
<IncludePath>../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../usr/algo;../usr/app;../usr/bsp;../usr/protocol;..\usr\gui</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -351,7 +352,7 @@
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<uClangAs>0</uClangAs>
<ClangAsOpt>4</ClangAsOpt>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@@ -527,16 +528,26 @@
<FileType>1</FileType>
<FilePath>..\usr\app\app.c</FilePath>
</File>
<File>
<FileName>os_timer.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\app\os_timer.c</FilePath>
</File>
<File>
<FileName>gas_data.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\app\gas_data.c</FilePath>
</File>
<File>
<FileName>app_timer.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\app\app_timer.c</FilePath>
</File>
<File>
<FileName>app_leakage.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\app\app_leakage.c</FilePath>
</File>
<File>
<FileName>app_com.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\app\app_com.c</FilePath>
</File>
</Files>
</Group>
<Group>
@@ -562,11 +573,6 @@
<FileType>1</FileType>
<FilePath>..\usr\bsp\bsp_Led.c</FilePath>
</File>
<File>
<FileName>bsp_Uart.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\bsp\bsp_Uart.c</FilePath>
</File>
<File>
<FileName>bsp_Wdg.c</FileName>
<FileType>1</FileType>
@@ -583,14 +589,19 @@
<FilePath>..\usr\bsp\bsp_Flash.c</FilePath>
</File>
<File>
<FileName>tjc_usart_hmi.c</FileName>
<FileName>bsp_uart.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\bsp\tjc_usart_hmi.c</FilePath>
<FilePath>..\usr\bsp\bsp_uart.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>gui</GroupName>
<Files>
<File>
<FileName>tjc_usart_hmi.h</FileName>
<FileType>5</FileType>
<FilePath>..\usr\bsp\tjc_usart_hmi.h</FilePath>
<FileName>gui_tjc_hmi.c</FileName>
<FileType>1</FileType>
<FilePath>..\usr\gui\gui_tjc_hmi.c</FilePath>
</File>
</Files>
</Group>
@@ -639,4 +650,13 @@
<files/>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>CalibBoard</LayName>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -11,11 +11,5 @@
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "stm32f4xx.h"
#endif /* RTE_COMPONENTS_H */

View File

@@ -1,5 +1,5 @@
#include "app.h"
#include "os_timer.h"
#include "app_timer.h"
#include "stdio.h"
#include "string.h"
@@ -8,21 +8,37 @@
#include "bsp_Led.h"
#include "bsp_74HC4067.h"
#include "bsp_Flash.h"
#include "tjc_usart_hmi.h"
#include "proto_modbus_master_tdlas.h"
#include "proto_modbus_slave_ex.h"
#include "gui_tjc_hmi.h"
const char *HwVersion = "V1.0";
char SwVersion[24] = "V0.001.0";
void TASK_Idle(void);
void Task_10ms(void);
void Task_50ms(void);
void Task_100ms(void);
void Task_200ms(void);
void Task_500ms(void);
void Task_1s(void);
void Task_2s(void);
void task_idle(void);
void task_10ms(void);
void task_50ms(void);
void task_100ms(void);
void task_200ms(void);
void task_500ms(void);
void task_1s(void);
void task_2s(void);
#define APP_TIMER_TASK_NUM (sizeof(app_timer_task) / sizeof(app_timer_class_t))
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
app_timer_class_t app_timer_task[] =
{
{0, 1, 1, task_idle }, /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱִ<D6B1><D6B4>*/
{0, 3, 10, task_10ms },
{0, 7, 50, task_50ms },
{0, 11, 100, task_100ms },
{0, 13, 200, task_200ms },
{0, 17, 500, task_500ms },
{0, 19, 1000, task_1s },
{0, 23, 2000, task_2s },
};
/******************************************
* <20><><EFBFBD><EFBFBD>: AppInit
@@ -31,114 +47,75 @@ void Task_2s(void);
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
******************************************/
void App_Init(void)
void app_init(void)
{
Usr_Flash.Init();
COM_Uart1.Init(&COM_Uart1);
COM_Uart2.Init(&COM_Uart2);
COM_Uart4.Init(&COM_Uart4);
Led.Init();
UartCH_Config.init();
/*<2A><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>*/
com_uart1.init(&com_uart1);
com_uart2.init(&com_uart2);
com_uart4.init(&com_uart4);
UartCH_Config.init();
tdlas.init();
modbus_slave_ex.init();
TJC_Init(&COM_Uart2);
initRingBuffer();
char init_msg[] = "ϵͳ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>...\r\n";
HAL_UART_Transmit(COM_Uart2.Uart, (uint8_t*)init_msg, strlen(init_msg), 100);
app_timer.init(APP_TIMER_TASK_NUM,app_timer_task); /*<2A><>ʱ<EFBFBD><CAB1><EFBFBD>ã<EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC>ѯ*/
tjc_hmi.init();
led.init();
//Wdg.Init();
}
/******************************************
* <20><><EFBFBD><EFBFBD>: App_Task
* <20><><EFBFBD><EFBFBD>: App_task
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>ѭ<EFBFBD><D1AD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
******************************************/
void App_Task(void)
void app_task(void)
{
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_10ms, osTime_MSecTick, 10))
{
OsTimeTick_10ms = osTime_MSecTick;
Task_10ms();
}
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_50ms, osTime_MSecTick, 50))
{
OsTimeTick_50ms = osTime_MSecTick;
Task_50ms();
}
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_100ms, osTime_MSecTick, 100))
{
OsTimeTick_100ms = osTime_MSecTick;
Task_100ms();
}
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_200ms, osTime_MSecTick, 200))
{
OsTimeTick_200ms = osTime_MSecTick;
Task_200ms();
}
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_500ms, osTime_MSecTick, 500))
{
OsTimeTick_500ms = osTime_MSecTick;
Task_500ms();
}
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_1s, osTime_MSecTick, 1000))
{
OsTimeTick_1s = osTime_MSecTick;
Task_1s();
}
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_2s, osTime_MSecTick, 2000))
{
OsTimeTick_2s = osTime_MSecTick;
Task_2s();
}
TASK_Idle();
app_timer.task();
task_idle();
}
/*<2A><><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>*/
void TASK_Idle(void)
void task_idle(void)
{
COM_Uart1.Rx_Task(&COM_Uart1);
COM_Uart2.Rx_Task(&COM_Uart2);
COM_Uart4.Rx_Task(&COM_Uart4);
com_uart1.rx_task(&com_uart1);
com_uart2.rx_task(&com_uart2);
com_uart4.rx_task(&com_uart4);
}
void Task_10ms(void)
void task_10ms(void)
{
}
void Task_50ms(void)
void task_50ms(void)
{
// tdlas.tx_task();
}
void Task_100ms(void)
void task_100ms(void)
{
// tdlas.tx_task();
}
void Task_200ms(void)
void task_200ms(void)
{
}
void Task_500ms(void)
void task_500ms(void)
{
// UartCH_Config.ch_set(ch);
// tdlas.tx_task();
Led.Flash();
led.task();
}
void Task_1s(void)
void task_1s(void)
{
}
void Task_2s(void)
void task_2s(void)
{
}

View File

@@ -4,7 +4,12 @@
extern const char *HwVersion;
extern char SwVersion[24];
void App_Init(void);
void App_Task(void);
void app_init(void);
void app_task(void);
#endif

View File

@@ -0,0 +1,7 @@
#include "app_com.h"

View File

@@ -0,0 +1,28 @@
#ifndef _APP_COM_H_
#define _APP_COM_H_
#include "main.h"
#include "app_leakage.h"
#include "bsp_uart.h"
#define APP_COM_NUM (4)
typedef struct
{
u8 baudrate; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}app_com_flash_data_t;
typedef struct
{
app_com_flash_data_t flash_data; /*flash<73><68><EFBFBD><EFBFBD>*/
u16 device_num; /*<2A>󶨵<EFBFBD><F3B6A8B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
u8 device_index[APP_LEAKAGE_SUB_DEVICE_NUM]; /*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
bsp_uart_t *uart; /*<2A>󶨵<EFBFBD><F3B6A8B5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>*/
}app_com_class_t;
typedef struct
{
app_com_class_t com_class[APP_COM_NUM];
}app_com_t;
#endif

View File

@@ -0,0 +1,100 @@
#include "app_leakage.h"
#include <string.h>
app_leakage_t leakage =
{
};
app_leakage_t *p_leakage = &leakage;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A3AC>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ֵ<EFBFBD>һ<EFBFBD><D2BB>*/
static void app_leakage_region_classify(void)
{
u16 i,j;
u8 add_region_flag;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
p_leakage->region_num = 0;
p_leakage->sub_device_num = 0;
memset(p_leakage->region_data,0,sizeof(p_leakage->region_data));
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ*/
for(i=0;i<APP_LEAKAGE_SUB_DEVICE_NUM;i++)
{
add_region_flag = 1; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A>ʹ<E8B1B8><CAB9>*/
if(ENABLE == p_leakage->sub_device_data[i].flash_data.state)
{
p_leakage->sub_device_num++;/*<2A><>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
for(j=0;j<APP_LEAKAGE_SUB_DEVICE_NUM;j++)
{
if(0 == memcmp(p_leakage->region_data[j].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN))/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ*/
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/
p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
p_leakage->region_data[j].leakage_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
add_region_flag = 0;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
break;
}
}
/*û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>*/
if(add_region_flag)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
memcpy(p_leakage->region_data[p_leakage->region_num].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN);
p_leakage->region_data[p_leakage->region_num].sub_device_index[p_leakage->region_data[p_leakage->region_num].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
p_leakage->region_data[p_leakage->region_num].leakage_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
p_leakage->region_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
}
}
}
}
/*<2A>쳣״̬<D7B4><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>*/
void app_leakage_task(void)
{
u16 i,j,k,sub_device_index;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
for(i=0;i<p_leakage->region_num;i++)
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸*/
p_leakage->region_data[i].leakage_num = 0;
p_leakage->region_data[i].open_num = 0;
p_leakage->region_data[i].time_out_num = 0;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/
for(j=0;j<p_leakage->region_data[i].leakage_num;j++)
{
/*<2A><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>*/
sub_device_index = p_leakage->region_data[i].sub_device_index[j];
/*<2A><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>*/
for(k=0;k<APP_LEAKAGE_SUB_DEVICE_CH_NUM;k++)
{
/*ͨѶ<CDA8><D1B6>ʱ*/
if(p_leakage->sub_device_data[sub_device_index].ch_data[k].state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
{
p_leakage->region_data[i].time_out_num++;
break;
}
/*<2A>ϴ<EFBFBD>*/
else if(p_leakage->sub_device_data[sub_device_index].ch_data[k].state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
{
p_leakage->region_data[i].open_num++;
break;
}
/*©Һ*/
else if(p_leakage->sub_device_data[sub_device_index].ch_data[k].state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
{
p_leakage->region_data[i].leakage_num++;
break;
}
}
}
}
}

View File

@@ -0,0 +1,62 @@
#ifndef _APP_LEAKAGE_H_
#define _APP_LEAKAGE_H_
#include "main.h"
#define ENABLE (1)
#define DISABLE (0)
#define APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE (0x0001) /*©Һ״̬*/
#define APP_LEAKAGE_SUB_DEVICE_STATE_OPEN (0x0002) /*<2A>ϴ<EFBFBD>״̬*/
#define APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT (0xf000) /*ͨѶ<CDA8><D1B6>ʱ*/
#define APP_LEAKAGE_STRING_NANE_LEN (10)
#define APP_LEAKAGE_SUB_DEVICE_NUM (32)
#define APP_LEAKAGE_SUB_DEVICE_CH_NUM (4)
/*<2A><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>*/
typedef struct
{
u8 state; /*״̬ ʹ<><CAB9> <20><>ʹ<EFBFBD><CAB9>*/
u8 com_port; /*<2A>˿<EFBFBD>*/
u8 modbus_id; /*modbus id*/
u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><EFBFBD><E8B1B8>*/
u8 region_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}app_leakage_sub_device_flash_data_t;
/*<2A><><EFBFBD><EFBFBD><E8B1B8>Ϣ*/
typedef struct
{
app_leakage_sub_device_flash_data_t flash_data; /*flash<73><EFBFBD><E6B4A2><EFBFBD><EFBFBD>*/
struct
{
u16 state; /*״̬*/
u16 distance; /*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
}ch_data[APP_LEAKAGE_SUB_DEVICE_CH_NUM]; /*ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}app_leakage_sub_device_class_t;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
typedef struct
{
u8 leakage_num; /*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
u8 open_num; /*<2A>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>*/
u8 time_out_num; /*ͨѶ<CDA8><D1B6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
u8 sub_device_num; /*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
u8 name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
u8 sub_device_index[APP_LEAKAGE_SUB_DEVICE_NUM]; /*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}app_leakage_region_data_class_t;
typedef struct
{
u8 region_num;
u8 sub_device_num;
app_leakage_region_data_class_t region_data[APP_LEAKAGE_SUB_DEVICE_NUM];
app_leakage_sub_device_class_t sub_device_data[APP_LEAKAGE_SUB_DEVICE_NUM];
void (*init)(void); /*<2A><>ʼ<EFBFBD><CABC>*/
void (*task)(void); /*ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}app_leakage_t;
extern app_leakage_t leakage;
#endif

View File

@@ -0,0 +1,195 @@
#include "app_timer.h"
#include "app.h"
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static void app_timer_task(void);
static void app_timer_init(u8 task_num, app_timer_class_t *p_timer_class);
static void app_timer_task_increment_int(u16 ms_tick);
/******************************************
* <20><EFBFBD><E1B9B9>: app_timer
* <20><><EFBFBD><EFBFBD>: Ӧ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>ʵ<EFBFBD><CAB5>
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ƽ<C6BD><E1B9B9><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>ʵ<EFBFBD><CAB5>
*******************************************/
app_timer_t app_timer =
{
.p_timer_class = NULL,
.init = app_timer_init,
.task = app_timer_task,
.increment_int = app_timer_task_increment_int,
};
/* ȫ<><C8AB>ָ<EFBFBD>룬ָ<EBA3AC><D6B8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E1B9B9> */
app_timer_t *p_app_timer = &app_timer;
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_init
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
* <20><><EFBFBD><EFBFBD>: task_num - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* p_timer_class - <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
static void app_timer_init(u8 task_num, app_timer_class_t *p_timer_class)
{
p_app_timer->task_num = task_num;
p_app_timer->p_timer_class = p_timer_class;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_task
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
static void app_timer_task(void)
{
u16 i;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if(NULL == p_app_timer->p_timer_class)
{
return;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
for (i = 0; i < p_app_timer->task_num; i++)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫִ<D2AA><D6B4> */
if (p_app_timer->p_timer_class[i].run_flag)
{
p_app_timer->p_timer_class[i].run_flag = 0; /* <20><><EFBFBD><EFBFBD>ִ<EFBFBD>б<EFBFBD>־ */
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if (p_app_timer->p_timer_class[i].task == NULL)
{
continue;
}
/* ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
p_app_timer->p_timer_class[i].task();
}
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_task_increment_int
* <20><><EFBFBD><EFBFBD>: <20>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: ms_tick - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ
*******************************************/
static void app_timer_task_increment_int(u16 ms_tick)
{
u16 i;
/* <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD><EBBCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
p_app_timer->ms_tick++;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if(p_app_timer->ms_tick >= 1000)
{
p_app_timer->s_tick++;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if(NULL == p_app_timer->p_timer_class)
{
return;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
for (i = 0; i < p_app_timer->task_num; i++)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if (p_app_timer->p_timer_class[i].timer_count)
{
p_app_timer->p_timer_class[i].timer_count--;
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ񵽴<C7B7><F1B5BDB4><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1> */
if (p_app_timer->p_timer_class[i].timer_count == 0)
{
p_app_timer->p_timer_class[i].run_flag = 1;
p_app_timer->p_timer_class[i].timer_count = p_app_timer->p_timer_class[i].timer_reload;
}
}
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_check_time_out
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>鳬ʱ
* <20><><EFBFBD><EFBFBD>: time_start - <20><>ʱ<EFBFBD><CAB1>ʼʱ<CABC><CAB1>
* time_now - <20><>ǰʱ<C7B0><CAB1>
* time_out - <20><>ʱʱ<CAB1><CAB1>
* <20><><EFBFBD><EFBFBD>: TIME_TRUE - <20>ѳ<EFBFBD>ʱ<EFBFBD><CAB1>TIME_FALSE - δ<><CEB4>ʱ
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time_start<72><74>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>time_outʱ<74><CAB1><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ<EFBFBD><CAB1>
* <20><><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
u8 app_timer_check_time_out(u16 time_start, u16 time_now, u16 time_out)
{
u16 timer_activate_val;
/* <20><><EFBFBD><EFBFBD><E3B4A5>ʱ<EFBFBD><CAB1> */
timer_activate_val = time_out + time_start;
/* <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (timer_activate_val > time_start)
{
/* δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if ((time_now >= timer_activate_val) || (time_now < time_start))
{
return TIME_TRUE;
}
}
else if ((time_now >= timer_activate_val) && (time_now < time_start))
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
return TIME_TRUE;
}
return TIME_FALSE;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: app_timer_check_run_time
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
* <20><><EFBFBD><EFBFBD>: time_start - <20><>ʱ<EFBFBD><CAB1>ʼʱ<CABC><CAB1>
* time_now - <20><>ǰʱ<C7B0><CAB1>
* time_out - <20><>ʱʱ<CAB1><CAB1>
* <20><><EFBFBD><EFBFBD>: ʣ<><CAA3>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>app_timer_check_time_out<75><74><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>볬ʱ<EBB3AC><CAB1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
u16 app_timer_check_run_time(u16 time_start, u16 time_now, u16 time_out)
{
u16 timer_activate_val;
/* <20><><EFBFBD><EFBFBD><E3B4A5>ʱ<EFBFBD><CAB1> */
timer_activate_val = time_out + time_start;
/* <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (timer_activate_val > time_start)
{
/* δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1> */
return (timer_activate_val - time_now);
}
else
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1> */
return (65535U - time_now + timer_activate_val);
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: delay_ms
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ʱ
* <20><><EFBFBD><EFBFBD>: delay - <20><>ʱʱ<CAB1><EFBFBD><E4A3A8><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: ʹ<><CAB9>HAL<41><4C><EFBFBD><EFBFBD><E1B9A9><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ʱ
*******************************************/
void delay_ms(u16 delay)
{
HAL_Delay(delay);
}

View File

@@ -0,0 +1,48 @@
#ifndef _APP_TIMER_H_
#define _APP_TIMER_H_
#include "main.h"
/* ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD>غ궨<D8BA><EAB6A8> */
#define TIME_TRUE 1U /* ʱ<><CAB1><EFBFBD>ѵ<EFBFBD> */
#define TIME_FALSE 0U /* ʱ<><CAB1>δ<EFBFBD><CEB4> */
/******************************************
* <20><EFBFBD><E1B9B9>: app_timer_class_t
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><EFBFBD><E1B9B9>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><E5B5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
*******************************************/
typedef struct
{
u8 run_flag; /* <20><><EFBFBD>ȱ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u16 timer_count; /* ʱ<><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ֵ */
u16 timer_reload; /* ʱ<><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ֵ */
void (*task)(void); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
} app_timer_class_t;
/******************************************
* <20><EFBFBD><E1B9B9>: app_timer_t
* <20><><EFBFBD><EFBFBD>: Ӧ<>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E1B9B9>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
*******************************************/
typedef struct
{
u16 ms_tick; /* <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EBBCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u16 s_tick; /* <20>δ<EFBFBD><CEB4><EFBFBD><EBBCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u16 task_num; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
app_timer_class_t *p_timer_class; /* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*init)(u8, app_timer_class_t *); /* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*task)(void); /* <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*increment_int)(u16); /* <20>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
} app_timer_t;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u8 app_timer_check_time_out(u16 time_start, u16 time_now, u16 time_out);
u16 app_timer_check_run_time(u16 time_start, u16 time_now, u16 time_out);
void delay_ms(u16 delay);
/* <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> */
extern app_timer_t app_timer;
#endif

View File

@@ -1,121 +0,0 @@
#include "os_timer.h"
unsigned short osTime_MSecTick = 0; /*<2A>δ<EFBFBD>ʱ<EFBFBD><CAB1>*/
unsigned short osTime_SecTick = 0;
unsigned short osTime_10SecTick = 0; /*10s<30><73>һ<EFBFBD><D2BB> <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>¼*/
static unsigned short osTimer_MSec1 = 0;
static unsigned short osTimer_MSec2 = 0;
unsigned short OsTimeTick_10ms;
unsigned short OsTimeTick_50ms;
unsigned short OsTimeTick_100ms;
unsigned short OsTimeTick_200ms;
unsigned short OsTimeTick_500ms;
unsigned short OsTimeTick_1s;
unsigned short OsTimeTick_2s;
/****************************************************************************
* NAME: OsTimer_Init
* CALLED BY: Application
* PRECONDITIONS:
* INPUT PARAMETERS: None
* RETURN VALUES: None
* DESCRIPTION: OsTimer initialization
*
****************************************************************************/
void OsTimer_Init(void)
{
osTimer_MSec1 = 0;
osTimer_MSec2 = 0;
osTime_SecTick = 0;
osTime_MSecTick = 0;
OsTimeTick_10ms = osTime_MSecTick;
OsTimeTick_50ms = osTime_MSecTick;
OsTimeTick_100ms = osTime_MSecTick;
OsTimeTick_200ms = osTime_MSecTick;
OsTimeTick_500ms = osTime_MSecTick;
OsTimeTick_1s = osTime_MSecTick;
}
/****************************************************************************
* NAME: OsTimer_Increment
* CALLED BY: ISR
* PRECONDITIONS:
* INPUT PARAMETERS: msec - millisecond to increase
* RETURN VALUES: None
* DESCRIPTION: Increase the Timer
*
****************************************************************************/
void OsTimer_Increment(unsigned short msec)
{
osTime_MSecTick += msec;
osTimer_MSec1 += msec;
osTimer_MSec2 += msec;
if (osTimer_MSec1 >= 1000U) /*1s*/
{
osTimer_MSec1 = 0U;
osTime_SecTick++;
}
if (osTimer_MSec2 >= 10000U) /*10s*/
{
osTimer_MSec2 = 0U;
osTime_10SecTick++;
}
}
/****************************************************************************
* NAME: OsTimer_CheckTimeOut
* CALLED BY: Application
* PRECONDITIONS:
* INPUT PARAMETERS: timeStart - start tick
* timeNow - current tick
* timeOut - expired tick
* RETURN VALUES: whether timer is expired
* DESCRIPTION: check if specified time is expired
*
****************************************************************************/
unsigned char OsTimer_CheckTimeOut(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut)
{
unsigned short timerActivateVal;
timerActivateVal = timeOut + timeStart;
if (timerActivateVal > timeStart)
{
if ((timeNow >= timerActivateVal) || (timeNow < timeStart))
{
return TIME_TRUE;
}
}
else if ((timeNow >= timerActivateVal) && (timeNow < timeStart))
{
return TIME_TRUE;
}
return TIME_FALSE;
}
/*
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>OsTimer_CheckTimeOut<75><74><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
*/
unsigned short OsTimer_CheckRunTime(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut)
{
unsigned short timerActivateVal;
timerActivateVal = timeOut + timeStart;
if (timerActivateVal > timeStart)
{
return (timerActivateVal - timeNow);
}
else
{
return (65535U - timeNow + timerActivateVal);
}
}
/*<2A><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ʱ*/
void Delay_ms(unsigned short delay)
{
HAL_Delay(delay);
}

View File

@@ -1,29 +0,0 @@
#ifndef _OSTIMER_H_
#define _OSTIMER_H_
#include "main.h"
#define TIME_TRUE 1U
#define TIME_FALSE 0U
extern unsigned short osTime_MSecTick;
extern unsigned short osTime_SecTick;
extern unsigned short osTime_10SecTick; // 10s<30><73>һ<EFBFBD><D2BB> <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>¼
extern unsigned short OsTimeTick_10ms;
extern unsigned short OsTimeTick_50ms;
extern unsigned short OsTimeTick_100ms;
extern unsigned short OsTimeTick_200ms;
extern unsigned short OsTimeTick_500ms;
extern unsigned short OsTimeTick_1s;
extern unsigned short OsTimeTick_2s;
void OsTimer_Init(void);
void OsTimer_Increment(unsigned short msec);
unsigned char OsTimer_CheckTimeOut(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut);
unsigned short OsTimer_CheckRunTime(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut);
void Delay_ms(unsigned short delay);
#endif

View File

@@ -1,5 +1,4 @@
#include "bsp_74HC4067.h"
#include "os_timer.h"
/*<2A><>Ƭ74HC4067<36><37>һƬTX һƬRX ÿƬ16ͨ<36><CDA8>*/

View File

@@ -1,5 +1,5 @@
#include "bsp_Led.h"
#include "os_timer.h"
#include "app_timer.h"
#define LED1_ON HAL_GPIO_WritePin (LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET)
#define LED1_OFF HAL_GPIO_WritePin (LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET)
@@ -14,25 +14,25 @@
#define LED3_TOGGLE HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin)
static void bsp_Led_Init(void);
static void bsp_Led_Flash(void);
static void bsp_led_init(void);
static void bsp_led_task(void);
bsp_Led_t Led =
bsp_led_t led =
{
.Init = bsp_Led_Init,
.Flash = bsp_Led_Flash,
.init = bsp_led_init,
.task = bsp_led_task,
};
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void bsp_Led_Init(void)
static void bsp_led_init(void)
{
for(u8 i = 0;i < 20;i++)
{
Delay_ms(50);
delay_ms(50);
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
}
static void bsp_Led_Flash(void)
static void bsp_led_task(void)
{
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}

View File

@@ -6,10 +6,10 @@
typedef struct
{
void (*Init)(void);
void (*Flash)(void);
}bsp_Led_t;
void (*init)(void);
void (*task)(void);
}bsp_led_t;
extern bsp_Led_t Led;
extern bsp_led_t led;
#endif

View File

@@ -1,396 +0,0 @@
#include "bsp_Uart.h"
#include "string.h"
//#define RS485_RX HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_RESET)
#define RS485_RX HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_SET)
#define RS485_TX HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_SET)
/*<2A><><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>*/
#define RX_TEMP_BUFF_NUM (3000U)
u8 Rx_Temp_Buff[RX_TEMP_BUFF_NUM];
#define UART1_TX_LEN (3000U)
#define UART1_RX_LEN (3000U)
#define UART2_TX_LEN (3000U)
#define UART2_RX_LEN (3000U)
#define UART4_TX_LEN (3000U)
#define UART4_RX_LEN (3000U)
u8 Uart1_TX_Buff[UART1_TX_LEN];
u8 Uart1_Rx_Buff[UART1_RX_LEN];
u8 Uart2_TX_Buff[UART2_TX_LEN];
u8 Uart2_Rx_Buff[UART2_RX_LEN];
u8 Uart4_TX_Buff[UART4_TX_LEN];
u8 Uart4_Rx_Buff[UART4_RX_LEN];
static void bsp_Uart_Init(bsp_Uart_t *p_Uart);
static void bsp_Uart_Send(bsp_Uart_t *p_Uart,u8 *pData, u16 Len);
static void bsp_Uart_Rx_IdleInt(bsp_Uart_t *p_Uart);
static void bsp_Uart_Rx_TimeIncrement(bsp_Uart_t *p_Uart,u16 Time);
static void bsp_Uart_Rx_Task(bsp_Uart_t *p_Uart);
static void bsp_Uart_Rx_TimeStart(bsp_Uart_t *p_Uart);
static void bsp_Uart_Tx_DMA_TCInt(bsp_Uart_t *p_Uart);
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart4;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern DMA_HandleTypeDef hdma_usart2_tx;
extern DMA_HandleTypeDef hdma_uart4_rx;
extern DMA_HandleTypeDef hdma_uart4_tx;
bsp_Uart_t COM_Uart1 =
{
.RxQueue = queue(u8,UART1_RX_LEN),
.Uart =&huart1,
.Tx_DMA = &hdma_usart1_tx,
.Rx_DMA = &hdma_usart1_rx,
.Tx_DMA_Len = UART1_TX_LEN,
.Rx_DMA_Len = UART1_RX_LEN,
.Tx_Addr = &Uart1_TX_Buff[0],
.Rx_Addr = &Uart1_Rx_Buff[0],
.Tx_DMA_CompleteFlag = 1,
.Rx_TimeOver = 0,
.relay.uart = NULL,
.Init = bsp_Uart_Init,
.Send = bsp_Uart_Send,
.Tx_DMA_TCInt = bsp_Uart_Tx_DMA_TCInt,
.Rx_IdleInt = bsp_Uart_Rx_IdleInt,
.Rx_TimeIncrementInt = bsp_Uart_Rx_TimeIncrement,
.Rx_DataAnalysis = NULL,
.Rx_Task = bsp_Uart_Rx_Task,
};
bsp_Uart_t COM_Uart2 =
{
.RxQueue = queue(u8,UART2_RX_LEN),
.Uart =&huart2,
.Tx_DMA = &hdma_usart2_tx,
.Rx_DMA = &hdma_usart2_rx,
.Tx_DMA_Len = UART2_TX_LEN,
.Rx_DMA_Len = UART2_RX_LEN,
.Tx_Addr = &Uart2_TX_Buff[0],
.Rx_Addr = &Uart2_Rx_Buff[0],
.Tx_DMA_CompleteFlag = 1,
.Rx_TimeOver = 0,
.relay.uart = &COM_Uart4,
.Init = bsp_Uart_Init,
.Send = bsp_Uart_Send,
.Tx_DMA_TCInt = bsp_Uart_Tx_DMA_TCInt,
.Rx_IdleInt = bsp_Uart_Rx_IdleInt,
.Rx_TimeIncrementInt = bsp_Uart_Rx_TimeIncrement,
.Rx_DataAnalysis = NULL,
.Rx_Task = bsp_Uart_Rx_Task,
};
bsp_Uart_t COM_Uart4 =
{
.RxQueue = queue(u8,UART4_RX_LEN),
.Uart =&huart4,
.Tx_DMA = &hdma_uart4_tx,
.Rx_DMA = &hdma_uart4_rx,
.Tx_DMA_Len = UART4_TX_LEN,
.Rx_DMA_Len = UART4_RX_LEN,
.Tx_Addr = &Uart4_TX_Buff[0],
.Rx_Addr = &Uart4_Rx_Buff[0],
.Tx_DMA_CompleteFlag = 1,
.Rx_TimeOver = 0,
.relay.uart = NULL,
.Init = bsp_Uart_Init,
.Send = bsp_Uart_Send,
.Tx_DMA_TCInt = bsp_Uart_Tx_DMA_TCInt,
.Rx_IdleInt = bsp_Uart_Rx_IdleInt,
.Rx_TimeIncrementInt = bsp_Uart_Rx_TimeIncrement,
.Rx_DataAnalysis = NULL,
.Rx_Task = bsp_Uart_Rx_Task,
};
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static void bsp_Uart_Init(bsp_Uart_t *p_Uart)
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
//p_Uart->Rx_DataAnalysis = NULL;
/* <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ж<EFBFBD> */
__HAL_UART_ENABLE_IT(p_Uart->Uart, UART_IT_IDLE);
/* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD> */
//HAL_UART_Receive_DMA(p_Uart->Uart, p_Uart->Rx_Addr, p_Uart->Rx_DMA_Len);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
HAL_UARTEx_ReceiveToIdle_DMA(p_Uart->Uart, p_Uart->Rx_Addr, p_Uart->Rx_DMA_Len);
}
static void bsp_Uart_DMASend(bsp_Uart_t *p_Uart,u8 *pData, u16 Len)
{
u32 tickstart,tick;
p_Uart->Tx_DMA_CompleteFlag = 0;
if(p_Uart->Tx_DMA_Len < Len)
Len = p_Uart->Tx_DMA_Len;
memcpy(p_Uart->Tx_Addr, pData, Len); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>*/
// /*<2A><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><E1B5BC><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
// HAL_UART_Transmit(p_Uart->Uart,p_Uart->Tx_Addr,Len,500);
HAL_UART_Transmit_DMA(p_Uart->Uart,p_Uart->Tx_Addr,Len);
tickstart = HAL_GetTick();
while( !p_Uart->Tx_DMA_CompleteFlag)
{
tick = HAL_GetTick();
if((tick - tickstart) > 200) // 1000ms <20><>ʱ
{
p_Uart->Tx_DMA_CompleteFlag = 1;
break;
}
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void bsp_Uart_Send(bsp_Uart_t *p_Uart,u8 *pData, u16 Len)
{
u16 i,SendNum;
if(p_Uart == &COM_Uart4)
RS485_TX;
SendNum = Len / p_Uart->Tx_DMA_Len;
for(i=0;i<SendNum;i++)
{
bsp_Uart_DMASend(p_Uart,&pData[p_Uart->Tx_DMA_Len * i], p_Uart->Tx_DMA_Len);
}
/*<2A><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
Len -= p_Uart->Tx_DMA_Len * i;
if(0 == Len)
{
return ;
}
else
{
bsp_Uart_DMASend(p_Uart,&pData[p_Uart->Tx_DMA_Len * i],Len);
}
}
static void bsp_Uart_Tx_DMA_TCInt(bsp_Uart_t *p_Uart)
{
p_Uart->Tx_DMA_CompleteFlag = 1;
}
/*<2A><><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD>ж<EFBFBD>*/
static void bsp_Uart_Rx_IdleInt(bsp_Uart_t *p_Uart)
{
u16 Rx_Length, i;
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
HAL_UART_DMAStop(p_Uart->Uart);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
Rx_Length = p_Uart->Rx_DMA_Len - __HAL_DMA_GET_COUNTER(p_Uart->Rx_DMA);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> */
if (Rx_Length == 0) {
return;
}
/* <20><><EFBFBD><EFBFBD> */
for (i = 0; i < Rx_Length; i++)
{
queue_push_back(p_Uart->RxQueue, (void *)&p_Uart->Rx_Addr[i]);
}
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> */
bsp_Uart_Rx_TimeStart(p_Uart);
// HAL_UART_Receive_DMA(p_Uart->Uart, p_Uart->Rx_Addr, p_Uart->Rx_DMA_Len);
HAL_UARTEx_ReceiveToIdle_DMA(p_Uart->Uart, p_Uart->Rx_Addr, p_Uart->Rx_DMA_Len);
}
/*<2A>жϼ<D0B6><CFBC><EFBFBD>*/
static void bsp_Uart_Rx_TimeIncrement(bsp_Uart_t *p_Uart,u16 Time)
{
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
if(1 == p_Uart->Rx_StartFlag)
{
p_Uart->Rx_TimeCount += Time;
}
}
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
static void bsp_Uart_Rx_TimeStart(bsp_Uart_t *p_Uart)
{
p_Uart->Rx_StartFlag = 1;
p_Uart->Rx_TimeCount = 0;
}
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
static void bsp_Uart_Rx_TimeStop(bsp_Uart_t *p_Uart)
{
p_Uart->Rx_StartFlag = 0;
p_Uart->Rx_TimeCount = 0;
}
static void bsp_Uart_Rx_Task(bsp_Uart_t *p_Uart)
{
/*<2A><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD>յ<EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>*/
if(p_Uart->Rx_TimeOver < p_Uart->Rx_TimeCount)
{
p_Uart->Rx_Len = queue_size(p_Uart->RxQueue);
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
bsp_Uart_Rx_TimeStop(p_Uart);
if(p_Uart->Rx_Len <= p_Uart->Rx_DMA_Len && (0 != p_Uart->Rx_Len))
{
if(RX_TEMP_BUFF_NUM < p_Uart->Rx_Len)
{
queue_clear(p_Uart->RxQueue);
}
else
{
for(u16 i = 0;i < p_Uart->Rx_Len;i++)
{
queue_pop(p_Uart->RxQueue,&Rx_Temp_Buff[i]);
}
if(NULL != p_Uart->Rx_DataAnalysis)
{
p_Uart->Rx_DataAnalysis(Rx_Temp_Buff,p_Uart->Rx_Len,p_Uart); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}
// p_Uart->Send(p_Uart,Rx_Temp_Buff,p_Uart->Rx_Len);
}
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ORE
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
bsp_Uart_t *p_Uart = NULL;
if (huart->Instance == USART1)
{
p_Uart = &COM_Uart1;
}
else if (huart->Instance == USART2)
{
p_Uart = &COM_Uart2;
}
else if (huart->Instance == UART4)
{
p_Uart = &COM_Uart4;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(huart->ErrorCode & HAL_UART_ERROR_NE)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__HAL_UART_CLEAR_NEFLAG(huart);
}
if(huart->ErrorCode & HAL_UART_ERROR_FE)
{
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
__HAL_UART_CLEAR_FEFLAG(huart);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET)
{
__HAL_UART_CLEAR_OREFLAG(huart); // <20><><EFBFBD><EFBFBD>ORE<52><45>־
}
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET)
{
__HAL_UART_CLEAR_FEFLAG(huart); // <20><><EFBFBD><EFBFBD>ORE<52><45>־
}
//
if(p_Uart != NULL)
{
// HAL_UART_DeInit(huart);
// HAL_UART_Init(huart);
// HAL_UART_DMAStop(p_Uart->Uart);
HAL_UARTEx_ReceiveToIdle_DMA(p_Uart->Uart, p_Uart->Rx_Addr, p_Uart->Rx_DMA_Len);
}
}
// ʵ<>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD>жϻص<CFBB>
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if (huart->Instance == USART1)
{
bsp_Uart_Rx_IdleInt(&COM_Uart1);
}
else if (huart->Instance == USART2)
{
bsp_Uart_Rx_IdleInt(&COM_Uart2);
}
else if (huart->Instance == UART4)
{
bsp_Uart_Rx_IdleInt(&COM_Uart4);
}
}
/* <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB><D8B5><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
// if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE))
// {
// __HAL_UART_CLEAR_IDLEFLAG(huart);
// if (huart->Instance == USART1)
// {
// bsp_Uart_Rx_IdleInt(&COM_Uart1);
// }
// else if (huart->Instance == USART2)
// {
// bsp_Uart_Rx_IdleInt(&COM_Uart2);
// }
// else if (huart->Instance == UART4)
// {
// bsp_Uart_Rx_IdleInt(&COM_Uart4);
// }
// }
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
COM_Uart1.Tx_DMA_TCInt(&COM_Uart1);
}
else if (huart->Instance == USART2)
{
COM_Uart2.Tx_DMA_TCInt(&COM_Uart2);
}
else if (huart->Instance == UART4)
{
RS485_RX;
COM_Uart4.Tx_DMA_TCInt(&COM_Uart4);
}
}

View File

@@ -1,59 +0,0 @@
#ifndef _BSP_UART_H_
#define _BSP_UART_H_
#include "main.h"
#include "algo_Queue.h"
typedef struct bsp_Uart_t bsp_Uart_t;
#define usart_type UART_HandleTypeDef
#define dma_type DMA_HandleTypeDef
/*<2A><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>*/
typedef struct
{
u8 flag; /*<2A><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>־λ*/
bsp_Uart_t *uart; /*ת<><D7AA><EFBFBD><EFBFBD>ȥ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>*/
u16 time_out; /*ת<><D7AA><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>*/
}bsp_uart_relay_t;
struct bsp_Uart_t
{
queue RxQueue; /*<2A><><EFBFBD>ݽ<EFBFBD><DDBD>ն<EFBFBD><D5B6><EFBFBD>*/
usart_type *Uart; /*<2A><><EFBFBD><EFBFBD>*/
dma_type *Tx_DMA; /*DMA*/
dma_type *Rx_DMA;
u8 Tx_DMA_CH;
u8 Rx_DMA_CH;
vu8 Tx_DMA_CompleteFlag; /*DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ*/
u8 *Tx_Addr; /*DMA<4D><41><EFBFBD>˻<EFBFBD><CBBB><EFBFBD>*/
u8 *Rx_Addr;
u16 Tx_DMA_Len;
u16 Rx_DMA_Len;
u16 Rx_Len; /*<2A><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>*/
u16 Rx_TimeCount; /*<2A><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
u16 Rx_TimeOver; /*<2A><>ʱʱ<CAB1><CAB1>*/
u8 Rx_StartFlag; /*<2A><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ*/
bsp_uart_relay_t relay; /*<2A><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>*/
void (*Init)(bsp_Uart_t *); /*<2A><>ʼ<EFBFBD><CABC>*/
void (*Send)(bsp_Uart_t *,u8 *,u16); /*<2A><><EFBFBD>ڷ<EFBFBD><DAB7>ͺ<EFBFBD><CDBA><EFBFBD>*/
void (*Tx_DMA_TCInt)(bsp_Uart_t *); /*DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>*/
void (*Rx_IdleInt)(bsp_Uart_t *); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>*/
void (*Rx_TimeIncrementInt)(bsp_Uart_t *,u16); /*<2A>жϼ<D0B6><CFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void (*Rx_DataAnalysis)(u8 *,u16,void *); /*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>*/
void (*Rx_Task)(bsp_Uart_t *); /*<2A><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
};
extern bsp_Uart_t COM_Uart1;
extern bsp_Uart_t COM_Uart2;
extern bsp_Uart_t COM_Uart4;
#endif

View File

@@ -0,0 +1,489 @@
#include "bsp_uart.h"
#include "string.h"
/* RS485<38><35><EFBFBD>ƺ궨<C6BA><EAB6A8> */
#define RS485_RX HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_SET)
#define RS485_TX HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_SET)
/* <20><><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>С */
#define RX_TEMP_BUFF_NUM (3000U)
/* UART<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD> */
#define UART1_TX_LEN (3000U)
#define UART1_RX_LEN (3000U)
#define UART2_TX_LEN (3000U)
#define UART2_RX_LEN (3000U)
#define UART4_TX_LEN (3000U)
#define UART4_RX_LEN (3000U)
/* ȫ<>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u8 uart1_tx_buff[UART1_TX_LEN];
u8 uart1_rx_buff[UART1_RX_LEN];
u8 uart2_tx_buff[UART2_TX_LEN];
u8 uart2_rx_buff[UART2_RX_LEN];
u8 uart4_tx_buff[UART4_TX_LEN];
u8 uart4_rx_buff[UART4_RX_LEN];
u8 rx_temp_buff[RX_TEMP_BUFF_NUM];
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static void bsp_uart_init(bsp_uart_t *p_uart);
static void bsp_uart_send(bsp_uart_t *p_uart, u8 *p_data, u16 len);
static void bsp_uart_rx_idle_int(bsp_uart_t *p_uart);
static void bsp_uart_rx_time_increment(bsp_uart_t *p_uart, u16 time);
static void bsp_uart_rx_task(bsp_uart_t *p_uart);
static void bsp_uart_rx_time_start(bsp_uart_t *p_uart);
static void bsp_uart_tx_dma_tc_int(bsp_uart_t *p_uart);
static void bsp_uart_dma_send(bsp_uart_t *p_uart, u8 *p_data, u16 len);
/* <20>ⲿHAL<41><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart4;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern DMA_HandleTypeDef hdma_usart2_tx;
extern DMA_HandleTypeDef hdma_uart4_rx;
extern DMA_HandleTypeDef hdma_uart4_tx;
/******************************************
* <20><EFBFBD><E1B9B9>: com_uart1
* <20><><EFBFBD><EFBFBD>: UART1<54><31><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART1<54><31>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
bsp_uart_t com_uart1 =
{
.rx_queue = queue(u8, UART1_RX_LEN),
.uart = &huart1,
.tx_dma = &hdma_usart1_tx,
.rx_dma = &hdma_usart1_rx,
.tx_dma_len = UART1_TX_LEN,
.rx_dma_len = UART1_RX_LEN,
.tx_addr = &uart1_tx_buff[0],
.rx_addr = &uart1_rx_buff[0],
.tx_dma_complete_flag = 1,
.rx_time_over = 0,
.relay.uart = NULL,
.init = bsp_uart_init,
.send = bsp_uart_send,
.tx_dma_tc_int = bsp_uart_tx_dma_tc_int,
.rx_idle_int = bsp_uart_rx_idle_int,
.rx_time_increment_int = bsp_uart_rx_time_increment,
.rx_data_analysis = NULL,
.rx_task = bsp_uart_rx_task,
};
/******************************************
* <20><EFBFBD><E1B9B9>: com_uart2
* <20><><EFBFBD><EFBFBD>: UART2<54><32><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART2<54><32>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
bsp_uart_t com_uart2 =
{
.rx_queue = queue(u8, UART2_RX_LEN),
.uart = &huart2,
.tx_dma = &hdma_usart2_tx,
.rx_dma = &hdma_usart2_rx,
.tx_dma_len = UART2_TX_LEN,
.rx_dma_len = UART2_RX_LEN,
.tx_addr = &uart2_tx_buff[0],
.rx_addr = &uart2_rx_buff[0],
.tx_dma_complete_flag = 1,
.rx_time_over = 0,
.relay.uart = &com_uart4,
.init = bsp_uart_init,
.send = bsp_uart_send,
.tx_dma_tc_int = bsp_uart_tx_dma_tc_int,
.rx_idle_int = bsp_uart_rx_idle_int,
.rx_time_increment_int = bsp_uart_rx_time_increment,
.rx_data_analysis = NULL,
.rx_task = bsp_uart_rx_task,
};
/******************************************
* <20><EFBFBD><E1B9B9>: com_uart4
* <20><><EFBFBD><EFBFBD>: UART4<54><34><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART4<54><34>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
bsp_uart_t com_uart4 =
{
.rx_queue = queue(u8, UART4_RX_LEN),
.uart = &huart4,
.tx_dma = &hdma_uart4_tx,
.rx_dma = &hdma_uart4_rx,
.tx_dma_len = UART4_TX_LEN,
.rx_dma_len = UART4_RX_LEN,
.tx_addr = &uart4_tx_buff[0],
.rx_addr = &uart4_rx_buff[0],
.tx_dma_complete_flag = 1,
.rx_time_over = 0,
.relay.uart = NULL,
.init = bsp_uart_init,
.send = bsp_uart_send,
.tx_dma_tc_int = bsp_uart_tx_dma_tc_int,
.rx_idle_int = bsp_uart_rx_idle_int,
.rx_time_increment_int = bsp_uart_rx_time_increment,
.rx_data_analysis = NULL,
.rx_task = bsp_uart_rx_task,
};
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_init
* <20><><EFBFBD><EFBFBD>: UART<52><54>ʼ<EFBFBD><CABC>
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC>UART<52><54>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD>жϺ<D0B6>DMA<4D><41><EFBFBD><EFBFBD>
*******************************************/
static void bsp_uart_init(bsp_uart_t *p_uart)
{
/* <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ж<EFBFBD> */
__HAL_UART_ENABLE_IT(p_uart->uart, UART_IT_IDLE);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>ʹ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ж<EFBFBD>ģʽ */
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_dma_send
* <20><><EFBFBD><EFBFBD>: DMA<4D><41><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* p_data - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* len - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: ʹ<><CAB9>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>г<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
*******************************************/
static void bsp_uart_dma_send(bsp_uart_t *p_uart, u8 *p_data, u16 len)
{
u32 tick_start, tick;
p_uart->tx_dma_complete_flag = 0;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ij<CDB5><C4B3>ȴ<EFBFBD><C8B4>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ض<EFBFBD> */
if(p_uart->tx_dma_len < len)
len = p_uart->tx_dma_len;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD> */
memcpy(p_uart->tx_addr, p_data, len);
/* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD> */
HAL_UART_Transmit_DMA(p_uart->uart, p_uart->tx_addr, len);
/* <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> */
tick_start = HAL_GetTick();
while(!p_uart->tx_dma_complete_flag)
{
tick = HAL_GetTick();
if((tick - tick_start) > 200) /* 200ms<6D><73>ʱ */
{
p_uart->tx_dma_complete_flag = 1;
break;
}
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_send
* <20><><EFBFBD><EFBFBD>: UART<52><54><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* p_data - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* len - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ַֿ鷢<D6BF><E9B7A2>
*******************************************/
static void bsp_uart_send(bsp_uart_t *p_uart, u8 *p_data, u16 len)
{
u16 i, send_num;
/* RS485<38>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
if(p_uart == &com_uart4)
RS485_TX;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD> */
send_num = len / p_uart->tx_dma_len;
/* <20>ֿ鷢<D6BF><E9B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
for(i = 0; i < send_num; i++)
{
bsp_uart_dma_send(p_uart, &p_data[p_uart->tx_dma_len * i], p_uart->tx_dma_len);
}
/* <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
len -= p_uart->tx_dma_len * i;
if(0 == len)
{
return;
}
else
{
bsp_uart_dma_send(p_uart, &p_data[p_uart->tx_dma_len * i], len);
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_tx_dma_tc_int
* <20><><EFBFBD><EFBFBD>: DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
*******************************************/
static void bsp_uart_tx_dma_tc_int(bsp_uart_t *p_uart)
{
p_uart->tx_dma_complete_flag = 1;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_idle_int
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART<52><54><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
static void bsp_uart_rx_idle_int(bsp_uart_t *p_uart)
{
u16 rx_length, i;
/* ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD> */
HAL_UART_DMAStop(p_uart->uart);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
rx_length = p_uart->rx_dma_len - __HAL_DMA_GET_COUNTER(p_uart->rx_dma);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> */
if (rx_length == 0)
{
return;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
for (i = 0; i < rx_length; i++)
{
queue_push_back(p_uart->rx_queue, (void *)&p_uart->rx_addr[i]);
}
/* <20><>ʼ<EFBFBD><CABC><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>ʱ */
bsp_uart_rx_time_start(p_uart);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_time_increment
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ճ<EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* time - <20><><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1>ֵ
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
static void bsp_uart_rx_time_increment(bsp_uart_t *p_uart, u16 time)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
if(1 == p_uart->rx_start_flag)
{
p_uart->rx_time_count += time;
}
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_time_start
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>ʱ
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
*******************************************/
static void bsp_uart_rx_time_start(bsp_uart_t *p_uart)
{
p_uart->rx_start_flag = 1;
p_uart->rx_time_count = 0;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_time_stop
* <20><><EFBFBD><EFBFBD>: ֹͣ<CDA3><D6B9><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>ʱ
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: ֹͣ<CDA3><D6B9><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
*******************************************/
static void bsp_uart_rx_time_stop(bsp_uart_t *p_uart)
{
p_uart->rx_start_flag = 0;
p_uart->rx_time_count = 0;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_task
* <20><><EFBFBD><EFBFBD>: UART<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
*******************************************/
static void bsp_uart_rx_task(bsp_uart_t *p_uart)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD> */
if(p_uart->rx_time_over < p_uart->rx_time_count)
{
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
p_uart->rx_len = queue_size(p_uart->rx_queue);
/* ֹͣ<CDA3><D6B9>ʱ */
bsp_uart_rx_time_stop(p_uart);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
if(p_uart->rx_len <= p_uart->rx_dma_len && (0 != p_uart->rx_len))
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD> */
if(RX_TEMP_BUFF_NUM < p_uart->rx_len)
{
queue_clear(p_uart->rx_queue);
}
else
{
/* <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
for(u16 i = 0; i < p_uart->rx_len; i++)
{
queue_pop(p_uart->rx_queue, &rx_temp_buff[i]);
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if(NULL != p_uart->rx_data_analysis)
{
p_uart->rx_data_analysis(rx_temp_buff, p_uart->rx_len, p_uart);
}
}
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ORE
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
bsp_uart_t *p_uart = NULL;
if (huart->Instance == USART1)
{
p_uart = &com_uart1;
}
else if (huart->Instance == USART2)
{
p_uart = &com_uart2;
}
else if (huart->Instance == UART4)
{
p_uart = &com_uart4;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(huart->ErrorCode & HAL_UART_ERROR_NE)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__HAL_UART_CLEAR_NEFLAG(huart);
}
if(huart->ErrorCode & HAL_UART_ERROR_FE)
{
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
__HAL_UART_CLEAR_FEFLAG(huart);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET)
{
__HAL_UART_CLEAR_OREFLAG(huart); // <20><><EFBFBD><EFBFBD>ORE<52><45>־
}
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET)
{
__HAL_UART_CLEAR_FEFLAG(huart); // <20><><EFBFBD><EFBFBD>ORE<52><45>־
}
//
if(p_uart != NULL)
{
// HAL_UART_DeInit(huart);
// HAL_UART_Init(huart);
// HAL_UART_DMAStop(p_Uart->Uart);
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
}
}
// ʵ<>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD>жϻص<CFBB>
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if (huart->Instance == USART1)
{
bsp_uart_rx_idle_int(&com_uart1);
}
else if (huart->Instance == USART2)
{
bsp_uart_rx_idle_int(&com_uart2);
}
else if (huart->Instance == UART4)
{
bsp_uart_rx_idle_int(&com_uart4);
}
}
/* <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB><D8B5><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
// if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE))
// {
// __HAL_UART_CLEAR_IDLEFLAG(huart);
// if (huart->Instance == USART1)
// {
// bsp_Uart_Rx_IdleInt(&COM_Uart1);
// }
// else if (huart->Instance == USART2)
// {
// bsp_Uart_Rx_IdleInt(&COM_Uart2);
// }
// else if (huart->Instance == UART4)
// {
// bsp_Uart_Rx_IdleInt(&COM_Uart4);
// }
// }
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
bsp_uart_tx_dma_tc_int(&com_uart1);
}
else if (huart->Instance == USART2)
{
bsp_uart_tx_dma_tc_int(&com_uart2);
}
else if (huart->Instance == UART4)
{
bsp_uart_tx_dma_tc_int(&com_uart2);
}
}

View File

@@ -0,0 +1,70 @@
#ifndef _BSP_UART_H_
#define _BSP_UART_H_
#include "main.h"
#include "algo_queue.h"
/******************************************
* <20><EFBFBD><E1B9B9>: bsp_uart_t
* <20><><EFBFBD><EFBFBD>: UART<52><54><EFBFBD>ƽ<C6BD><E1B9B9>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>״̬<D7B4><CCAC>Ϣ
*******************************************/
typedef struct bsp_uart_t bsp_uart_t;
/* <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> */
#define usart_type UART_HandleTypeDef
#define dma_type DMA_HandleTypeDef
/******************************************
* <20><EFBFBD><E1B9B9>: bsp_uart_relay_t
* <20><><EFBFBD><EFBFBD>: UARTת<54><D7AA><EFBFBD><EFBFBD><E1B9B9>
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UART<52><54><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************/
typedef struct
{
u8 flag; /* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>־λ */
bsp_uart_t *uart; /* ת<><D7AA><EFBFBD><EFBFBD>ȥ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ָ<EFBFBD><D6B8> */
u16 time_out; /* ת<><D7AA><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1> */
} bsp_uart_relay_t;
struct bsp_uart_t
{
queue rx_queue; /* <20><><EFBFBD>ݽ<EFBFBD><DDBD>ն<EFBFBD><D5B6><EFBFBD> */
usart_type *uart; /* <20><><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>ָ<EFBFBD><D6B8> */
dma_type *tx_dma; /* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD> */
dma_type *rx_dma; /* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD> */
u8 tx_dma_ch; /* <20><><EFBFBD><EFBFBD>DMAͨ<41><CDA8><EFBFBD><EFBFBD> */
u8 rx_dma_ch; /* <20><><EFBFBD><EFBFBD>DMAͨ<41><CDA8><EFBFBD><EFBFBD> */
vu8 tx_dma_complete_flag; /* DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ */
u8 *tx_addr; /* DMA<4D><41><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ */
u8 *rx_addr; /* DMA<4D><41><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ */
u16 tx_dma_len; /* DMA<4D><41><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u16 rx_dma_len; /* DMA<4D><41><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u16 rx_len; /* <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
u16 rx_time_count; /* <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> */
u16 rx_time_over; /* <20><>ʱʱ<CAB1><CAB1> */
u8 rx_start_flag; /* <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ */
bsp_uart_relay_t relay; /* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void (*init)(bsp_uart_t *); /* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*send)(bsp_uart_t *, u8 *, u16); /* <20><><EFBFBD>ڷ<EFBFBD><DAB7>ͺ<EFBFBD><CDBA><EFBFBD>ָ<EFBFBD><D6B8> */
void (*tx_dma_tc_int)(bsp_uart_t *); /* DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*rx_idle_int)(bsp_uart_t *); /* <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*rx_time_increment_int)(bsp_uart_t *, u16); /* <20>жϼ<D0B6><CFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*rx_data_analysis)(u8 *, u16, void *); /* <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
void (*rx_task)(bsp_uart_t *); /* <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
};
/* <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> */
extern bsp_uart_t com_uart1;
extern bsp_uart_t com_uart2;
extern bsp_uart_t com_uart4;
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,155 +0,0 @@
#ifndef __TJCUSARTHMI_H_
#define __TJCUSARTHMI_H_
#include "stm32f4xx.h"
#include "main.h" // <20><><EFBFBD><EFBFBD> HAL <20><>ͷ<EFBFBD>ļ<EFBFBD>
#include "bsp_Uart.h"
#include "bsp_Flash.h" // <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>main.c<>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>huart2<74><32>
extern UART_HandleTypeDef huart2;
// <20><><EFBFBD><EFBFBD><E5B4AE><EFBFBD><EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4><EFBFBD>
#define TJC_UART huart2
// <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RINGBUFF_LEN (500)
// ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TJC<4A><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD>
#define TJC_END_BYTES 0xFF
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEB3A4>
#define MAX_COMMAND_LEN 200 // <20><><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><E8B1B8>Ϣ
// <20>Զ<EFBFBD><D4B6><EFBFBD>ָ<EFBFBD><EFBFBD><EEB6A8>
#define CUSTOM_CMD_HEADER_0 0xAA
#define CUSTOM_CMD_HEADER_1 0x55
// ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMD_DISPLAY_DATA 0x02 // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
#define CMD_ALARM 0x03 // <20><><EFBFBD><EFBFBD>
#define CMD_DELETE_DEVICE 0x04 // ɾ<><C9BE><EFBFBD>
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SUB_CMD_SHOW_DEVICES 0x01 // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>
#define SUB_CMD_REGION_STATS 0x02 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
#define SUB_CMD_REGION1_DEVICES 0x03 // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SUB_CMD_REGION2_DEVICES 0x04 // <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SUB_CMD_REGION3_DEVICES 0x05 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SUB_CMD_REGION4_DEVICES 0x06 // <20><><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SUB_CMD_HISTORY_ALARM 0x01 // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
#define SUB_CMD_REALTIME_ALARM 0x02 // ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>豸ָ<E8B1B8><D6B8>ʶ<EFBFBD><CAB6>
#define ADD_DEVICE_CMD_BYTE 0x43 // 'C'<27><>ASCII<49><49>
// <20>ָ<EFBFBD><D6B8><EFBFBD>
#define DATA_SEPARATOR 0xAA
// ͨ<><CDA8>״̬ö<CCAC><C3B6>
typedef enum {
COMM_STATUS_NORMAL = 0, // <20><><EFBFBD><EFBFBD>
COMM_STATUS_ABNORMAL // <20>
} CommStatus;
// ©Һ״̬ö<CCAC><C3B6>
typedef enum {
LEAK_NORMAL = 0, // <20><><EFBFBD><EFBFBD>
LEAK_ABNORMAL // ©Һ
} LeakStatus;
// <20>ϴ<EFBFBD>״̬ö<CCAC><C3B6>
typedef enum {
BREAK_NORMAL = 0, // <20><><EFBFBD><EFBFBD>
BREAK_ABNORMAL // <20>ϴ<EFBFBD>
} BreakStatus;
// ͨ<><CDA8>״̬<D7B4><EFBFBD><E1B9B9>
typedef struct {
LeakStatus leak_status; // ©Һ״̬
BreakStatus break_status; // <20>ϴ<EFBFBD>״̬
int leak_meter; // ©Һ<C2A9><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>©Һ״̬Ϊ©Һ<C2A9><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ0<CABE><30>
} ChannelStatus;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
typedef enum {
ALARM_LEAK = 0, // ©Һ
ALARM_BREAK, // <20>ϴ<EFBFBD>
ALARM_COMM // ͨ<><CDA8><EFBFBD>
} AlarmType;
// <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><EFBFBD><E1B9B9>
typedef struct {
uint8_t port; // <20>˿ں<CBBF>
char region[20]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>ģ<EFBFBD>
uint8_t device_id; // <20>豸ID (1-254)
char device_name[20]; // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>Ӣ<EFBFBD>ģ<EFBFBD>
LeakStatus leak_status; // ©Һ״̬
BreakStatus break_status; // <20>ϴ<EFBFBD>״̬
CommStatus comm_status; // ͨ<><CDA8>״̬
ChannelStatus channels[4]; // <20>ĸ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>״̬
} DeviceInfo;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><E1B9B9>
typedef struct {
char region[20]; // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t device_id; // <20>豸ID
char device_name[20]; // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
AlarmType alarm_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char start_time[20]; // <20><>ʼʱ<CABC><CAB1>
char end_time[20]; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
} AlarmInfo;
// <20><><EFBFBD><EFBFBD>ͳ<EFBFBD>ƽ<C6BD><E1B9B9>
typedef struct {
char region_name[20]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t total_devices; // <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t leak_devices; // ©Һ<C2A9><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t break_devices; // <20>ϴ<EFBFBD><CFB4><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t comm_devices; // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
} RegionStats;
// <20>ⲿ<EFBFBD>ɵ<EFBFBD><C9B5>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TJC_Init(bsp_Uart_t *pUart);
void TJC_SendData(uint8_t *data, uint16_t len);
void TJCPrintf(const char *cmd, ...);
// <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
uint16_t TJC_CleanBufferFromInvalidPatterns(void);
void initRingBuffer(void);
void writeRingBuff(uint8_t data);
void deleteRingBuff(uint16_t size);
uint16_t getRingBuffLength(void);
uint8_t read1BFromRingBuff(uint16_t position);
uint8_t isRingBuffOverflow(void);
// ָ<><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
void TJC_ProcessCommand(uint8_t *cmd, uint16_t len);
uint8_t TJC_CheckEndBytes(uint8_t *data, uint16_t len, uint16_t *end_pos);
void TJC_SendResponse(const char *response);
void TJC_ProcessSerialData(u8 *data, u16 len, void *p_arg);
void TJC_DeleteDevices(uint8_t *delete_flags, uint8_t flag_count);
void TJC_ProcessDeleteCommand(uint8_t *cmd, uint16_t len);
/*<2A><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void TJC_SendInitCommands(void);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t CalculateCRC16(uint8_t *data, uint16_t length);
void TJC_ProcessCustomCommand(uint8_t *cmd, uint16_t len);
void TJC_SendAlarmHistory(void);
void TJC_SendRealtimeAlarms(void);
void TJC_SendDeviceList(void);
uint8_t TJC_AddDeviceToFlash(uint8_t *data, uint16_t len);
void TJC_SendRegionStats(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>
void TJC_SendRegionDeviceDetails(uint8_t region_index);
// <20><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define usize getRingBuffLength()
#define code_c() initRingBuffer()
#define udelete(x) deleteRingBuff(x)
#define u(x) read1BFromRingBuff(x)
#endif

View File

@@ -0,0 +1,604 @@
#include "GUI_tjc_hmi.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stddef.h>
#include "proto_modbus_lib.h"
#include "bsp_Flash.h" // <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD>
#include "bsp_uart.h"
#include "app_leakage.h"
/*<2A><><EFBFBD>ڷ<EFBFBD><DAB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>*/
#define HMI_TX_BUFFER_NUM (2048)
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define GUI_TJC_HMI_TEXT_BUFFER_NUM (256)
/*֡ͷ*/
#define HMI_PROTO_FRAME_HEADER1 (0xAA)
#define HMI_PROTO_FRAME_HEADER2 (0x55)
/*<2A><><EFBFBD><EFBFBD>*/
#define HMI_PROTO_CMD_GET (0x03) /*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define HMI_PROTO_CMD_SET (0x10) /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
/*<2A><><EFBFBD><EFBFBD>*/
#define HMI_PROTO_GUI_MAIN (0x10)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_CURR_ALARM (0x11)/*ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_DETAIL_MAIN (0x12)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F>ϸ<EFBFBD><CFB8>Ϣ */
#define HMI_PROTO_GUI_LOGIN (0x13)/*<2A><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_HISTORY_ALARM (0x14)/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_TCP_CONFIG (0x15)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> */
#define HMI_PROTO_GUI_DEVICE_CONFIG (0x16)/*<2A><EFBFBD><E8B1B8><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> */
#define HMI_PROTO_GUI_HELP (0x17)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_ASCII_RX_DELINITER (0xAA)/*<2A><><EFBFBD>շָ<D5B7><D6B8><EFBFBD>*/
#define HMI_PROTO_ASCII_TX_DELINITER (0xFF)/*<2A><><EFBFBD>ͷָ<CDB7><D6B8><EFBFBD>*/
#define HMI_PROTO_ASCII_TX_DELINITER_NUM (3)/*<2A><><EFBFBD>ͷָ<CDB7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_init(void);
static void gui_tjc_hmi_communication_data_analysis(u8 *p_data, u16 len, void *rx_uart);
/*<2A><><EFBFBD>ڷ<EFBFBD><DAB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>*/
static u8 hmi_tx_buffer[HMI_TX_BUFFER_NUM];
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static char gui_tjc_hmi_text_buffer[GUI_TJC_HMI_TEXT_BUFFER_NUM];
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> <20>˿ں<CBBF>*/
static char *hmi_proto_string_com[] =
{
"COM1",
"COM2",
"COM3",
"COM4"
};
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static char *hmi_proto_string_baudrate[] =
{
"4800",
"9600",
"19200",
"57600",
"115200",
};
static bsp_uart_t * p_rx_uart = NULL;
gui_tjc_hmi_t tjc_hmi =
{
.init = gui_tjc_hmi_init,
};
gui_tjc_hmi_t *p_tjc_hmi = &tjc_hmi;
/*<2A><>ĻЭ<C4BB><D0AD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>*/
static void gui_tjc_hmi_init(void)
{
com_uart1.rx_data_analysis = gui_tjc_hmi_communication_data_analysis;
}
/*<2A><><EFBFBD>ͽӿ<CDBD>*/
static void gui_tjc_hmi_data_send(u8 *p_data,u16 len)
{
if(p_rx_uart != NULL)
{
p_rx_uart->send(p_rx_uart,p_data,len);
}
}
/*<2A><><EFBFBD>ö<EFBFBD>Ӧ<EFBFBD>Ŀؼ<C4BF>
x<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>
y<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>
buffer<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>buffer
format<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
...<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static u16 gui_tjc_hmi_tx_text_display(u16 x,u16 y,char *buffer,const char *format,...)
{
u16 i,len;
s16 state;
va_list arg;
/*<2A><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>*/
memset(gui_tjc_hmi_text_buffer,0,sizeof(gui_tjc_hmi_text_buffer));
va_start(arg,format);
/*<2A><>ʽ<EFBFBD><CABD>ת<EFBFBD><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>*/
state = vsnprintf(gui_tjc_hmi_text_buffer,GUI_TJC_HMI_TEXT_BUFFER_NUM,format,arg);
if(-1 == state || state > GUI_TJC_HMI_TEXT_BUFFER_NUM)
{
va_end(arg);
printf("Length REEOR");
return 0;
}
/*ƴ<><C6B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>*/
sprintf(buffer,"t%d_%d.txt=\"%s\"",x,y,gui_tjc_hmi_text_buffer);
len = strlen(buffer);
for(i=0;i<HMI_PROTO_ASCII_TX_DELINITER_NUM;i++)
{
buffer[len + i] = HMI_PROTO_ASCII_TX_DELINITER;
}
va_end(arg);
return len + 3;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
static void gui_tjc_hmi_main_send(u8 cmd,u8 opa,u8 *p_data)
{
/*ÿҳ<C3BF><D2B3>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define MAIN_PAGE_SUB_DEVICE_NUM (4)
u16 len = 0,i,j,x,y,index;
u8 page_num,remain_region_num;
memset(hmi_tx_buffer,0,sizeof(hmi_tx_buffer));
/*<2A><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
page_num = leakage.region_num / MAIN_PAGE_SUB_DEVICE_NUM;
remain_region_num = leakage.region_num % MAIN_PAGE_SUB_DEVICE_NUM;/*ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if(remain_region_num > 0)
{
page_num++;
}
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
{
if(p_tjc_hmi->page.main_index == page_num - 1 && remain_region_num >0)/*<2A><>ʾʣ<CABE><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{
for(j=0;j<remain_region_num;j++)
{
index = p_tjc_hmi->page.main_index * MAIN_PAGE_SUB_DEVICE_NUM + j;
x = j;
/*<2A><><EFBFBD><EFBFBD>*/
y = 0;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%s",leakage.region_data[index].name);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
y = 1;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].sub_device_num);
/*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
y = 2;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].leakage_num);
/*<2A>ϴ<EFBFBD>*/
y = 3;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].open_num);
/*ͨѶ*/
y = 4;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].time_out_num);
}
}
else
{
for(j=0;j<MAIN_PAGE_SUB_DEVICE_NUM;j++)
{
index = p_tjc_hmi->page.main_index*MAIN_PAGE_SUB_DEVICE_NUM + j;
x = j;
/*<2A><><EFBFBD><EFBFBD>*/
y = 0;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%s",leakage.region_data[index].name);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
y = 1;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].sub_device_num);
/*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
y = 2;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].leakage_num);
/*<2A>ϴ<EFBFBD>*/
y = 3;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].open_num);
/*ͨѶ*/
y = 4;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].time_out_num);
}
}
}break;
case 0x02:
{
}break;
default:return;
}
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x03:/*<2A><>ҳ*/
{
if(0x01 == p_data[0])
{
if(page_num - 1 <= p_tjc_hmi->page.main_index)
{
p_tjc_hmi->page.main_index = 0;
}
else
{
p_tjc_hmi->page.main_index++;
}
}
else
{
if(0 == p_tjc_hmi->page.main_index)
{
p_tjc_hmi->page.main_index = page_num - 1;
}
else
{
p_tjc_hmi->page.main_index--;
}
}
}
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
static void gui_tjc_hmi_curr_alarm_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_detail_main_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_login_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
static void gui_tjc_hmi_tcp_config_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><EFBFBD><E8B1B8><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> */
static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_help_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><>Ļָ<C4BB><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_communication_data_analysis(u8 *p_data, u16 len, void *rx_uart)
{
u8 cmd,data,gui_id,opa,*p_offset_data;
u16 i,modbus_crc16,check_crc16;
/*<2A><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>*/
if(len < 5)
{
return ;
}
/*<2A><><EFBFBD><EFBFBD>֡ͷ*/
if(p_data[0] != HMI_PROTO_FRAME_HEADER1 || p_data[1] != HMI_PROTO_FRAME_HEADER2)
{
return ;
}
/*У<><D0A3>λ*/
check_crc16 = p_data[len-2] << 8 | p_data[len-1];
modbus_crc16 = modbus_lib_crc16(p_data,len-2);
modbus_crc16 = (modbus_crc16 >> 8) | (modbus_crc16 << 8);
if(modbus_crc16 != check_crc16)
{
return ;
}
/*CMD*/
cmd = p_data[2];
if(cmd != HMI_PROTO_CMD_GET || HMI_PROTO_CMD_GET != HMI_PROTO_CMD_SET)
{
return ;
}
gui_id = p_data[3]; /*gui_id*/
opa = p_data[4]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
p_offset_data = &p_data[5]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
p_rx_uart = (bsp_uart_t *)rx_uart; /*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>*/
switch(gui_id)
{
case HMI_PROTO_GUI_MAIN :
{
gui_tjc_hmi_main_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_CURR_ALARM :
{
gui_tjc_hmi_curr_alarm_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_DETAIL_MAIN :
{
gui_tjc_hmi_detail_main_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_LOGIN :
{
gui_tjc_hmi_main_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_HISTORY_ALARM :
{
gui_tjc_hmi_history_alarm_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_TCP_CONFIG :
{
gui_tjc_hmi_tcp_config_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_DEVICE_CONFIG :
{
gui_tjc_hmi_device_config_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_HELP :
{
gui_tjc_hmi_help_send(cmd,opa,p_offset_data);
}break;
}
}

View File

@@ -0,0 +1,22 @@
#ifndef _GUI_TJC_HMI_H_
#define _GUI_TJC_HMI_H_
#include "main.h"
/*ҳ<><D2B3>*/
typedef struct
{
u8 main_index;
u8 deliniter_main_index;
}gui_tjc_hmi_page_t;
typedef struct
{
gui_tjc_hmi_page_t page;
void (*init)(void);
}gui_tjc_hmi_t;
extern gui_tjc_hmi_t tjc_hmi;
#endif

View File

@@ -3,7 +3,7 @@
#include "stdio.h"
#include "app.h"
#include "os_timer.h"
#include "app_timer.h"
#include "bsp_Uart.h"
#include "bsp_74HC4067.h"
@@ -36,7 +36,7 @@ static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data);
static void proto_tdlas_control_fac_calib_data_get(u8 ch);
/*<2A><><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>*/
static bsp_Uart_t *rx_uart = NULL;
static bsp_uart_t *rx_uart = NULL;
proto_tdlas_t tdlas=
{
@@ -56,16 +56,16 @@ proto_tdlas_t tdlas=
};
proto_tdlas_t *p_sensor = &tdlas;
bsp_Uart_t *p_use_uart = &COM_Uart4;
bsp_uart_t *p_use_uart = &com_uart4;
static void proto_tdlas_init(void)
{
COM_Uart4.Rx_DataAnalysis = p_sensor->rx_task;
com_uart4.rx_data_analysis = p_sensor->rx_task;
}
static void proto_tdlas_send(u8 *p_data,u16 len)
{
COM_Uart4.Send(&COM_Uart4,p_data,len);
com_uart4.send(&com_uart4,p_data,len);
}
static void proto_sensor_switch(u8 ch)
@@ -324,7 +324,7 @@ static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data)
if( p_use_uart->relay.flag == 1)
{
p_use_uart->relay.uart->Send(p_use_uart->relay.uart,p_data,len);
p_use_uart->relay.uart->send(p_use_uart->relay.uart,p_data,len);
}
if(p_sensor->modbus_id != p_data[0])
@@ -348,7 +348,7 @@ static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data)
{
p_rx_valid = &p_data[6];
}
rx_uart = (bsp_Uart_t *)other_data;
rx_uart = (bsp_uart_t *)other_data;
p_sensor_sys->tx_time_out_count = 0;
p_sensor_sys->state_error_flag &= (~(0x00000001 << PROTO_TDLAS_ERROR_FLAG_TIME_OUT));

View File

@@ -4,7 +4,7 @@
#include "stdio.h"
#include "app.h"
#include "os_timer.h"
#include "app_timer.h"
#include "bsp_Uart.h"
#include "bsp_Flash.h"
@@ -33,26 +33,21 @@ proto_Modbus_t modbus_slave_ex=
};
static proto_Modbus_t *p_modbus = &modbus_slave_ex;
static bsp_Uart_t * rx_uart;
static bsp_uart_t * p_rx_uart;
static void proto_modbus_communication_data_send(u8 *pData, u16 len)
static void proto_modbus_communication_data_send(u8 *p_data, u16 len)
{
if(&COM_Uart1 == rx_uart)
if(p_rx_uart != NULL)
{
COM_Uart1.Send(&COM_Uart1,pData,len);
}
else if(&COM_Uart4 == rx_uart)
{
COM_Uart4.Send(&COM_Uart4,pData,len);
}
p_rx_uart->send(p_rx_uart,p_data,len);
}
}
static void proto_modbus_init(void)
{
p_modbus->id = Usr_Flash.FlashData.modbus_id;
COM_Uart1.Rx_DataAnalysis = proto_modbus_communication_data_analysis;
COM_Uart4.Rx_DataAnalysis = proto_modbus_communication_data_analysis;
com_uart1.rx_data_analysis = proto_modbus_communication_data_analysis;
com_uart4.rx_data_analysis = proto_modbus_communication_data_analysis;
}
static void proto_modbus_task(void)
{
@@ -82,7 +77,7 @@ static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *ot
goto Error;
}
*/
rx_uart = (bsp_Uart_t*)other_data;
p_rx_uart = (bsp_uart_t*)other_data;
switch (modbus_analysis_data.func)
{
case 0x03: