515 views|4 replies

222

Posts

3

Resources
The OP
 

[STM32H5 NUCLEO H533RE Review] 08 Labview host computer controls stepper motor movement [Copy link]

This post was last edited by Maker_kun on 2024-8-18 17:27

Part 1: Host computer programming

Open the LabVIEW Case Library

Add control buttons

UI

Adding an Event Structure

When the forward movement button is pressed, a 0X41 0X0D 0X0A hexadecimal serial port command is sent. When the backward movement button is pressed, a 0X42 0X0D 0X0A hexadecimal serial port command is sent.

Program Attachments

Simple Serial-stm32h5.vi (37.4 KB, downloads: 3)

Part 2: STM32H5 Programming

Add stepper motor control library, please refer to [STM32H5 NUCLEO H533RE Evaluation] 05 Micro Stepper Motor I/O Driver https://en.eeworld.com/bbs/thread-1288269-1-1.html

Main function program

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @File   : main.c
  * @brief   : Main program body
  ******************************************************************************
  * @attention   *
  * Copyright (c) 2024 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "icache.h"
#include "memorymap.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "../../BSP/STEP/stepping.h"
#include "../../BSP/LED/led.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void CptltCallback();
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */
    uint8_t len;
    uint16_t times = 0;
uint8_t sendbuf[5]={0x41,0x42,0x43,0x44,0x45};
  /* 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_USART1_UART_Init();
  MX_ICACHE_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */
  int t=1;
    int i=0;
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	  if (g_usart_rx_sta & 0x8000)        /* 接收到了数据? */
	  {

		  len = g_usart_rx_sta & 0x3fff;  /* 得到此次接收到的数据长度 */

		  if(g_usart_rx_buf[0]==0x41)
		    {
			  for(i=0;i<100;i++)//正逆向移动
			   {
			  	  A1(1);A2(0);B1(0);B2(0); HAL_Delay(t);

			  	  A1(1);A2(0);B1(1);B2(0); HAL_Delay(t);

			  	  A1(0);A2(0);B1(1);B2(0); HAL_Delay(t);

			  	  A1(0);A2(1);B1(1);B2(0); HAL_Delay(t);


			  	  A1(0);A2(1);B1(0);B2(0); HAL_Delay(t);

			  	  A1(0);A2(1);B1(0);B2(1); HAL_Delay(t);

			  	  A1(0);A2(0);B1(0);B2(1); HAL_Delay(t);

			  	  A1(1);A2(0);B1(0);B2(1); HAL_Delay(t);


			   }
		    }


		  if(g_usart_rx_buf[0]==0x42)
		    {
			  for(i=0;i<100;i++)//逆向移动
			   {
			  	  A1(1);A2(0);B1(0);B2(1); HAL_Delay(t);

			  	  A1(0);A2(0);B1(0);B2(1); HAL_Delay(t);

			  	  A1(0);A2(1);B1(0);B2(1); HAL_Delay(t);

			  	  A1(0);A2(1);B1(0);B2(0); HAL_Delay(t);


			  	  A1(0);A2(1);B1(1);B2(0); HAL_Delay(t);

			  	  A1(0);A2(0);B1(1);B2(0); HAL_Delay(t);

			  	  A1(1);A2(0);B1(1);B2(0); HAL_Delay(t);

			  	  A1(1);A2(0);B1(0);B2(0); HAL_Delay(t);


			   }
		    }

		  if(g_usart_rx_buf[0]==0x43)
		    {
			  LED0_TOGGLE();
		    }

		  g_usart_rx_sta = 0;





	  }
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_CRSInitTypeDef RCC_CRSInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 3;
  RCC_OscInitStruct.PLL.PLLN = 50;
  RCC_OscInitStruct.PLL.PLLP = 2;
  RCC_OscInitStruct.PLL.PLLQ = 2;
  RCC_OscInitStruct.PLL.PLLR = 2;
  RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_3;
  RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
  RCC_OscInitStruct.PLL.PLLFRACN = 0;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
                              |RCC_CLOCKTYPE_PCLK3;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }

  /** Enable the CRS APB clock
  */
  __HAL_RCC_CRS_CLK_ENABLE();

  /** Configures CRS
  */
  RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
  RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_LSE;
  RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
  RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE(48000000,32768);
  RCC_CRSInitStruct.ErrorLimitValue = 34;
  RCC_CRSInitStruct.HSI48CalibrationValue = 32;

  HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);

  /** Configure the programming delay
  */
  __HAL_FLASH_SET_PROGRAM_DELAY(FLASH_PROGRAMMING_DELAY_2);
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

Part III: Host Computer Programming

Effect display

上位机控制步进电机运动

STM32 program code:

USB.7z (2.61 MB, downloads: 6)
This post is from stm32/stm8

Latest reply

LabView is amazing   Details Published on 2024-8-26 01:12
 

105

Posts

0

Resources
2
 

LabView can also be used like this

This post is from stm32/stm8

Comments

Labview is very powerful and has many functions. It can also do visual processing. Many visual defect monitoring in factories is done based on Labview vision.  Details Published on 2024-8-24 16:49
 
 

222

Posts

3

Resources
3
 
lemonboard posted on 2024-8-24 13:28 LabView can be used like this

Labview is very powerful and has many functions. It can also do visual processing. Many visual defect monitoring in factories is done based on Labview vision.

This post is from stm32/stm8
 
 

3

Posts

0

Resources
4
 

LabView is amazing

This post is from stm32/stm8

Comments

There are many cases in it: fuzzy recognition, industrial PID control, etc.  Details Published on 2024-8-26 08:09
 
 
 

222

Posts

3

Resources
5
 

There are many cases in it: fuzzy recognition, industrial PID control, etc.

This post is from stm32/stm8
 
 
 

Just looking around
Find a datasheet?

EEWorld Datasheet Technical Support

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号
快速回复 返回顶部 Return list