| @@ -7,7 +7,7 @@ | |||||
| #define MODBUS_TX_BUF_SIZE 256 | #define MODBUS_TX_BUF_SIZE 256 | ||||
| /*modbus通信波特率*/ | /*modbus通信波特率*/ | ||||
| #define MODBUS_USART_BAUDRATE 19200 | |||||
| #define MODBUS_USART_BAUDRATE 115200 | |||||
| extern uint8_t ModbusRxBuf[MODBUS_RX_BUF_SIZE]; | extern uint8_t ModbusRxBuf[MODBUS_RX_BUF_SIZE]; | ||||
| @@ -3,17 +3,16 @@ | |||||
| /*定义信号量*/ | /*定义信号量*/ | ||||
| OS_EVENT* ModbusReceived; /*接收到modbus请求报文*/ | OS_EVENT* ModbusReceived; /*接收到modbus请求报文*/ | ||||
| OS_EVENT* ModbusAssembled; /*modbus响应帧组装完成*/ | |||||
| /*定义任务栈*/ | /*定义任务栈*/ | ||||
| static OS_STK AppTaskStartStk[APP_TASK_START_STK_SIZE]; | static OS_STK AppTaskStartStk[APP_TASK_START_STK_SIZE]; | ||||
| static OS_STK AppTaskModbusParseStk[APP_TASK_MODBUS_PARSE_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 AppTaskStart (void *p_arg); | ||||
| void AppTaskModbusParse (void *p_arg); | void AppTaskModbusParse (void *p_arg); | ||||
| void AppTaskModbusSend (void *p_arg); | |||||
| @@ -21,7 +20,7 @@ int main() | |||||
| { | { | ||||
| Sys_Config(); /* stm32系统初始化配置 */ | Sys_Config(); /* stm32系统初始化配置 */ | ||||
| ModbusHardwareInit(); | |||||
| ModbusHardwareInit(); /*外设初始化*/ | |||||
| OSInit(); /* uCOS系统初始化 */ | OSInit(); /* uCOS系统初始化 */ | ||||
| @@ -53,7 +52,6 @@ void AppTaskStart(void *p_arg) | |||||
| /*创建信号量*/ | /*创建信号量*/ | ||||
| ModbusReceived = OSSemCreate(0); | ModbusReceived = OSSemCreate(0); | ||||
| ModbusAssembled = OSSemCreate(0); | |||||
| /* 创建modbus协议帧解析任务 */ | /* 创建modbus协议帧解析任务 */ | ||||
| OSTaskCreateExt(AppTaskModbusParse, | OSTaskCreateExt(AppTaskModbusParse, | ||||
| @@ -66,22 +64,10 @@ void AppTaskStart(void *p_arg) | |||||
| (void *)0, | (void *)0, | ||||
| (INT16U )(OS_TASK_OPT_STK_CHK | (INT16U )(OS_TASK_OPT_STK_CHK | ||||
| | OS_TASK_OPT_STK_CLR)); | | 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); /* 删除启动任务自身 */ | OSTaskDel(OS_PRIO_SELF); /* 删除启动任务自身 */ | ||||
| OS_EXIT_CRITICAL(); /* 关中断 */ | |||||
| OS_EXIT_CRITICAL(); /* 开中断 */ | |||||
| } | } | ||||
| @@ -16,15 +16,15 @@ | |||||
| <ShowSource>1</ShowSource> | <ShowSource>1</ShowSource> | ||||
| </Trace1> | </Trace1> | ||||
| <StLinkDriver> | <StLinkDriver> | ||||
| <stlinkserialNo>24230357</stlinkserialNo> | |||||
| <stlinkserialNo>30303031</stlinkserialNo> | |||||
| <stlinkfoundProbes /> | <stlinkfoundProbes /> | ||||
| <stlinkResetStyle>0</stlinkResetStyle> | |||||
| <stlinkResetStrategy>0</stlinkResetStrategy> | |||||
| <CStepIntDis>_ 0</CStepIntDis> | <CStepIntDis>_ 0</CStepIntDis> | ||||
| <LeaveTargetRunning>_ 0</LeaveTargetRunning> | <LeaveTargetRunning>_ 0</LeaveTargetRunning> | ||||
| <stlinkResetStyle>0</stlinkResetStyle> | |||||
| <stlinkResetStrategy>0</stlinkResetStrategy> | |||||
| </StLinkDriver> | </StLinkDriver> | ||||
| <DebugChecksum> | <DebugChecksum> | ||||
| <Checksum>1818899960</Checksum> | |||||
| <Checksum>2329420531</Checksum> | |||||
| </DebugChecksum> | </DebugChecksum> | ||||
| <Exceptions> | <Exceptions> | ||||
| <StopOnUncaught>_ 0</StopOnUncaught> | <StopOnUncaught>_ 0</StopOnUncaught> | ||||
| @@ -120,6 +120,12 @@ | |||||
| <ShowTimeSum>1</ShowTimeSum> | <ShowTimeSum>1</ShowTimeSum> | ||||
| <SumSortOrder>0</SumSortOrder> | <SumSortOrder>0</SumSortOrder> | ||||
| </EventLog> | </EventLog> | ||||
| <DisassembleMode> | |||||
| <mode>0</mode> | |||||
| </DisassembleMode> | |||||
| <Breakpoints2> | |||||
| <Count>0</Count> | |||||
| </Breakpoints2> | |||||
| <TermIOLog> | <TermIOLog> | ||||
| <LoggingEnabled>_ 0</LoggingEnabled> | <LoggingEnabled>_ 0</LoggingEnabled> | ||||
| <LogFile>_ ""</LogFile> | <LogFile>_ ""</LogFile> | ||||
| @@ -129,6 +135,10 @@ | |||||
| <LogFile>_ ""</LogFile> | <LogFile>_ ""</LogFile> | ||||
| <Category>_ 0</Category> | <Category>_ 0</Category> | ||||
| </LogFile> | </LogFile> | ||||
| <Aliases> | |||||
| <Count>0</Count> | |||||
| <SuppressDialog>0</SuppressDialog> | |||||
| </Aliases> | |||||
| <DriverProfiling> | <DriverProfiling> | ||||
| <Enabled>0</Enabled> | <Enabled>0</Enabled> | ||||
| <Mode>3</Mode> | <Mode>3</Mode> | ||||
| @@ -142,14 +152,4 @@ | |||||
| <CallStackStripe> | <CallStackStripe> | ||||
| <ShowTiming>1</ShowTiming> | <ShowTiming>1</ShowTiming> | ||||
| </CallStackStripe> | </CallStackStripe> | ||||
| <DisassembleMode> | |||||
| <mode>0</mode> | |||||
| </DisassembleMode> | |||||
| <Breakpoints2> | |||||
| <Count>0</Count> | |||||
| </Breakpoints2> | |||||
| <Aliases> | |||||
| <Count>0</Count> | |||||
| <SuppressDialog>0</SuppressDialog> | |||||
| </Aliases> | |||||
| </settings> | </settings> | ||||
| @@ -0,0 +1 @@ | |||||
| | |||||
| @@ -20,7 +20,15 @@ void USART1_IRQHandler(void) | |||||
| { | { | ||||
| /*在计算数据长度之前先关闭DMA接收通道,防止计算过程中DMA继续转运数据*/ | /*在计算数据长度之前先关闭DMA接收通道,防止计算过程中DMA继续转运数据*/ | ||||
| DMA_Cmd(DMA2_Stream2, DISABLE); | 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); | rxLenRemain = DMA_GetCurrDataCounter(DMA2_Stream2); | ||||
| ModbusRxLen = MODBUS_RX_BUF_SIZE - rxLenRemain; | ModbusRxLen = MODBUS_RX_BUF_SIZE - rxLenRemain; | ||||
| @@ -30,13 +38,11 @@ void USART1_IRQHandler(void) | |||||
| OSSemPost(ModbusReceived); | OSSemPost(ModbusReceived); | ||||
| } | } | ||||
| /*重新指定接收地址*/ | |||||
| DMA_MemoryTargetConfig(DMA2_Stream2, (uint32_t)ModbusRxBuf, DMA_Memory_0); | |||||
| /*重启DMA*/ | /*重启DMA*/ | ||||
| DMA_SetCurrDataCounter(DMA2_Stream2, MODBUS_RX_BUF_SIZE); | DMA_SetCurrDataCounter(DMA2_Stream2, MODBUS_RX_BUF_SIZE); | ||||
| DMA_Cmd(DMA2_Stream2, ENABLE); | DMA_Cmd(DMA2_Stream2, ENABLE); | ||||
| /*清除IDLE中断标志位*/ | |||||
| temp = USART1->SR; | |||||
| temp = USART1->DR; | |||||
| } | } | ||||
| OSIntExit(); /*退出中断*/ | OSIntExit(); /*退出中断*/ | ||||
| @@ -51,6 +57,9 @@ void ModbusSend(uint8_t *txBuf, uint16_t len) | |||||
| /*等待DMA关闭*/ | /*等待DMA关闭*/ | ||||
| while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE); | 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_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); | DMA_Cmd(DMA2_Stream7, ENABLE); | ||||
| } | } | ||||
| /*modbus响应帧发送任务*/ | |||||
| void AppTaskModbusSend (void *p_arg) | |||||
| { | |||||
| } | |||||
| /*modbus协议帧解析任务*/ | /*modbus协议帧解析任务*/ | ||||
| void AppTaskModbusParse (void *p_arg) | void AppTaskModbusParse (void *p_arg) | ||||
| { | { | ||||
| while(1) | |||||
| { | |||||
| OSTimeDly(OS_TICKS_PER_SEC); | |||||
| } | |||||
| } | } | ||||
| @@ -63,7 +63,6 @@ | |||||
| #define OS_TASK_TMR_PRIO (OS_LOWEST_PRIO - 2u) | #define OS_TASK_TMR_PRIO (OS_LOWEST_PRIO - 2u) | ||||
| #define APP_TASK_START_PRIO 10u | #define APP_TASK_START_PRIO 10u | ||||
| #define APP_TASK_MODBUS_SEND_PRIO 2u | |||||
| #define APP_TASK_MODBUS_PARSE_PRIO 3u | #define APP_TASK_MODBUS_PARSE_PRIO 3u | ||||
| @@ -81,8 +80,6 @@ | |||||
| #define APP_TASK_START_STK_SIZE 256u | #define APP_TASK_START_STK_SIZE 256u | ||||
| #define APP_TASK_MODBUS_PARSE_STK_SIZE 512u | #define APP_TASK_MODBUS_PARSE_STK_SIZE 512u | ||||
| #define APP_TASK_MODBUS_SEND_STK_SIZE 512u | |||||