วันพฤหัสบดีที่ 4 มิถุนายน พ.ศ. 2558

การใช้งานโมดูลแสดงผลด้วย LED แบบ Dotmatrix ขนาด 16x8 โดย MAX 7219

MiniProject 010123120 Embedded System Design Lab นาฬิกาปลุก


การใช้งานโมดูลแสดงผลด้วย LED แบบ Dotmatrix ขนาด 16x8 โดย MAX 7219 (RED)


               การใช้งานครั้งนี้ เรานำ LED8x8 2 ตัว มาต่อกัน 2 ตัว เพื่อทำให้การแสดงผลมีขาด LED16x8 ซึ่งหลักการในการเขียนโค้ดเพื่อให้แสดงผลได้นั้น เราต้องทำการ shift register จำนวน 16 บิต 2 ครั้ง รวมเป็นจำนวนทั้งหมดขนาด 32 บิต โดย 16 บิตแรกประกอบไปด้วย address 8 บิต และ data  8 บิต และ 16 บิตหลังประกอบไปด้วย address 8 บิต และ data  8 บิต เช่นกัน โดยขาควบคุมของไอซี MAX7219 ประกอบไปด้วย 3 ขา คือ สัญญาณ CLK, สัญญาณ CS (Load), สัญญาณ DS


                โดยระหว่างการ shift register ข้อมูลจำนวน 32 บิตนั้น
                สัญญาณ
DIN มีขนาด 16 บิต แต่ส่งไป 2 ครั้ง เพื่อให้ข้อมูลมีจำนวน 32 บิต
                สัญญาณ
CLK 1 cycle เป็นการส่งข้อมูลขนาด 1 บิต ดังนั้น เราต้องการส่งข้อมูลขนาด 32 บิต สัญญาณ CLK ต้องมีจำนวน 32 cycle
                สัญญาณ
CS จากเดิมเป็นลอจิก HIGH จะเป็นลอจิก LOW เพื่อทำการโหลดข้อมูลและเมื่อทำการส่งข้อมูล 16 บิต จำนวน 2 ครั้ง เสร็จแล้ว ก็ให้สัญญาณ CS เป็นลอจิก HIGH เพื่อรอการส่งข้อมูลครั้งต่อไป
                 


สัญญาณแสดงจำนวนข้อมูล
(สัญญาณสีแหลือง : CLK 32 cycle, สัญญาณสีฟ้า : CS)

LED16x8 Code Example for STM32F103 RBT6 
main.c
#include "stm32f1xx_hal.h"
SPI_HandleTypeDef hspi1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);

void max7219_write_reg(uint8_t address1, uint8_t data1,uint8_t address2, uint8_t data2){
  uint8_t datas1[] = {data1,address1};
  uint8_t datas2[] = {data2,address2};
  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); // CS signal : LOW
  HAL_SPI_Transmit(&hspi1, &datas1, 1, 1); // Transmit 16 bit
  HAL_SPI_Transmit(&hspi1, &datas2, 1, 1); // Transmit 16 bit
  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); // CS signal : HIGH
}

void max7219_init(void){
  max7219_write_reg(0x9, 0x00, 0x9, 0x00); // decode mode : no decode for digit
  max7219_write_reg(0xA, 0x07, 0xA, 0x07); // set intensity
  max7219_write_reg(0xB, 0x07, 0xB, 0x07); // scan limit
  max7219_write_reg(0xC, 0x01, 0xC, 0x01); // shut down
  max7219_write_reg(0xF, 0x00, 0xF, 0x00); // display test : no display test
}

void flashing(){
  max7219_write_reg(0xC, 0x01, 0xC, 0x01); // normal operation
  max7219_write_reg(0xF, 0x01, 0xF, 0x01); // enter display test mode
  HAL_Delay(100);
  max7219_write_reg(0xF, 0x00, 0xF, 0x00); // exit display test mode
  max7219_write_reg(0xC, 0x00, 0xC, 0x00); // shutdown operation
  HAL_Delay(900);
}

uint8_t digit[8] =  {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; // Digit "0” … “Digit7" : address
uint8_t rom_data[][8] = { // data
  { 0b00000000,
    0b01111110,
    0b01000010,
    0b01111110,//0
    0b00000000,
    0b01111110,
    0b01000010,
    0b01111110 },//0
  { 0b00000000,
    0b01111110,
    0b00000000,
    0b00000000,
    0b00000000,//1
    0b01111110,
    0b01000010,
    0b01111110 }
  };

void show_esl(uint8_t ch, uint8_t a){
  uint8_t i;
  for(i=0; i<8; i++){
    max7219_write_reg(digit[i], rom_data[ch][i], digit[i], rom_data[a][i] );
  }
  HAL_Delay(500);
  ch = (ch+1)%1;
  a = (a+1)%1;
}

int main(void)
{
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();

  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); // CS Signal : HIGH
  max7219_init();

   uint8_t i;
  for(i=0; i<8; i++){
    flashing();
  }
  max7219_write_reg(0xC, 0x01,0xC, 0x01); // normal operation

  while (1)  {
    show_esl(0,1);
  }
}

void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

  __HAL_RCC_AFIO_CLK_ENABLE();

}

/* SPI1 init function */
void MX_SPI1_Init(void)
{
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_16BIT; // data size : 16 bit
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
  HAL_SPI_Init(&hspi1);
}

/** Configure pins as
        * Analog
        * Input
        * Output
        * EVENT_OUT
        * EXTI
*/
void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __GPIOA_CLK_ENABLE();
  __GPIOB_CLK_ENABLE();

  /*Configure GPIO pin : PA1 */
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

#ifdef USE_FULL_ASSERT
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





รูปแสดงตัวอย่างการต่อวงจรทดลอง


วิดีโอสาธิตการแสดงการทำงาน

การใช้งานโมดูลแสดงผลด้วย LED แบบ Dotmatrix ขนาด 8x8 โดย MAX 7219

MiniProject 010123120 Embedded System Design Lab นาฬิกาปลุก

การใช้งานโมดูลแสดงผลด้วย LED แบบ Dotmatrix ขนาด 8x8 โดย MAX 7219 (RED)

โมดูลแสดงผลด้วย LED แบบ Dotmatrix ขนาด 8x8 (แดง)

ที่มา http://alexiaelectronic.blogspot.com/
เป็นโมดูลที่แสดงผลด้วย Dotmatrix LED โดยใช้ไอซี MAX7219 ขับเคลื่อน LED ให้แสดงผล ซึ่งควบคุมการทำงานของวงจรด้วยสัญญาณเพียง 3 เส้น (DIN, CS, CLK) และสามารถต่อพ่วงโมดูลเพื่อเพิ่มพื้นที่ในการแสดงผลได้อีกด้วย

คุณสมบัติโมดูล
-    ใช้ไฟเลี้ยงวงจร 5V
-   ขนาดโมดูล 5x3.2 cm
-   แสดงผลด้วย Dot Matrix LED สีแดง ขนาด 8x8 ขับ LED ได้ 64 ดวง
-   โมดูลมีทั้งอินพุตและเอาต์พุตอินเตอร์เฟสสามารถต่อได้หลายโมดูล (Cascade) พร้อมกันได้

ไอซี MAX 7219
นำมาควบคุมการทำงานแผง LED แบบ Common Cathode (CC) ขนาด 8x8 และสามารถเชื่อมต่อไมโครคอนโทรลเลอร์ผ่านบัส SPI ได้
การส่งข้อมูลเข้าไปในไอซี MAX7219 เพื่อเขียนลงในรีจิสเตอร์แต่ละตัว จะใช้วิธีเลื่อนบิตตามจังหวะ CLK โดยใช้การส่งข้อมูลครั้งละขนาด 16 บิต และส่งบิต 15 เข้าไปก่อนตามลำดับ จนถึงบิต 0 ซึ่งรูปแบบการส่งข้อมูลแบบนี้สอดคล้องกับการทำงานของ SPI ในโหมด 0 โดยข้อมูลขนาด 16 บิตประกอบด้วย  8 บิตสูงเป็น Address ส่วนอีก 8 บิตต่ำเป็น Data สำหรับ Address จะมีดังนี้

รูปแสดงตำแหน่งของบิตในรีจิสเตอร์สำหรับคำสั่งและข้อมูลขนาด 16 บิต

ตารางแสดงที่อยู่ของรีจิสเตอร์ภายในของไอซี MAX7219
   ** X คือค่าอะไรก็ได้ ไม่มีผลต่อคำสั่ง 

สัญญาณควบคุมไอซี MAX 7219 (DIN, CS, CLK)

การใช้งานสำหรับแผง LED 8x8 โดยกำหนดค่าสำหรับรีจิสเตอร์ดังนี้
-   รีจิสเตอร์ “Decode Mode” (0x9)
เริ่มด้วยคำสั่ง Decode Mode ก่อน เพราะมีผลกับค่าที่กำหนดให้แต่ละหลัก สำหรับ Decode Mode จะเป็นการกำหนดว่าจะกำหนดเป็นรหัส BCD หรือไม่  ในการกำหนด Decode Mode จะกำหนดได้ตั้งแต่ 0x00 ถึง 0xFF โดยที่ 0x00 คือไม่มีการใช้ BCD และ 0xFF คือใช้ BCD ทุกหลัก ถ้าเป็น 0x3A ก็จะเป็น DIGIT 5, 4, 3, 1 ที่ใช้ BCD (00111010B) (เลข 1 ในแต่ละบิตแทนที่การใช้ BCD ในหลักนั้นๆ และ 0 คือไม่ใช้ BCD )

-    รีจิสเตอร์ “Digit 0” … “Digit7”
กำหนดค่าสำหรับสถานะติดดับของ LED จำนวน 8 ดวง ในแถวแนวนอนเดียวกัน ซึ่งกำหนดหลักไหนก็ส่ง Address ตามด้วย Data สำหรับ Data มีดังนี้

                                     
                                    -    รีจิสเตอร์ “Intensity” (0x0A)
สำหรับกำหนดความสว่างของไฟ LED โดยกำหนดค่าได้ตั้งแต่ 0-15 (0x00 - 0x0F) ก็จะสว่างจากน้อยไปมาก สว่างประมาณครึ่งหนึ่งจะเป็น 0x0A07 หรือ { 0x0A, 0x07 } สว่างต่ำสุดจะเป็น 0x0A00 หรือ { 0x0A, 0x00 }

-   รีจิสเตอร์ “Scan limit” (0x0B)
สำหรับการกำหนดว่าจะให้แสดงหลักไหนบ้าง มีค่าตั้งแต่ 0-7 (0x00 - 0x07) โดยที่ 0x00 จะแสดงแค่ DIGIT 0 เท่านั้น 0x04 จะแสดง DIGIT 0, 1, 2, 3, 4 และ 0x07 จะแสดง DIGIT 0, 1, 2, 3, 4, 5, 6, 7 หรือทุกหลักนั่นเอง

-    รีจิสเตอร์ “Shutdown” (0x0C)
สำหรับกำหนดการ Shutdown ซึ่ง 1 สำหรับ Normal และ 0 สำหรับ Shutdown เมื่อเข้าสู่ Shutdown Mode ขา Data (A-G และ DP) จะเป็น Low ส่วนขา DIGIT (DIGIT 0 - DIGIT 7) จะเป็น High

MiniProject 010123120 Embedded System Design Lab นาฬิกาปลุก

หัวข้อ : นาฬิกาปลุกผ่านหน้าเว็บ


วัตถุประสงค์
1.   เพื่อการศึกษาการทำงานของบอร์ด ET-STM32F103
2.   เพื่อศึกษาการใช้งานของ Ethernet module สำหรับการเชื่อมต่อระหว่างหน้าเว็บที่ไว้สำหรับกำหนดเวลาในการปลุกกับบอร์ดทดลอง
3.   เพื่อศึกษาการใช้งานของ module real time clock ซึ่งเป็นอุปกรณ์ที่ให้ค่าเวลาตามจริง 
4.   เพื่อศึกษาการทำงาน Piezo ซึ่งไว้ทำให้เกิดเสียงเมื่อจะทำการปลุก
5.   เพื่อศึกษาการทำงานของปุ่มกด ซึ่งไว้ทำการกดปิดเสียง Piezo

6.   เพื่อศึกษาการทำงานของโมดูล MAX7219 ซึ่งแสดงผลด้วย LED แบบ Dotmatrix ขนาด 8x8
  ซึ่งไว้แสดงนาฬิกาแบบดิจิตอล

ขอบเขตของงาน
1.   ใช้บอร์ด ET-STM32F103 ในการควบคุมระบบ
2.   ต้องมีการนำข้อมูลหรือสถานะของระบบหรือควบคุมสั่งงานในรูปแบบใดแบบหนึ่งผ่าน web
3.   ต้องมีการใช้งานบัส I2C หรือ SPI อย่างน้อย 1 อุปกรณ์ เช่น RTC module
4.   ต้องมีการบันทึกข้อมูลลง SD card / microSD หรือ ส่งข้อมูลแบบไร้สายไปยังคอมพิวเตอร์(ห้ามใช้อุปกรณ์ประเภท WiFi-to-Serial) หรือ ส่งข้อมูลผ่าน Ethernet ไปยังคอมพิวเตอร์
5.   ให้ใช้ STM32CubeMx (STM32CubeF0 / STM32CubeF3 / STM32CubeF4) และ HAL library แบบใหม่ และไม่ใช้ Standard peripherals library (SPL ) ซึ่งเป็นของเดิม

ประโยชน์ที่คาดว่าจะได้รับ
1.  ทำให้ได้รับความรู้เกี่ยวกับบอร์ดทดลองที่ได้รับเพิ่มมากขึ้น
2.  ทำให้ได้รับความรู้จากการใช้โมดูลไวไฟ , module real time clock , Piezo และ LED8x8
3.  ทำให้ได้รับความรู้จากการใช้งานสำหรับการติดต่อระหว่างบราวเซอร์ของ Chorme กับบอร์ดทดลอง

แนวคิดและหลักการออกแบบของระบบ


วัสดุและอุปกรณ์
1. บอร์ด ET-STM32F103
2. Piezo
3. ปุ่มกด 
4. โมดูล MAX7219 LED8x8
5.  สายไฟ
6.  ตัวต้านทาน

โปรแกรมที่ใช้สำหรับการพัฒนา
1.  STM32CubeMx
2.  CubeMx2EmBlock
3.  EmBlocks
4.  Demonstrator GUI
 



 

วันพฤหัสบดีที่ 2 เมษายน พ.ศ. 2558

บอรดไมโครคอนโทรลเลอร รุน ET-STM32F103 (ARM Cortex-M3) และการใช้งานเบื้องต้น


ET-STM32F103 เป็นบอร์ดไมโครคอนโทรเลอร์ในตระกูลARM Cortex-M3 ซึ่งเลือกใช้ไมโครคอนโทรเลอร์32-Bit ขนาด64 Pin(LQFP) เบอร์STM32F103RBT6 ของSTMicroelectronics

คุณสมบัติของMCU STM32F103RBT6
                • 32 Bit ARM Cortex-M3 Processor, Run 72MHz Clock / 90MIPS (1.25DMIPS/MHz)
• 128KByte Flash Memory / 20KByte Static RAM
• 64LQPF Packet 51 Bit I/O + 16 External Interrupt with 5V-Tolerant Logic Level
• 7 Channel DMA For Peripherals ADC, SPI, I2C, USART
• 16 Channel / 12 Bit ADC Converter
• Support Debug with Serial wire Debugger(SWD) & JTAG Interface
• 4 x 16 Bit Timer(16-Input Capture / 16-Output Compare / 18-PWM)
• 2-SPI, 2-I2C, 3-USART, 1-USB, 1-CAN, 2-WDG, RTC
1.  ใช้MCU 32Bit ตระกูลARM Cortex-M3 เบอร์STM32F103RBT6 ของSTMicroelectronics
2.  ภายในMCU มีหน่วยความจําโปรแกรมแบบFlash ขนาด128KB, Static RAM ขนาด20KB
3.  ใช้Crystal 8.00 MHz + Phase-Locked Loop (PLL) Run ความถี่72 MHz ประมวลผลด้วยความเร็ว1.25 DMIPS/MHz เทียบเท่ากับความเร็วการประมวลผลเท่ากับ90MIPS
4.  มีวงจรRTC (Real Time Clock) พร้อมXTAL ค่า32.768KHz และBattery Backup
5.  รองรับการโปรแกรมแบบIn-System Programming  (ISP) และIn-Application Programming (IAP) ผ่านทางOn-Chip Boot-Loader Software ทางพอร์ตUSART-1 (RS232)
6.  มีวงจรเชื่อมต่อกับJTAG ARM ขนาด20 Pin มาตรฐาน เพื่อทําการDebug แบบReal Time ได้
7.  Power Supply ใช้แรงดันไฟฟ้า+5VDC สามารถเลือกใช้จากUSB  Port หรือขั้วต่อCPA-2PIN จากภายนอก พร้อมวงจรRegulate +3V3/3A ภายในบอร์ด
8.  มีวงจรUSB มาตรฐาน2.0 แบบFull Speed ภายในตัว
9.  มีวงจรเชื่อมต่อการ์ดหน่วยความจําแบบSD Card โดยใช้SPI Mode จำนวน 1 ช่อง
10. มีวงจรสื่อสารRS232 โดยใช้ขั้วต่อแบบ4-PIN มาตรฐานETT จำนวน 2 ช่อง
11. มีวงจรเชื่อมต่อDot Matrix LCD พร้อมวงจรปรับความสว่าง ใช้ขั้วต่อ14 Pin มาตรฐานETT พร้อมJumper เลือกไฟเลี้ยงให้กับLCD ขนาด+3.3V หรือ+5V ได้
12. มีวงจรPush Button Switch จำนวน 2 ชุด
13. มีวงจรLED แสดงสถานะเพื่อทดลองOutput จำนวน 8 ชุด
14. มีวงจร สร้างแรงดัน0-3V3 โดยใช้ตัวต้านทานปรับค่าได้สําหรับทดสอบA/D จำนวน 1 ชุด
15. มี 46  Bit  GPIO อิสระ สําหรับประยุกต์ต่างๆ  เช่น A/D, I2C, SPI และInput / Output พร้อม Jumper สําหรับเลือกตัดต่อสัญญาณ สําหรับเลือกใช้เป็นGPIO หรือHardware Self-Test ต่างๆ เช่น 8 Bit LED, Push Button SW, Volume, USART2 และSD Card ทําให้สามารถเลือกใช้งานฟังก์ชั่นต่างๆ ได้อย่างครบถ้วนไม่ถูกจํากัดด้วยระบบฮาร์ดแวร์ของบอร์ด
•  Header 10Pin IDE (PA[0..7])
•  Header 10Pin IDE (PA[8..15])
•  Header 10Pin IDE (PB[0..7])
•  Header 10Pin IDE (PB[8..15])
•  Header 10Pin IDE (PC[0..7])
•  Header 10Pin IDE (PC[8..13])

ซอฟต์แวร์ที่ใช้งาน
1.STM32CubeMx              ไว้ใช้สำหรับเลือกบอร์ดที่จะทำการทดลอง
2.CubeMx2EmBlock        ไว้สำหรับแปลงจาก STM32CubeMx สู่ Emblock ได้
3.EmBlocks                         ไว้สำหรับเขียนโค้ดที่จะทำการรันลงบอร์ดทดลอง
4.Demonstrator GUI         ไว้สำหรับเบิร์นลงบอร์ด

การติดตั้งซอฟต์แวร์ที่ใช้งาน
Software
Download for window
STM32CubeMX

STM32CubeMX_EmBlocks

Em::Blocks 2.30
Flash loader demonstrator


วิธีการใช้งานของโปรแกรมSTM32CubeMx
1.             เลือก New Project




2.             เลือก Series ,Lines,Package ของบอร์ดที่จะใช้ แล้วก็เลือก MCU ของบอร์ด แล้วกดตกลง




3.             จะได้เป็นดังนี้ แล้วจึงเลือกขาที่จะใช้








4.             ทำการตั้งค่า โดยเข้าไปที่ Project -> Setting 




5.             แล้วจึงตั้งค่าชื่อโปรเจค แล้วเลือก Toolchain/IDE เป็น TrueSTDIO จากนั้นจึงกด OK



6.             แล้วจึงทำการ Generate Code  โดยไปที่ Project -> Generate Code




วิธีการใช้งานของโปรแกรม CubeMx2EmBlocks
1.             ทำการเลือกโปรเจคที่ Save ไว้ กด Ok




2.             เมื่อสำเร็จ จะขึ้นแบบนี้





วิธีการใช้งานของโปรแกรม EmBlocks
1.             ทำการเลือก โปรเจคที่ทำการ convert แล้ว โดยการเข้าไปที่ File -> Open ดังเช่นตัวอย่างนี้



2.             เปิดไฟล์เสร็จแล้ว ใส่โค้ดที่เขียนสำหรับไฟกระพริบ แล้วทำการ Save





3.             แล้วจึงทำการ เลือกให้แปลงเป็น .bin โดยใส่  
arm-none-eabi-objcopy -O binary
$(TARGET_OUTPUT_DIR)/$(TARGET_OUTPUT_BASENAME).elf $(TARGET_OUTPUT_DIR)/$(TARGET_OUTPUT_BASENAME).bin
ไว้ใน คลิกขวาที่ชื่อโปรเจค -> Properties -> Project’s build options… -> Pre/post build steps


แล้วเลือก Post-build steps เป็น Always แล้วกดตกลง
แล้วจึงทำการ build แล้วจะได้ไฟล์ มาเป็น .bin ซึ่งอยู่ใน โฟลเดอร์ bin\debug


วิธีการใช้งานของโปรแกรม Flash Loader Demonstrator
1.             ทำการต่อไฟเข้าบอร์ด และ ต่อ RS232 ไว้สำหรับทำการเบิร์นลงบอร์ด แล้วจึงทำการกดBOOT1 เป็น ON และ กดสวิตช์ RESET แล้วจึงเปิดโปรแกรม




2.             กด Next




3.             กด Next




4.             แล้วจึงทำการ คลิก Download to device แล้วจึงทำการเลือก โปรเจคที่เป็น ไฟล์ .bin




5.             แล้วจึงทำการกด Next ก็เสร็จสิ้นการ เบิร์นลงบอร์ดทดลอง แล้วทำการกด Close  



สำหรับบอร์ดทดลอง
1.             เมื่อเบิร์นลงบอร์ดเสร็จ แล้วจึงทำการกด BOOT0 ให้ทำงานเป็น OFF ซึ่งจะเห็นว่า LED BL จะดับ จากนั้นให้กดสวิตช์ Reset ที่บอร์ด ซึ่ง MCU จะเริ่มต้นทำงานตามโปรแกรมที่สั่ง Download ให้ทันที  จึงได้ดังรูป