Brise

[STM32CubeMX] STM32F429-disc0 엔코더값 입력받기(quadrature encoder pulse) -1 본문

MCU

[STM32CubeMX] STM32F429-disc0 엔코더값 입력받기(quadrature encoder pulse) -1

naudhizb 2017. 4. 28. 23:20
반응형

이 예제는 다음 유튜브 동영상을 참고하여 만들었습니다. 


 




먼저 이전 글에 있던 STM32CubeMX 프로젝트 파일을 불러옵니다.


2017/04/27 - [STM32CubeMX] STM32F429-DISC0 LCD 출력하기



STM32F429-DISC0보드의 경우 LCD와 SDRAM이 많은 핀을 차지하여 TIM2를 이용하여 encoder모드로 설정합니다. 




Configuration 탭에서 TIM2를 설정합니다.



Counter Period의 값을 설정하여 타이머 카운터의 최대값을 설정할 수 있습니다. 

(최대 값을 넘으면 0으로 다시 바뀝니다.)




테스트용 유저 생성 코드는 다음과 같습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
 
/* USER CODE BEGIN Includes */
#include "stm32f429i_discovery_lcd.h"
/* USER CODE END Includes */
 
/* Private variables ---------------------------------------------------------*/
DMA2D_HandleTypeDef hdma2d;
 
I2C_HandleTypeDef hi2c3;
 
LTDC_HandleTypeDef hltdc;
 
SPI_HandleTypeDef hspi5;
 
TIM_HandleTypeDef htim2;
 
SDRAM_HandleTypeDef hsdram1;
 
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
 
/* USER CODE END PV */
 
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_DMA2D_Init(void);
static void MX_FMC_Init(void);
static void MX_I2C3_Init(void);
static void MX_LTDC_Init(void);
static void MX_SPI5_Init(void);
static void MX_TIM2_Init(void);
 
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
 
/* USER CODE END PFP */
 
/* USER CODE BEGIN 0 */
uint32_t enc_counter = 0;
/* USER CODE END 0 */
 
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();
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA2D_Init();
  MX_FMC_Init();
  MX_I2C3_Init();
  MX_LTDC_Init();
  MX_SPI5_Init();
  MX_TIM2_Init();
 
  /* USER CODE BEGIN 2 */
  BSP_LCD_Init();
  BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER, LCD_FRAME_BUFFER);
  BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER, LCD_FRAME_BUFFER);
  BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
  BSP_LCD_DisplayOn();
  BSP_LCD_Clear(LCD_COLOR_WHITE);
  BSP_LCD_SetTextColor(LCD_COLOR_DARKGRAY);
  //BSP_LCD_SetFont(&Font12);
 
  HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_1);
 
  uint8_t arr[100= {0,};
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      enc_counter = TIM2->CNT;
      sprintf(arr,"CNT : %010d",enc_counter);
      BSP_LCD_DisplayStringAtLine(1,arr);
 
 
 
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
 
  }
  /* USER CODE END 3 */
 
}
cs



실행 동영상




반응형
Comments