diff --git a/APP/Device/Device_speed/servoMotor_recv.c b/APP/Device/Device_speed/servoMotor_recv.c
index e932d05..a266302 100644
--- a/APP/Device/Device_speed/servoMotor_recv.c
+++ b/APP/Device/Device_speed/servoMotor_recv.c
@@ -78,7 +78,7 @@ static void creat_task_servo_recv_task(void)
(INT8U ) TASK_RECV_VERT_SERVO_PRIO,
(INT16U ) TASK_RECV_VERT_SERVO_PRIO,
(OS_STK *)&task_recv_vert_servo_stk[0],
- (INT32U ) task_recv_vert_servo_stk,
+ (INT32U ) TASK_RECV_HORI_SERVO_STK_SIZE,
(void *) 0,
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
#if (OS_TASK_NAME_EN > 0)
diff --git a/APP/Device/Device_speed/speed_to_servoMotor.c b/APP/Device/Device_speed/speed_to_servoMotor.c
index 5453241..49fe127 100644
--- a/APP/Device/Device_speed/speed_to_servoMotor.c
+++ b/APP/Device/Device_speed/speed_to_servoMotor.c
@@ -105,6 +105,9 @@ void servoSendData(uint8_t motor,uint8_t *data, uint8_t dataLen, uint8_t priorit
//保存数据到链表节点
ptr = OSMemGet(g_memPtr, &err);
+ if (ptr == NULL) {
+ return;
+ }
ptr->length = dataLen;
memcpy(ptr->data, data, dataLen);
@@ -176,8 +179,8 @@ static void ptz_hori_servo_task()
// 高优先级链表中数据先发送
if (g_servoMotorLinkList.horiMotor.LinkListHead_H != NULL) {
//发送数据
-
-
+ CommuTransData(H_MOTOR, g_servoMotorLinkList.horiMotor.LinkListHead_H->data
+ , g_servoMotorLinkList.horiMotor.LinkListHead_H->length);
g_servoMotorLinkList.horiMotor.linkListNum = highPriority;
continue;
@@ -186,8 +189,8 @@ static void ptz_hori_servo_task()
// 高优先级链表中无数据时,发送低优先级中的数据
if (g_servoMotorLinkList.horiMotor.LinkListHead_L != NULL) {
//发送数据
-
-
+ CommuTransData(H_MOTOR, g_servoMotorLinkList.horiMotor.LinkListHead_L->data
+ , g_servoMotorLinkList.horiMotor.LinkListHead_L->length);
g_servoMotorLinkList.horiMotor.linkListNum = lowPriority;
}
@@ -214,17 +217,17 @@ static void ptz_vert_servo_task()
// 高优先级链表中数据先发送
if (g_servoMotorLinkList.vertMotor.LinkListHead_H != NULL) {
g_servoMotorLinkList.vertMotor.linkListNum = highPriority;
+ CommuTransData(V_MOTOR, g_servoMotorLinkList.vertMotor.LinkListHead_H->data
+ , g_servoMotorLinkList.vertMotor.LinkListHead_H->length);
-
-
continue;
}
-
+
// 高优先级链表中无数据时,发送低优先级中的数据
if (g_servoMotorLinkList.vertMotor.LinkListHead_L != NULL) {
g_servoMotorLinkList.vertMotor.linkListNum = highPriority;
-
-
+ CommuTransData(V_MOTOR, g_servoMotorLinkList.vertMotor.LinkListHead_L->data
+ , g_servoMotorLinkList.vertMotor.LinkListHead_L->length);
}
else {
@@ -324,6 +327,14 @@ void init_speed_module(void)
creat_task_hori_servo_task();
creat_task_vert_servo_task();
+
+
+ OSTimeDlyHMSM(0u, 0u, 0u, 500u);//等待硬件初始化成功
+
+ uint8_t buffer[20] = {0};
+ uint8_t buffer_len = 0;
+ buffer_len = WriteMotorOneReg_buffer(H_MOTOR, H02_CONTR_MODE_SELEC, 0, buffer);
+ servoSendData(horiMotorType, buffer, buffer_len, lowPriority);
}
diff --git a/BSP/Driver/servoMotor/motorCommu.c b/BSP/Driver/servoMotor/motorCommu.c
index 3677bcb..ccc61c4 100644
--- a/BSP/Driver/servoMotor/motorCommu.c
+++ b/BSP/Driver/servoMotor/motorCommu.c
@@ -339,7 +339,7 @@ void USART2_IRQHandler(void)
{
pCommuDeal->pDmaRsvBuffSelect = DMA_RSVBUFF_SELECT2;
dma_channel_disable(g_MotorDmaBuff[H_MOTOR].dmaNo, g_MotorDmaBuff[H_MOTOR].dmaRxch);//лûҪȽDMA
- dmaStruct.memory0_addr = (uint32_t)(pCommuDeal->pDmaRsvBuff2);
+ dmaStruct.memory0_addr = (uint32_t)(pCommuDeal->pDmaRsvBuff2);
dma_single_data_mode_init(g_MotorDmaBuff[H_MOTOR].dmaNo, g_MotorDmaBuff[H_MOTOR].dmaRxch, &dmaStruct);
dma_channel_enable(g_MotorDmaBuff[H_MOTOR].dmaNo, g_MotorDmaBuff[H_MOTOR].dmaRxch);
}
@@ -556,7 +556,7 @@ bool CommuTransData(uint8_t motorNo, uint8_t* buffer, int32_t len)
pCommuDeal->dmaTranFlag = DMA_TRANS_BUSY;
CommuDmaTra(motorNo, buffer, len);
return true;
- }
+ }
return false;
}
diff --git a/BSP/Driver/servoMotor/servoMotor.c b/BSP/Driver/servoMotor/servoMotor.c
index ef7ee7a..20cf02c 100644
--- a/BSP/Driver/servoMotor/servoMotor.c
+++ b/BSP/Driver/servoMotor/servoMotor.c
@@ -80,6 +80,40 @@ bool MotorReplyForWrite(uint8_t motorNo, uint8_t* userBuff, uint8_t len)
return true;
}
+/*
+ӻַ Ĵַ Ĵַ ݸλ ݵλ crcУλ crcУλ
+ 01H 06H 02H 00H 00H 01H 49H B2H
+*/
+/**
+* @brief ŷٶģʽдĴ
+* @param motorNoдֱˮƽ
+* @param regAddrҪдļĴ
+* @param dataҪĴд
+* @param frameBuff: ͵
+* @return дframeBuffij
+*/
+uint8_t WriteMotorOneReg_buffer(uint8_t motorNo, uint16_t regAddr, uint16_t data, uint8_t *frameBuff)
+{
+ uint16_t crc;
+ if ( motorNo == H_MOTOR )
+ {
+ frameBuff[0] = H_MOTOR_ADDR;//ڲһһģʽˮƽֱӻַ0x01̨Ҳչ
+ }
+ else
+ {
+ frameBuff[0] = V_MOTOR_ADDR;
+ }
+ frameBuff[1] = WRITE_ONE_REG;
+ frameBuff[2] = regAddr >> WRITE_ONE_REG_BUFFNUM;
+ frameBuff[3] = regAddr & 0xff;
+ frameBuff[4] = data >> WRITE_ONE_REG_BUFFNUM;
+ frameBuff[5] = data & 0xff;
+ crc = ModbusCRC16(frameBuff, WRITE_ONE_REG_BUFFNUM - 2);
+ frameBuff[6] = crc & 0xff;
+ frameBuff[7] = crc >> WRITE_ONE_REG_BUFFNUM;
+
+ return 8;
+}
/**
* @brief ŷʼ
@@ -94,22 +128,22 @@ void servoMotorInit(void)
V_MOTOR_OPEN;
CommuDrvInit();//ŷRS485ͨѶʼ
- OSTimeDlyHMSM(0u, 0u, 0u, 500u);//ȴӲʼɹ
- WriteMotorOneReg(H_MOTOR, H02_CONTR_MODE_SELEC, 0);//H0200,ѡٶģʽ
- OSTimeDlyHMSM(0u, 0u, 0u, 5u);
+ // OSTimeDlyHMSM(0u, 0u, 0u, 500u);//ȴӲʼɹ
+ // WriteMotorOneReg(H_MOTOR, H02_CONTR_MODE_SELEC, 0);//H0200,ѡٶģʽ
+ // OSTimeDlyHMSM(0u, 0u, 0u, 5u);
- WriteMotorOneReg(H_MOTOR, H04_DO1_FUNC_SELEC, 19);
- OSTimeDlyHMSM(0u, 0u, 0u, 5u);
+ // WriteMotorOneReg(H_MOTOR, H04_DO1_FUNC_SELEC, 19);
+ // OSTimeDlyHMSM(0u, 0u, 0u, 5u);
- WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, 100);//ٶΪ100rpm
- OSTimeDlyHMSM(0u, 0u, 0u, 5u);
+ // WriteMotorOneReg(H_MOTOR, H06_SPEED_COMMU_SET_VALUE, 100);//ٶΪ100rpm
+ // OSTimeDlyHMSM(0u, 0u, 0u, 5u);
- WriteMotorOneReg(H_MOTOR, H06_SPEED_UP_SLOPE_VALUE, 3000);//ٶ3000
- OSTimeDlyHMSM(0u, 0u, 0u, 5u);
+ // WriteMotorOneReg(H_MOTOR, H06_SPEED_UP_SLOPE_VALUE, 3000);//ٶ3000
+ // OSTimeDlyHMSM(0u, 0u, 0u, 5u);
- WriteMotorOneReg(H_MOTOR, H06_SPEED_DOWN_SLOPE_VALUE, 2000);//ٶ2000
- OSTimeDlyHMSM(0u, 0u, 0u, 5u);
+ // WriteMotorOneReg(H_MOTOR, H06_SPEED_DOWN_SLOPE_VALUE, 2000);//ٶ2000
+ // OSTimeDlyHMSM(0u, 0u, 0u, 5u);
- WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 1);//ֻˮƽ
- OSTimeDlyHMSM(0u, 0u, 0u, 5u);
+ // WriteMotorOneReg(H_MOTOR, H03_DI1_LOGICAL_SELEC, 1);//ֻˮƽ
+ // OSTimeDlyHMSM(0u, 0u, 0u, 5u);
}
\ No newline at end of file
diff --git a/BSP/Driver/servoMotor/servoMotor.h b/BSP/Driver/servoMotor/servoMotor.h
index e77d6cb..a4d70e7 100644
--- a/BSP/Driver/servoMotor/servoMotor.h
+++ b/BSP/Driver/servoMotor/servoMotor.h
@@ -78,6 +78,6 @@ bool MotorReplyForWrite(uint8_t motorNo, uint8_t* userBuff, uint8_t len);
* @return
*/
void servoMotorInit(void);
-
+uint8_t WriteMotorOneReg_buffer(uint8_t motorNo, uint16_t regAddr, uint16_t data, uint8_t *frameBuff);
#endif
\ No newline at end of file
diff --git a/PROJECT/OS2.ewp b/PROJECT/OS2.ewp
index 571960f..a2f27a5 100644
--- a/PROJECT/OS2.ewp
+++ b/PROJECT/OS2.ewp
@@ -741,7 +741,7 @@
- 1
+ 56
inputOutputBased
@@ -826,7 +826,7 @@