培训手册里 实验2:基于MC SDK5.0 API速度控制与电机启动停止。1、实验2内容:
2、程序代码,在上篇实现的代码的基础上,修改代码如下: main.c程序里面添加内容 //----------------------------- //定义变量 /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ static uint32_t delay_cnt=0; //延时计数 static uint32_t delay_cnt1=0; static uint8_t delay_start_flag=0x30; //延时启动标志位 static uint8_t delay_5s_flag=0; //5s时间到标志位 static uint8_t delay_10s_flag=0; //10s时间到标志位 /* USER CODE END PV */ //函数定义 /* USER CODE BEGIN 0 */ //定时器处理 void Delay_Handler(void) { delay_cnt++; if(delay_cnt>2000) //1s计时 { delay_cnt=0; HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9); //定义示波器看时引脚 //---------------------------------------- if(delay_start_flag==0x30) //启动10s计时 { delay_cnt1++; if(delay_cnt1>9) //10S { delay_cnt1=0; delay_start_flag=0x20; delay_10s_flag=1; //10S时间到标志位 } } else if(delay_start_flag==0x20) //启动5s计时 { delay_cnt1++; if(delay_cnt1>4) //5S { delay_cnt1=0; delay_start_flag=0x30; delay_5s_flag=1; //5S时间到标志位 } } } } int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC1_Init(); MX_DAC_Init(); MX_TIM1_Init(); MX_USART2_UART_Init(); MX_MotorControl_Init(); /* Initialize interrupts */ MX_NVIC_Init(); /* USER CODE BEGIN 2 */ MC_StartMotor1(); //启动电机 MC_ProgramSpeedRampMotor1(3000/6,1000); //1s内加速到3000RPM /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(delay_10s_flag==1) //10S { MC_StopMotor1(); //停止电机运行 delay_10s_flag=0; } if(delay_5s_flag==1) //5S { MC_StartMotor1(); delay_5s_flag=0; } } /* USER CODE END 3 */ } /* USER CODE END 0 */ stm32f30x_mc_it.c 程序里面添加内容: 在滴答定时中断程序里面调用定义的函数 void SysTick_Handler(void) { #ifdef MC_HAL_IS_USED static uint8_t SystickDividerCounter = SYSTICK_DIVIDER; /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ if (SystickDividerCounter == SYSTICK_DIVIDER) { HAL_IncTick(); HAL_SYSTICK_IRQHandler(); SystickDividerCounter = 0; } SystickDividerCounter ++; #endif /* MC_HAL_IS_USED */ /* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */ MC_RunMotorControlTasks(); /* USER CODE BEGIN SysTick_IRQn 2 */ Delay_Handler(); /* USER CODE END SysTick_IRQn 2 */ } 3、测试波形: 在程序定义PC9为输出,观察滴答定时器的定时时间,滴答定时器的时间周期为0.5us ,程序处理后变成1s定时周期:
监控电机运行的图片:
|
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
共同学习