| @@ -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]; | |||
| @@ -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(); /* 开中断 */ | |||
| } | |||
| @@ -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> | |||
| @@ -0,0 +1 @@ | |||
| | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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 | |||