本帖最后由 TLLED 于 2018-9-1 22:40 编辑 + h' N. L) l/ K/ J7 o + b+ V- ]# x6 F2 R8 x/ [# P 实验4:基于MCSDK5.0 状态的切换。 一、实验内容要求如下:+ c* B+ \9 w8 ^$ i0 P' F& J6 f # F" _! o' |" F/ Q" O, z* l# l 二、实验代码修改: 修改main.c代码,修改的部分如下(红色字体)8 x- ?) G7 e3 v4 _ int main(void) {* o: T' s2 L4 ~7 {0 G) S: X /* USER CODE BEGIN 1 */: t6 c# x2 {! H# D0 H" N& B" \ State_t ste; //定义变量 /* USER CODE END 1 */. v2 M; a* @' ` /* MCU Configuration----------------------------------------------------------*/6 x4 I0 j* P5 w3 ]) J0 Y, H /* Reset of all peripherals, Initializes the Flash interface and the Systick. */, W& r. D3 U: e# k" j, E' L$ P HAL_Init();! M `: d& G+ E4 G /* USER CODE BEGIN Init */ - U" `. w" t$ s- J# X8 P2 h /* USER CODE END Init */ . t2 s% Z9 ~' T0 s0 e6 |+ Q /* Configure the system clock */* ?8 t+ T! O6 U) o7 A SystemClock_Config(); /* USER CODE BEGIN SysInit */ ' p" `% z6 U: p' U! X- l7 X; [ /* USER CODE END SysInit */* G0 D! e- U) B6 B' d& A: w 6 i) a, q) O9 L& b: k' X J% a /* Initialize all configured peripherals */8 E) i$ N) n' U8 H MX_GPIO_Init();7 H ]' d+ [' ?2 Y% m+ ~ MX_ADC1_Init();3 C, }/ C# d7 f% S MX_DAC_Init(); MX_TIM1_Init();! e9 [. D6 l' Y& n o& W9 E" N4 k+ w3 M MX_USART2_UART_Init(); MX_MotorControl_Init();+ J+ I: w; @! V; p# r. L* P H $ y+ {: ]/ Q: ]9 ]0 \ /* Initialize interrupts */0 H0 {& Q: w. K1 [+ S MX_NVIC_Init(); /* USER CODE BEGIN 2 */ MC_StartMotor1(); //启动电机 R, _- R- z& N& b8 S7 y5 _0 ]! V HAL_Delay(1000); MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转 HAL_Delay(10000); //延时10s MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转 HAL_Delay(2000);: i+ y) v8 R* A. i1 J8 P. s k8 H; c' F3 d7 _1 ] /* USER CODE END 2 */ : I5 T% [! I& W" O /* Infinite loop */1 f* f* H6 J7 b } /* USER CODE BEGIN WHILE */ while (1)2 ?! k- e2 v P7 B# e# V9 B { ste=MC_GetSTMStateMotor1(); //获取电机任务状态9 u% [7 c. N H if(ste==FAULT_OVER) //电机报错 { MC_AcknowledgeFaultMotor1(); //清除故障- ^. e1 O# S9 {. X8 n 9 L0 f4 n) B( Y# o# E% Z# x } else if(ste == IDLE) //恢复故障后,电机负3000转运行 { MC_StartMotor1(); MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);/ Z* Q: D8 L9 F1 L }1 W) C. r, N+ } /* USER CODE END WHILE */2 a- p1 s. `/ P7 [' L6 p2 j% [ /* USER CODE BEGIN 3 */ //State t sts_motor1 = MCI_GetSTMStateMotor1();! E( K6 ^# E# A, ^ //STM_GetFaultState(&STM[M1]);) n* M% s' o+ y/ Y) Q3 O & P; t+ d; `0 q2 E) q/ ~ }' y- z- M) e0 n H2 R /* USER CODE END 3 */ 5 \; x: e: t& H" t1 S9 M } 三、执行结果: ! O) s; U( A( K- v" @ ! r, l3 ?3 B. K! `$ m9 u2 A. w , d) |+ m8 c/ {' ^# M; \1 |2 w 9 Z' p' q1 V' R# F% o |
可以顺利切换,从3000到-3000...