아하 이런, 제목이 좀 잘못된 것 같네요. 하지만 Nucleo 보드에서도 적용 가능하니 놔둡니다.
(회사에서 만든 보드니 커스텀 보드 테스트라고 해야 했나? ^^)

[DFU f/w 업로드 과정]

- 간단한 기능의 S/W 를 컴파일해서, 

- ST 에서 다운 받은 응용프로그램(DfuSe 툴: 링크)으로,
- Embedded DFU 모드용 파일로 변환하고, 
- USB 로 MCU에 업로드하는 방법을 알아보겠습니다.

테스트하고 있는 MCU는 STM32F411CCYx(FLASH 256KB / SRAM 128KB / WLCSP) 입니다.
프로그램은 TIM2 Interrupt 에 의해 500ms 마다 LED 와 연결되어 있는 GPIO 를 토글해서 눈으로 동작을 확인할 생각입니다.

TIM2 프로그램은 예전에 올렸던 글을 참조하셔서 작성하면 됩니다.
STM32F446 으로 작성된 내용인데, 클럭만 틀리고 다 같습니다.

혹시 링크타고 가서 보는 것이 번거로울 것 같아서, 다시 CUBEMX 에서 바꿀 부분만 설명 드리자면,
TIM2 의 클럭 소스를 확인해서, (이전글 참고 : [STM32F4xx] Timer Clock source )





CUBEMX 툴의 TIM2 설정에서 0.5ms 에 해당하는 주기를 넣어 준다.




다음으로 CUBEMX에 의해 소스코드를 만들어 주고(저는 KEIL 컴파일러를 사용하므로 KEIL v5로 선택을 했습니다.)
TIM2 인터럽트에 의해 500ms 마다 GPIO를 토글하는 코드를 추가해 줍니다.
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
/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
    if (htim->Instance == TIM2)
    {
        HAL_GPIO_TogglePin(LED_OUT_GPIO_Port,LED_OUT_Pin);
    }
    else if (htim->Instance == TIM1)
    {
    }
  /* NOTE : This function Should not be modified, when the callback is needed,
            the __HAL_TIM_PeriodElapsedCallback could be implemented in the user file
   */
}
/* 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_TIM2_Init();
  MX_USB_DEVICE_Init();
 
  /* USER CODE BEGIN 2 */
 
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  HAL_Delay(500);
  HAL_TIM_Base_Start_IT(&htim2);
    
  while (1)
  {
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
 
  }
  /* USER CODE END 3 */
 
}
cs


DFU 로 프로그램을 STM32F4xx 에 업로드 하기 위해서는 HEX 파일이 필요하므로, 
KEIL 컴파일러의 설정에서 다음과 같이 Create HEX File 옵션을 선택해 준다.





다음 과정은 예전에 Custom DFU 에서 설명했던 내용과 똑같은데, 
ST 홈페이지에서 DFU File Manager 를 다운 받아서 실행해서 다음과 같이 입력하고,
S19 or HEX 버튼을 눌러서 생성된 HEX 파일을 선택해 주고 DFU 파일을 원하는 위치에다 만들어 줍니다.




다음으로 DfuSe Demo 프로그램을 ST 사에서 다운 받아서 실행시키고,
BOOT0 을 VCC 로 연결하고 리셋을 합니다(제 경우에는 스위치를 BOOT0 와 VCC 사이에 달아 주고, 스위치를 누른 상태에서 전원을 넣어 줍니다), 
STM Device in DFU Mode 드라이브가 생기면서 DfuSe Demo 프로그램에 해당 칩 정보가 표시됩니다.
DfuSe Demo 프로그램에서 다음과 같이 순서대로 실행하시면 프로그램이 Upgrade 된 후, 실행이 됩니다.
1. Choose 버튼을 눌러 DFU File Manager 에서 만들어 놓은 DFU 파일을 선택한다.
2. Upgrade 버튼을 눌러서 프로그램을 MCU 에 Upload 한다.
3. Leave DFU mode 버튼을 누르거나, BOOT0 핀을 VCC와 연결을 끊고 리셋을 하면 프로그램이 실행됩니다.  





[프로그램 실행 동영상]


+ Recent posts