| @@ -18,8 +18,8 @@ void AppTaskModbusParse (void *p_arg); | |||||
| void AppTaskModbusWriteFlash(void *p_arg); | void AppTaskModbusWriteFlash(void *p_arg); | ||||
| static void AppTaskModbusConnect(void *p_arg); | static void AppTaskModbusConnect(void *p_arg); | ||||
| extern uint8_t ModbusCoil[1250]; /*10000/8=1250*/ | |||||
| extern uint16_t ModbusReg[10000]; | |||||
| //extern uint8_t ModbusCoil[1250]; /*10000/8=1250*/ | |||||
| //extern uint16_t ModbusReg[10000]; | |||||
| int main() | int main() | ||||
| @@ -110,6 +110,7 @@ void AppTaskStart(void *p_arg) | |||||
| OS_EXIT_CRITICAL(); /* 开中断 */ | OS_EXIT_CRITICAL(); /* 开中断 */ | ||||
| } | } | ||||
| /*判断modbus是否连接任务*/ | |||||
| static void AppTaskModbusConnect(void *p_arg) | static void AppTaskModbusConnect(void *p_arg) | ||||
| { | { | ||||
| OS_ERR err; | OS_ERR err; | ||||
| @@ -122,4 +122,4 @@ void ModbusHardwareInit(void) | |||||
| ModbusUsartInit(); | ModbusUsartInit(); | ||||
| ModbusDmaInit(); | ModbusDmaInit(); | ||||
| ModbusNvicInit(); | ModbusNvicInit(); | ||||
| } | |||||
| } | |||||
| @@ -153,11 +153,11 @@ | |||||
| <RecentlyUsedMenus>1</RecentlyUsedMenus> | <RecentlyUsedMenus>1</RecentlyUsedMenus> | ||||
| <MenuShadows>1</MenuShadows> | <MenuShadows>1</MenuShadows> | ||||
| <ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay> | <ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay> | ||||
| <CommandsUsage>B80200001D001B8F000001000000138600000B00000010860000CF00000020810000010000000C810000020000000D800000020000000486000002000000568600001B0100000084000001000000148100000100000030840000010000000E810000010000005E8600000B0000001F8100000B0000008E8600000100000000E10000010000000B81000001000000058400000100000069860000010000001486000003000000198F00000100000005810000010000000284000002000000118600006800000000860000020000001084000006000000468100003500000008860000020000005D86000004000000</CommandsUsage> | |||||
| <CommandsUsage>C20200001D00138600000B0000001B8F00000100000010860000D400000020810000010000000D800000020000000C810000020000000486000002000000568600001B0100001481000001000000008400000100000030840000010000001F8100000B0000005E8600000B0000000E810000010000000B8100000100000000E10000010000008E860000010000001486000003000000698600000100000005840000010000000086000002000000118600006C00000002840000020000000581000001000000198F000001000000468100003600000010840000060000005D860000040000000886000002000000</CommandsUsage> | |||||
| </MFCToolBarParameters> | </MFCToolBarParameters> | ||||
| <CommandManager> | <CommandManager> | ||||
| <CommandsWithoutImages>0400FFFFFFFF838600005886000004DC0000</CommandsWithoutImages> | <CommandsWithoutImages>0400FFFFFFFF838600005886000004DC0000</CommandsWithoutImages> | ||||
| <MenuUserImages>1C000286000013000000578600001C0000000D8600001900000023920000000000000A8600002D000000078600002A000000048600002700000001860000120000009A8600001A000000008400007A0000000C860000180000001A86000034000000098600002C00000006860000290000008E8600003D0000000386000014000000698600003A000000008600001100000055860000080000000E8600001B0000000B8600002E000000C386000004000000A18600003E000000088600002B0000000586000028000000C08600000E00000037870000030000001686000033000000</MenuUserImages> | |||||
| <MenuUserImages>1C00578600001C000000028600001300000023920000000000000D860000190000000A8600002D000000078600002A00000004860000270000009A8600001A0000000186000012000000008400007A0000000C86000018000000098600002C0000001A860000340000008E8600003D0000000686000029000000698600003A0000000386000014000000558600000800000000860000110000000E8600001B0000000B8600002E000000088600002B000000A18600003E000000C38600000400000016860000330000003787000003000000C08600000E0000000586000028000000</MenuUserImages> | |||||
| </CommandManager> | </CommandManager> | ||||
| <Pane-59393> | <Pane-59393> | ||||
| <ID>0</ID> | <ID>0</ID> | ||||
| @@ -1125,7 +1125,7 @@ | |||||
| </BasePane-34049> | </BasePane-34049> | ||||
| <MFCToolBar-34050> | <MFCToolBar-34050> | ||||
| <Name>Trace</Name> | <Name>Trace</Name> | ||||
| <Buttons>00200000010000000200FFFF01001100434D4643546F6F6C426172427574746F6E53920000000004008A000000FFFEFF03450054004D0000000000000000000000000001000000010000000180549200000000000025000000FFFEFF03530057004F00000000000000000000000000010000000100000000000000FFFEFF05540072006100630065002F000000</Buttons> | |||||
| <Buttons>00200000010000000200FFFF01001100434D4643546F6F6C426172427574746F6E539200000000040089000000FFFEFF03450054004D0000000000000000000000000001000000010000000180549200000000000025000000FFFEFF03530057004F00000000000000000000000000010000000100000000000000FFFEFF05540072006100630065002F000000</Buttons> | |||||
| </MFCToolBar-34050> | </MFCToolBar-34050> | ||||
| <Pane-34050> | <Pane-34050> | ||||
| <ID>34050</ID> | <ID>34050</ID> | ||||
| @@ -1142,7 +1142,7 @@ | |||||
| </BasePane-34050> | </BasePane-34050> | ||||
| <MFCToolBar-34051> | <MFCToolBar-34051> | ||||
| <Name>Main</Name> | <Name>Main</Name> | ||||
| <Buttons>00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000067000000FFFEFF000000000000000000000000000100000001000000018001E100000000000068000000FFFEFF000000000000000000000000000100000001000000018003E10000000000006A000000FFFEFF000000000000000000000000000100000001000000018000810000000000004B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000000006D000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004006F000000FFFEFF000000000000000000000000000100000001000000018022E10000000004006E000000FFFEFF000000000000000000000000000100000001000000018025E100000000000071000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040074000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040075000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004005E000000FFFEFF000000000000000000000000000100000001000000018024E100000000000070000000FFFEFF000000000000000000000000000100000001000000018028E100000000040072000000FFFEFF000000000000000000000000000100000001000000018029E100000000000073000000FFFEFF000000000000000000000000000100000001000000018002810000000000004D000000FFFEFF0000000000000000000000000001000000010000000180298100000000000062000000FFFEFF0000000000000000000000000001000000010000000180278100000000000060000000FFFEFF0000000000000000000000000001000000010000000180288100000000000061000000FFFEFF00000000000000000000000000010000000100000001801D810000000000005A000000FFFEFF00000000000000000000000000010000000100000001801E810000000004005B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B8100000000000051000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000052000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000066000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F810000000000005C000000FFFEFF000000000000000000000000000100000001000000018020810000000000005D000000FFFEFF0000000000000000000000000001000000010000000180468100000000020064000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF020000</Buttons> | |||||
| <Buttons>00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000066000000FFFEFF000000000000000000000000000100000001000000018001E100000000000067000000FFFEFF000000000000000000000000000100000001000000018003E100000000000069000000FFFEFF000000000000000000000000000100000001000000018000810000000000004A000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000000006C000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004006E000000FFFEFF000000000000000000000000000100000001000000018022E10000000004006D000000FFFEFF000000000000000000000000000100000001000000018025E100000000000070000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040073000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040074000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004005D000000FFFEFF000000000000000000000000000100000001000000018024E10000000000006F000000FFFEFF000000000000000000000000000100000001000000018028E100000000040071000000FFFEFF000000000000000000000000000100000001000000018029E100000000000072000000FFFEFF000000000000000000000000000100000001000000018002810000000000004C000000FFFEFF0000000000000000000000000001000000010000000180298100000000000061000000FFFEFF000000000000000000000000000100000001000000018027810000000000005F000000FFFEFF0000000000000000000000000001000000010000000180288100000000000060000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040059000000FFFEFF00000000000000000000000000010000000100000001801E810000000004005A000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B8100000000000050000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000051000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000065000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F810000000000005B000000FFFEFF000000000000000000000000000100000001000000018020810000000000005C000000FFFEFF0000000000000000000000000001000000010000000180468100000000020063000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF020000</Buttons> | |||||
| </MFCToolBar-34051> | </MFCToolBar-34051> | ||||
| <Pane-34051> | <Pane-34051> | ||||
| <ID>34051</ID> | <ID>34051</ID> | ||||
| @@ -16,7 +16,7 @@ | |||||
| <ShowSource>1</ShowSource> | <ShowSource>1</ShowSource> | ||||
| </Trace1> | </Trace1> | ||||
| <StLinkDriver> | <StLinkDriver> | ||||
| <stlinkserialNo>30303031</stlinkserialNo> | |||||
| <stlinkserialNo>24230357</stlinkserialNo> | |||||
| <stlinkfoundProbes /> | <stlinkfoundProbes /> | ||||
| <stlinkResetStyle>0</stlinkResetStyle> | <stlinkResetStyle>0</stlinkResetStyle> | ||||
| <stlinkResetStrategy>0</stlinkResetStrategy> | <stlinkResetStrategy>0</stlinkResetStrategy> | ||||
| @@ -24,7 +24,7 @@ | |||||
| <LeaveTargetRunning>_ 0</LeaveTargetRunning> | <LeaveTargetRunning>_ 0</LeaveTargetRunning> | ||||
| </StLinkDriver> | </StLinkDriver> | ||||
| <DebugChecksum> | <DebugChecksum> | ||||
| <Checksum>3595631932</Checksum> | |||||
| <Checksum>2248251518</Checksum> | |||||
| </DebugChecksum> | </DebugChecksum> | ||||
| <Exceptions> | <Exceptions> | ||||
| <StopOnUncaught>_ 0</StopOnUncaught> | <StopOnUncaught>_ 0</StopOnUncaught> | ||||
| @@ -24,93 +24,6 @@ uint8_t ModbusTxBuf[MODBUS_TX_BUF_SIZE]; /*发送数组*/ | |||||
| uint16_t ModbusTxLen = 0; /*发送数据长度*/ | uint16_t ModbusTxLen = 0; /*发送数据长度*/ | ||||
| uint8_t ModbusErrReply(uint8_t func, uint8_t err); | |||||
| uint16_t Crc16(const uint8_t *data, uint16_t length); | |||||
| void AddCrc16(uint8_t *data, uint16_t length); | |||||
| int8_t ChcekCrc16(uint16_t recCrc16, uint8_t *data, uint16_t length); | |||||
| uint8_t ModbusReadCoils(uint16_t addres, uint16_t num); | |||||
| uint8_t ModbusWriteCoils(uint16_t addres, uint16_t num, uint8_t *data); | |||||
| uint8_t ModbusReadRegs(uint16_t addres, uint16_t num); | |||||
| uint8_t ModbusWriteRegs(uint16_t addres, uint16_t num, uint8_t *data); | |||||
| uint8_t ModbusWriteReg(uint16_t addres, uint8_t *data); | |||||
| uint8_t ModbusWriteCoil(uint16_t addres, uint8_t *data); | |||||
| uint8_t ModbusExtReadOdd(uint16_t num); | |||||
| /*USART接收空闲中断*/ | |||||
| void USART1_IRQHandler(void) | |||||
| { | |||||
| OSIntEnter(); /*进入中断*/ | |||||
| uint32_t temp; | |||||
| uint16_t rxLenRemain; | |||||
| if(USART_GetITStatus(USART1, USART_IT_IDLE) == SET) | |||||
| { | |||||
| /*在计算数据长度之前先关闭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; | |||||
| /*释放接收到数据帧信号量,唤醒帧解析任务*/ | |||||
| if(ModbusRxLen != 0) | |||||
| { | |||||
| 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); | |||||
| } | |||||
| OSIntExit(); /*退出中断*/ | |||||
| } | |||||
| /*modbus响应帧发送*/ | |||||
| void ModbusSend(uint8_t *txBuf, uint16_t len) | |||||
| { | |||||
| if(DMA_GetCmdStatus(DMA2_Stream7) == ENABLE) | |||||
| { | |||||
| /*等待DMA发送完成*/ | |||||
| while(DMA_GetFlagStatus(DMA2_Stream7, DMA_FLAG_TCIF7) == RESET); | |||||
| } | |||||
| /*先关闭DMA发送通道*/ | |||||
| DMA_Cmd(DMA2_Stream7, DISABLE); | |||||
| /*等待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); | |||||
| DMA_SetCurrDataCounter(DMA2_Stream7, len); | |||||
| /*等待串口发送完成*/ | |||||
| while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); | |||||
| /*在此处等待3.5个字符的时间*/ | |||||
| /*启动 DMA 发送*/ | |||||
| DMA_Cmd(DMA2_Stream7, ENABLE); | |||||
| } | |||||
| /*modbus协议帧解析任务*/ | /*modbus协议帧解析任务*/ | ||||
| void AppTaskModbusParse (void *p_arg) | void AppTaskModbusParse (void *p_arg) | ||||
| { | { | ||||
| @@ -129,9 +42,9 @@ void AppTaskModbusParse (void *p_arg) | |||||
| memcpy(rxBuf, ModbusRxBuf, rxLen); | memcpy(rxBuf, ModbusRxBuf, rxLen); | ||||
| /*帧分解*/ | /*帧分解*/ | ||||
| frame.crc = ((uint16_t)(rxBuf[rxLen - 2])) | ((uint16_t)rxBuf[rxLen - 1] << 8); | |||||
| frame.slaveAddres = rxBuf[0]; | frame.slaveAddres = rxBuf[0]; | ||||
| frame.func = rxBuf[1]; | frame.func = rxBuf[1]; | ||||
| frame.crc = ((uint16_t)(rxBuf[rxLen - 2])) | ((uint16_t)rxBuf[rxLen - 1] << 8); | |||||
| frame.opeAddres = ((uint16_t)rxBuf[2] << 8) | ((uint16_t)rxBuf[3]); | frame.opeAddres = ((uint16_t)rxBuf[2] << 8) | ((uint16_t)rxBuf[3]); | ||||
| frame.opeNum = ((uint16_t)rxBuf[4] << 8) | ((uint16_t)rxBuf[5]); | frame.opeNum = ((uint16_t)rxBuf[4] << 8) | ((uint16_t)rxBuf[5]); | ||||
| @@ -197,8 +110,7 @@ void AppTaskModbusParse (void *p_arg) | |||||
| ModbusSend(ModbusTxBuf, ModbusTxLen); | ModbusSend(ModbusTxBuf, ModbusTxLen); | ||||
| } | } | ||||
| if(ModbusErr == 0 && (frame.func == 0x0F | |||||
| || frame.func == 0x10 | |||||
| if(ModbusErr == 0 && (frame.func == 0x0F || frame.func == 0x10 | |||||
| || frame.func == 0x05 || frame.func == 0x06)) | || frame.func == 0x05 || frame.func == 0x06)) | ||||
| { | { | ||||
| /*释放写FLASH信号量*/ | /*释放写FLASH信号量*/ | ||||
| @@ -566,6 +478,77 @@ uint8_t ModbusWriteReg(uint16_t addres, uint8_t *data) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| /*USART接收空闲中断*/ | |||||
| void USART1_IRQHandler(void) | |||||
| { | |||||
| OSIntEnter(); /*进入中断*/ | |||||
| uint32_t temp; | |||||
| uint16_t rxLenRemain; | |||||
| if(USART_GetITStatus(USART1, USART_IT_IDLE) == SET) | |||||
| { | |||||
| /*在计算数据长度之前先关闭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; | |||||
| /*释放接收到数据帧信号量,唤醒帧解析任务*/ | |||||
| if(ModbusRxLen != 0) | |||||
| { | |||||
| 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); | |||||
| } | |||||
| OSIntExit(); /*退出中断*/ | |||||
| } | |||||
| /*modbus响应帧发送*/ | |||||
| void ModbusSend(uint8_t *txBuf, uint16_t len) | |||||
| { | |||||
| if(DMA_GetCmdStatus(DMA2_Stream7) == ENABLE) | |||||
| { | |||||
| /*等待DMA发送完成*/ | |||||
| while(DMA_GetFlagStatus(DMA2_Stream7, DMA_FLAG_TCIF7) == RESET); | |||||
| } | |||||
| /*先关闭DMA发送通道*/ | |||||
| DMA_Cmd(DMA2_Stream7, DISABLE); | |||||
| /*等待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); | |||||
| DMA_SetCurrDataCounter(DMA2_Stream7, len); | |||||
| /*等待串口发送完成*/ | |||||
| while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); | |||||
| /*启动 DMA 发送*/ | |||||
| DMA_Cmd(DMA2_Stream7, ENABLE); | |||||
| } | |||||
| uint8_t ModbusExtReadOdd(uint16_t num) | uint8_t ModbusExtReadOdd(uint16_t num) | ||||
| { | { | ||||
| uint8_t i = 0; | uint8_t i = 0; | ||||
| @@ -622,6 +605,8 @@ uint8_t ModbusExtReadOdd(uint16_t num) | |||||
| AddCrc16(ModbusTxBuf, 3 + dataLen); | AddCrc16(ModbusTxBuf, 3 + dataLen); | ||||
| ModbusTxLen = 5 + dataLen; | ModbusTxLen = 5 + dataLen; | ||||
| } | } | ||||
| /*演示2ms*/ | |||||
| OSTimeDly(OS_TICKS_PER_SEC / 500); | |||||
| ModbusSend(ModbusTxBuf, ModbusTxLen); | ModbusSend(ModbusTxBuf, ModbusTxLen); | ||||
| } | } | ||||
| return 0; | return 0; | ||||
| @@ -40,7 +40,18 @@ typedef struct Modbus_Frame | |||||
| /*接收到数据帧信号量*/ | /*接收到数据帧信号量*/ | ||||
| extern OS_EVENT *ModbusReceived; | extern OS_EVENT *ModbusReceived; | ||||
| uint8_t ModbusErrReply(uint8_t func, uint8_t err); | |||||
| uint16_t Crc16(const uint8_t *data, uint16_t length); | |||||
| void AddCrc16(uint8_t *data, uint16_t length); | |||||
| int8_t ChcekCrc16(uint16_t recCrc16, uint8_t *data, uint16_t length); | |||||
| uint8_t ModbusReadCoils(uint16_t addres, uint16_t num); | |||||
| uint8_t ModbusWriteCoils(uint16_t addres, uint16_t num, uint8_t *data); | |||||
| uint8_t ModbusReadRegs(uint16_t addres, uint16_t num); | |||||
| uint8_t ModbusWriteRegs(uint16_t addres, uint16_t num, uint8_t *data); | |||||
| uint8_t ModbusWriteReg(uint16_t addres, uint8_t *data); | |||||
| uint8_t ModbusWriteCoil(uint16_t addres, uint8_t *data); | |||||
| uint8_t ModbusExtReadOdd(uint16_t num); | |||||
| void ModbusSend(uint8_t *txBuf, uint16_t len); | |||||
| #endif | #endif | ||||
| @@ -15,6 +15,7 @@ uint8_t ModbusFlashWrite(void); | |||||
| uint8_t ModbusErrReply(uint8_t func, uint8_t err); | uint8_t ModbusErrReply(uint8_t func, uint8_t err); | ||||
| /*flash写入任务*/ | |||||
| void AppTaskModbusWriteFlash(void *p_arg) | void AppTaskModbusWriteFlash(void *p_arg) | ||||
| { | { | ||||
| OS_ERR err; | OS_ERR err; | ||||
| @@ -24,7 +25,7 @@ void AppTaskModbusWriteFlash(void *p_arg) | |||||
| OSTimeDly(OS_TICKS_PER_SEC); | OSTimeDly(OS_TICKS_PER_SEC); | ||||
| while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); | while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); | ||||
| // ModbusErr = ModbusFlashWrite(); | |||||
| ModbusErr = ModbusFlashWrite(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -62,6 +63,7 @@ uint8_t ModbusFlashWrite(void) | |||||
| addres += 2; | addres += 2; | ||||
| } | } | ||||
| addres = MODBUS_FLASH_REG_ADDR; | addres = MODBUS_FLASH_REG_ADDR; | ||||
| for(uint16_t i = 0; i < 10000; i++) | for(uint16_t i = 0; i < 10000; i++) | ||||
| { | { | ||||