Преглед на файлове

modbus发送接收测试完成修改

main
the_deepest преди 1 седмица
родител
ревизия
a8653b7b0b
променени са 7 файла, в които са добавени 826 реда и са изтрити 836 реда
  1. +1
    -1
      app/inc/hardware.h
  2. +4
    -18
      app/main.c
  3. +14
    -14
      iar/settings/uCOS_Modbus.dnx
  4. +1
    -0
      iar/settings/uCOS_Modbus.reggroups
  5. +788
    -788
      iar/uCOS_Modbus.dep
  6. +18
    -12
      modbus/modbus.c
  7. +0
    -3
      user/app_cfg.h

+ 1
- 1
app/inc/hardware.h Целия файл

@@ -7,7 +7,7 @@
#define MODBUS_TX_BUF_SIZE 256

/*modbus通信波特率*/
#define MODBUS_USART_BAUDRATE 19200
#define MODBUS_USART_BAUDRATE 115200


extern uint8_t ModbusRxBuf[MODBUS_RX_BUF_SIZE];


+ 4
- 18
app/main.c Целия файл

@@ -3,17 +3,16 @@

/*定义信号量*/
OS_EVENT* ModbusReceived; /*接收到modbus请求报文*/
OS_EVENT* ModbusAssembled; /*modbus响应帧组装完成*/

/*定义任务栈*/
static OS_STK AppTaskStartStk[APP_TASK_START_STK_SIZE];
static OS_STK AppTaskModbusParseStk[APP_TASK_MODBUS_PARSE_STK_SIZE];
static OS_STK AppTaskModbusSendStk[APP_TASK_MODBUS_SEND_STK_SIZE];

/*定义任务主体函数*/
void AppTaskStart (void *p_arg);
void AppTaskModbusParse (void *p_arg);
void AppTaskModbusSend (void *p_arg);



@@ -21,7 +20,7 @@ int main()
{
Sys_Config(); /* stm32系统初始化配置 */
ModbusHardwareInit();
ModbusHardwareInit(); /*外设初始化*/

OSInit(); /* uCOS系统初始化 */
@@ -53,7 +52,6 @@ void AppTaskStart(void *p_arg)

/*创建信号量*/
ModbusReceived = OSSemCreate(0);
ModbusAssembled = OSSemCreate(0);

/* 创建modbus协议帧解析任务 */
OSTaskCreateExt(AppTaskModbusParse,
@@ -66,22 +64,10 @@ void AppTaskStart(void *p_arg)
(void *)0,
(INT16U )(OS_TASK_OPT_STK_CHK
| OS_TASK_OPT_STK_CLR));

/* 创建modbus响应帧发送任务 */
OSTaskCreateExt(AppTaskModbusSend,
(void *)0,
(OS_STK *)&AppTaskModbusSendStk[APP_TASK_MODBUS_SEND_STK_SIZE - 1],
(INT8U )APP_TASK_MODBUS_SEND_PRIO,
(INT16U )APP_TASK_MODBUS_SEND_PRIO,
(OS_STK *)&AppTaskModbusSendStk[0],
(INT32U )APP_TASK_MODBUS_SEND_STK_SIZE,
(void *)0,
(INT16U )(OS_TASK_OPT_STK_CHK
| OS_TASK_OPT_STK_CLR));
OSTaskDel(OS_PRIO_SELF); /* 删除启动任务自身 */

OS_EXIT_CRITICAL(); /* 中断 */
OS_EXIT_CRITICAL(); /* 开中断 */
}



+ 14
- 14
iar/settings/uCOS_Modbus.dnx Целия файл

@@ -16,15 +16,15 @@
<ShowSource>1</ShowSource>
</Trace1>
<StLinkDriver>
<stlinkserialNo>24230357</stlinkserialNo>
<stlinkserialNo>30303031</stlinkserialNo>
<stlinkfoundProbes />
<stlinkResetStyle>0</stlinkResetStyle>
<stlinkResetStrategy>0</stlinkResetStrategy>
<CStepIntDis>_ 0</CStepIntDis>
<LeaveTargetRunning>_ 0</LeaveTargetRunning>
<stlinkResetStyle>0</stlinkResetStyle>
<stlinkResetStrategy>0</stlinkResetStrategy>
</StLinkDriver>
<DebugChecksum>
<Checksum>1818899960</Checksum>
<Checksum>2329420531</Checksum>
</DebugChecksum>
<Exceptions>
<StopOnUncaught>_ 0</StopOnUncaught>
@@ -120,6 +120,12 @@
<ShowTimeSum>1</ShowTimeSum>
<SumSortOrder>0</SumSortOrder>
</EventLog>
<DisassembleMode>
<mode>0</mode>
</DisassembleMode>
<Breakpoints2>
<Count>0</Count>
</Breakpoints2>
<TermIOLog>
<LoggingEnabled>_ 0</LoggingEnabled>
<LogFile>_ ""</LogFile>
@@ -129,6 +135,10 @@
<LogFile>_ ""</LogFile>
<Category>_ 0</Category>
</LogFile>
<Aliases>
<Count>0</Count>
<SuppressDialog>0</SuppressDialog>
</Aliases>
<DriverProfiling>
<Enabled>0</Enabled>
<Mode>3</Mode>
@@ -142,14 +152,4 @@
<CallStackStripe>
<ShowTiming>1</ShowTiming>
</CallStackStripe>
<DisassembleMode>
<mode>0</mode>
</DisassembleMode>
<Breakpoints2>
<Count>0</Count>
</Breakpoints2>
<Aliases>
<Count>0</Count>
<SuppressDialog>0</SuppressDialog>
</Aliases>
</settings>

+ 1
- 0
iar/settings/uCOS_Modbus.reggroups Целия файл

@@ -0,0 +1 @@


+ 788
- 788
iar/uCOS_Modbus.dep
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 18
- 12
modbus/modbus.c Целия файл

@@ -20,7 +20,15 @@ void USART1_IRQHandler(void)
{
/*在计算数据长度之前先关闭DMA接收通道,防止计算过程中DMA继续转运数据*/
DMA_Cmd(DMA2_Stream2, DISABLE);
/*清除IDLE中断标志位*/
temp = USART1->SR;
temp = USART1->DR;
(void)temp;

/*清除传输已经完成TCIF2、传输已经完成一半HTIF2标志位*/
DMA_ClearFlag(DMA2_Stream2, DMA_FLAG_TCIF2 | DMA_FLAG_HTIF2);
/*计算数据长度*/
rxLenRemain = DMA_GetCurrDataCounter(DMA2_Stream2);
ModbusRxLen = MODBUS_RX_BUF_SIZE - rxLenRemain;
@@ -30,13 +38,11 @@ void USART1_IRQHandler(void)
OSSemPost(ModbusReceived);
}
/*重新指定接收地址*/
DMA_MemoryTargetConfig(DMA2_Stream2, (uint32_t)ModbusRxBuf, DMA_Memory_0);
/*重启DMA*/
DMA_SetCurrDataCounter(DMA2_Stream2, MODBUS_RX_BUF_SIZE);
DMA_Cmd(DMA2_Stream2, ENABLE);

/*清除IDLE中断标志位*/
temp = USART1->SR;
temp = USART1->DR;
}
OSIntExit(); /*退出中断*/
@@ -51,6 +57,9 @@ void ModbusSend(uint8_t *txBuf, uint16_t len)

/*等待DMA关闭*/
while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE);

/*清除传输已经完成TCIF7、传输已经完成一半HTIF7、FIFO错误FEIF7标志位*/
DMA_ClearFlag(DMA2_Stream7, DMA_FLAG_FEIF7 | DMA_FLAG_HTIF7 | DMA_FLAG_TCIF7);
/*配置发送地址和长度*/
DMA_MemoryTargetConfig(DMA2_Stream7, (uint32_t)txBuf, DMA_Memory_0);
@@ -60,18 +69,15 @@ void ModbusSend(uint8_t *txBuf, uint16_t len)
DMA_Cmd(DMA2_Stream7, ENABLE);
}

/*modbus响应帧发送任务*/
void AppTaskModbusSend (void *p_arg)
{


}


/*modbus协议帧解析任务*/
void AppTaskModbusParse (void *p_arg)
{
while(1)
{
OSTimeDly(OS_TICKS_PER_SEC);
}
}



+ 0
- 3
user/app_cfg.h Целия файл

@@ -63,7 +63,6 @@
#define OS_TASK_TMR_PRIO (OS_LOWEST_PRIO - 2u)

#define APP_TASK_START_PRIO 10u
#define APP_TASK_MODBUS_SEND_PRIO 2u
#define APP_TASK_MODBUS_PARSE_PRIO 3u


@@ -81,8 +80,6 @@

#define APP_TASK_START_STK_SIZE 256u
#define APP_TASK_MODBUS_PARSE_STK_SIZE 512u
#define APP_TASK_MODBUS_SEND_STK_SIZE 512u






Зареждане…
Отказ
Запис