Quellcode durchsuchen

修改t1.5-t3.5间隔判断代码

main
the_deepest vor 1 Tag
Ursprung
Commit
bd9fb51657
6 geänderte Dateien mit 989 neuen und 960 gelöschten Zeilen
  1. +32
    -8
      app/inc/hardware.h
  2. +6
    -6
      iar/settings/F407_uCOSii_Modbus.wsdt
  3. +1
    -1
      iar/settings/uCOS_Modbus.dnx
  4. +943
    -944
      iar/uCOS_Modbus.dep
  5. +1
    -1
      modbus/modbus_parse.c
  6. +6
    -0
      modbus/modbus_rec_send.c

+ 32
- 8
app/inc/hardware.h Datei anzeigen

@@ -3,6 +3,33 @@

#include"modbus_parse.h"


// #if (MODBUS_USART_BAUDRATE > 19200U)

// /*固定等待1750us,再减去IDLE中断等待的1个字符时间*/
// /*1.5个字符=750us-1个字符时间*/
// #define MODBUS_IDLE_TO_T15_US \
// ((750UL * MODBUS_USART_BAUDRATE - 10000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
// /*2个字符=1000us*/
// #define MODBUS_T15_TO_T35_US 1000UL
// /*3.5个字符=1750us-1个字符时间*/
// #define MODBUS_IDLE_TO_T35_US \
// ((1750UL * MODBUS_USART_BAUDRATE - 10000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
// #else

// /*IDLE中断已经过了1个字符的时间,还需等待2.5个字符*/
// /*1.5个字符-1个字符时间=0.5个字符时间*/
// #define MODBUS_IDLE_TO_T15_US \
// ((5000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
// /*2个字符时间*/
// #define MODBUS_T15_TO_T35_US \
// ((20000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
// /*3.5个字符-1个字符时间=2.5个字符时间*/
// #define MODBUS_IDLE_TO_T35_US \
// ((25000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
// #endif


/*在8N1下,一个字符=10位,波特率表示每秒传输的位数,换算成每us传输的位数要除以10^6
*所以一个字符时间 = 10/(波特率/10^6)=10^7/波特率
*(+ MODBUS_USART_BAUDRATE - 1UL)部分为整数运算向上取整
@@ -11,28 +38,25 @@

/*固定等待1750us,再减去IDLE中断等待的1个字符时间*/
/*1.5个字符=750us-1个字符时间*/
#define MODBUS_IDLE_TO_T15_US \
((750UL * MODBUS_USART_BAUDRATE - 10000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
#define MODBUS_IDLE_TO_T15_US 750UL
/*2个字符=1000us*/
#define MODBUS_T15_TO_T35_US 1000UL
/*3.5个字符=1750us-1个字符时间*/
#define MODBUS_IDLE_TO_T35_US \
((1750UL * MODBUS_USART_BAUDRATE - 10000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
#define MODBUS_IDLE_TO_T35_US 1750UL
#else

/*IDLE中断已经过了1个字符的时间,还需等待2.5个字符*/
/*1.5个字符-1个字符时间=0.5个字符时间*/
/*1.5个字符-1个字符时间=0.5个字符时间*/
#define MODBUS_IDLE_TO_T15_US \
((5000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
((15000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
/*2个字符时间*/
#define MODBUS_T15_TO_T35_US \
((20000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
/*3.5个字符-1个字符时间=2.5个字符时间*/
#define MODBUS_IDLE_TO_T35_US \
((25000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
((35000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE)
#endif


extern uint8_t ModbusRxBuf[MODBUS_RX_BUF_SIZE];
extern uint8_t ModbusTxBuf[MODBUS_TX_BUF_SIZE];



+ 6
- 6
iar/settings/F407_uCOSii_Modbus.wsdt
Datei-Diff unterdrückt, da er zu groß ist
Datei anzeigen


+ 1
- 1
iar/settings/uCOS_Modbus.dnx Datei anzeigen

@@ -24,7 +24,7 @@
<stlinkResetStrategy>0</stlinkResetStrategy>
</StLinkDriver>
<DebugChecksum>
<Checksum>3084689596</Checksum>
<Checksum>2649077694</Checksum>
</DebugChecksum>
<Exceptions>
<StopOnUncaught>_ 0</StopOnUncaught>


+ 943
- 944
iar/uCOS_Modbus.dep
Datei-Diff unterdrückt, da er zu groß ist
Datei anzeigen


+ 1
- 1
modbus/modbus_parse.c Datei anzeigen

@@ -42,7 +42,7 @@ void AppTaskModbusParse (void *p_arg)
rxLen = ModbusRxLen;
if(rxLen > MODBUS_RX_BUF_SIZE)
{
rxLen = 0;
continue;
}
memcpy(rxBuf, ModbusRxBuf, rxLen);



+ 6
- 0
modbus/modbus_rec_send.c Datei anzeigen

@@ -32,6 +32,12 @@ void USART1_IRQHandler(void)
TimRestart(MODBUS_IDLE_TO_T15_US);
break;

/*在t1.5定时还未到达时又接收到了数据*/
case MODBUS_RX_CHECK_T15:
ModbusRxState = MODBUS_RX_CHECK_T15;
TimRestart(MODBUS_IDLE_TO_T15_US);
break;

/*在判断t1.5~t3.5是否出现字符时,t3.5定时中断还未触发,又接收到了数据*/
case MODBUS_RX_CHECK_T35:
ModbusRxState = MODBUS_RX_DISCARD_CHECK_T35; /*判断为错误帧*/


Laden…
Abbrechen
Speichern