本帖最后由 TLLED 于 2018-9-1 22:40 编辑 实验4:基于MCSDK5.0 状态的切换。7 A6 \$ g" O5 b 一、实验内容要求如下: + u* v- s' [, `5 d 二、实验代码修改:" X- A9 a" o9 R( S; z: a4 x8 D 修改main.c代码,修改的部分如下(红色字体); k8 ]# L! r- |6 d' W int main(void)6 K, `7 j0 S* P1 z8 L, F {' t1 x$ ? A1 }& t/ C( p8 X /* USER CODE BEGIN 1 */ State_t ste; //定义变量: y4 Z! R5 X2 I0 j1 ~: ` /* USER CODE END 1 */( J% B" E* e( n! Y% |) q/ S% i * b) P: g2 x. j' t1 l8 s4 L/ y /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();1 c) ^7 G$ b, X' h/ k8 d: r' `- L. M /* USER CODE BEGIN Init */% V- f8 ^ X$ Z* E /* USER CODE END Init */ 2 s7 A+ F* `8 s* Q /* Configure the system clock */ SystemClock_Config();0 g7 ]$ q( _/ r * N% q9 K; z" v G) @ /* USER CODE BEGIN SysInit */# Z' E/ w7 s) e : k" s5 W6 N( D0 x" O3 [3 W /* USER CODE END SysInit */ 6 W1 Y/ H9 t* [0 f9 B4 `9 v /* Initialize all configured peripherals */ MX_GPIO_Init();, F; M$ s3 W7 I" Y) r" a! S MX_ADC1_Init(); Z! L& f) S6 a$ s$ g; |/ a/ b MX_DAC_Init();) k/ p$ G( t% l! k X$ j MX_TIM1_Init();+ m9 u9 ]2 N2 @& v* ~ MX_USART2_UART_Init();& f; L/ p7 i+ `! W MX_MotorControl_Init();' F' {+ q9 c _' F9 k/ h! I /* Initialize interrupts */ MX_NVIC_Init(); /* USER CODE BEGIN 2 */# P/ p7 z3 l- [' P6 t MC_StartMotor1(); //启动电机 HAL_Delay(1000); MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转2 J1 j% Z! }: ~ HAL_Delay(10000); //延时10s( `/ b9 `6 A5 A h) `7 y% L( B MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转 HAL_Delay(2000);; Q; g1 h2 Q1 q% [ " _1 M* n2 x% B /* USER CODE END 2 */ ) \, C% Q4 A- T1 f /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1). X3 l# @3 E- R4 d+ H1 Q { ste=MC_GetSTMStateMotor1(); //获取电机任务状态7 y8 `3 ^4 s0 Q9 R if(ste==FAULT_OVER) //电机报错 {# o% i" P x8 `* H# I MC_AcknowledgeFaultMotor1(); //清除故障 }! a) h1 G. |$ z7 L else if(ste == IDLE) //恢复故障后,电机负3000转运行( X6 {1 H8 F8 @; i; m { MC_StartMotor1();# c, w( K0 W0 s9 `4 V MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000); } 4 u# Z+ n) H, U& S /* USER CODE END WHILE */ B. \ `2 ^, p- Y' c2 [' O /* USER CODE BEGIN 3 */ //State t sts_motor1 = MCI_GetSTMStateMotor1(); //STM_GetFaultState(&STM[M1]); * r" ?% L/ P F }, H9 o( a+ f# l3 F2 K /* USER CODE END 3 */1 H/ q2 L; \+ K! E( s) W( j9 J9 \! } }2 Z; D/ @/ J7 B5 L n' H 三、执行结果: 9 D, L$ D |0 H' O5 D( ` 9 w5 T/ ]* ^2 {$ i* Q' r . u! g8 Y. l ?8 o 1 m# K: N1 O2 Y; t+ I/ l4 H " _, A* `% {8 U( ?& X/ k0 K ? |
可以顺利切换,从3000到-3000...