Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - deejun

#1
ขาย IC MC3PHACVPE   MOTOR CONTROL  SPEED CONTROL :D   Tel 0838349010 สอบถามได้ครับ
3 phase motor control  หรือที่เรื่อง Inverter
#2
ผมก็ไม่เคยทำเช่นกันครับ เคยสนใจอยู่เท่านั้น  แต่สัญญาณขับคล้ายๆที่เคยเอาไปขับ
หม้อแปลงความถี่สูง แบบมัลติเฟส  (สามเฟส)  น่าจะขับได้อยู่ลองดูครับ ปรับดู

1- เลือก Timer ตัวไหนก็ได้  T1,T2.......  เอามา 1 ตัวใช้ทำ Interrupt Timer สมมุตว่าใช้  T2  ก็ทำการ setค่าใช้งาน Timer2
2- เลือก GPIO ที่ใช้ขับอะไรก้ได้    สมมุติเลือก GPIOC  Bit 0, Bit1, Bit2, Bit3, Bit4, Bit5   ใช้เป็น Output
    เลือกมา  6 ขา  6 bit   เพราะว่าไดร์สวิต  6 ชุดนั้นเอง  และเพื่อให้ง่าย  เรียงลำดับกันไป
3- BLDC Motor ใช้ไดร์ 6 สเต็ป  ดังนั้นจะมีค่า 6 ค่าในการเปลี่ยนแปลงให้ง่าย สร้าง look up table ค่าขึ้นมา  6 ค่า
    สมมุติ   ตัวแปร     int Step[] = {26,42,41,37,21,22};  ค่านี้มาจากตารางไดร์ หาอ่านได้จากเอกสารทั่วไปหรือทางค่าย microchip ก็ได้มีเยอะมาก
 
    ตั้ง Timer ให้เกิดการอิเตอร์รัป  เพื่อใช้ในการเปลี่ยนสเต็ปการทำงานและความเร็วรอบก็อยู่ที่จุดนี้ด้วยแต่ระวังว่าถ้าไปขับ
    ความถี่ต่ำๆ การแช่เฟสนานเกินไปอาจทำให้ลวดไหม้ได้  ถ้าหมุนรอบต่ำๆต้องระวังจะมีเทคนิคในการมอดความถี่เข้าไปอีก
    ในที่นี้เป็นขับธรรมดาก่อน ถ้าขับช้าก็ลดแรงดันในการทดลองก่อนเพื่อศึกษาโปรแกรมและการขับ
    เช่นมอเตอร์  120V  ก็อาจจะขับแค่   50V  ก่อน   ใช้วาริแอตปรับแรงดันลดทอนก่อนเป็นต้นหรือหม้อแปลงก็แล้วแต่
    ป้องกันผิดพลาด

4 ในลูป Timer interrupt_Timer2                               //  ปรับความเร็วปรับที่ Timerนี้
                                  {
                                    GPIOC    =     0;                       // เคลียร์ค่าพอท
                                    delay_us(5);                            //  ทำ เดททาม ป้องกันสวิตชันกัน
                                    GPIOC    =     Step[Counter];   //  ดึงข้อมูลจากตาราง การหมุน
                                    Counter  =    Counter+1;         //  เปลี่ยนสเต็ปการหมุน
                                    if(Counter>5)                        //  ถ้าสเต็ปการทำงานเท่ากับ 6 ให้กลับไปวนที่ตำแหน่งแรกต่อ
                                    Counter  =    0
}
                               
   Sw0     =     สวิตบนซ้าย    GPIOC_Bit0
   Sw1     =     สวิตล่างซ้าย   GPIOC_Bit1
   Sw2     =     สวิตบนกลาง   GPIOC_Bit2
   Sw3     =     สวิตล่างกลาง  GPIOC_Bit3
   Sw4     =     สวิตบนขวา     GPIOC_Bit4
   Sw5     =     สวิตตัวล่างขวา GPIOC_Bit5             

อันนี้เหมาะความเร็วปานกลางที่ไม่ช้าไปพอลองได้
...
ถัดมาในการขับความถี่ต่ำๆแช่คอยนานๆอาจมีปัญหาได้ ให้ทำการมอดความถี่เข้าไปร่วมกับความถี่ต่ำเช่น  สมมุติว่า ขับที่ความถี่  2Hz
มอเตอร์หมุน1รอบใช้เวลา   T=1/f    ,T=1/2   =  0.5S  อาจทำให้มอเตอร์แช่กระแสนานจนร้อนได้   
ให้ทำการมอดความถี่   1-3Khz เข้าไป   วิธีง่ายสุด คือใช้ Timer อีกตัวมาช่วง
สร้าง Timer อีกตัว ,อินเตอร์รัฟ  ทุกๆ 2เท่าของความถี่ที่เลือก   เพราะว่า  1คาบเวลาเกิด 2 ครั้งนั้นเอง
เลือกความถี่ มอด    1Khz  ดังนั้นต้องสร้างความถี่ อินเตอร์รัฟจากทามเมอร์ที่  2Khz  นั่นเอง

เลือก T3 มาเป็นตัวอินเตอร์รับ และสร้างเคาร์เตอร์มา1ตัวใช้นับ 2 จังหวะ   1 รีเซท    2อับโหลดค่า
เคาท์เตอร์ให้ชื่อ  int Pulse  และเซ็ทค่าต่างๆให้ได้อินเตอร์รัฟที่ 2 Khz

ลูป Timer interrupt_Timer3            //   เปลี่ยนความถี่มอดเปลี่ยนจาก Timerนี้
                                        {
                                          GPIOC     =       0;                    //  เครียร์ค่าไดร์
                                          delay_us(5);                            //  สร้างเดททาม
                                          if(Pulse==0)                            //   เช็คค่าตัวนับ
                                          GPIOC    =        0;                   //   เครียร์ค่า
                                          else                                        //   ตรวจสอบ   
                                          GPIOC    =        Step[Counter];    // กลับไปค่าในเฟสตำแหน่งเดิม 
                                          Pulse       =       Pulse+1;             //  เปลี่ยนสเต็บการมอด
                                          if(Pulse>1)                                  //   ตรวจสอบตัวนับ
                                          Pules       =      0                         //    กลับเริ่มทำงานตัวนับ
                                         


}
#3
ผมไม่ถัดใช้ LIB  แต่เดาๆว่าท่านเจ้าของกระทู้จะทำอะไรกับ มอเตอร์สามเฟส  ประเภคบัชแลท หรือ BLDC motor หรือเปล่า
ปรับสปีด   ลองหาอ่านพวก Timer ที่โพทไว้ดู คู่กับ PWM ที่โพท น่าจะพอแก้ขัด แก้กระใสได้แล
STM32F4 ผมก็คงหหยุดไว้แค่นี้ เหมาะแก่การเริ่มศึกษา   ไว้เยอะแล้ว  ที่เหลือให้ท่านที่ต้องการไปศึกษาเอาเอง
ทำมากกว่านี้เดี๋ยวจะมีคนก็อปปี้ไปทำหนังสือขาย  แล้วผมกลายเป็นตัวก๊อปปี้หนังสือแทน  :D

ทำขับธรรมดากับ อินเวิดไม่ยากครับ แต่ให้ดี ศึกษาแบบธรรมดาก่อนให้เป็น สร้างพลัลให้ได้ 50%ก่อน และเปลี่ยนความถี่ให้ได้
แล้วถึงจะสร้างตัวอินเวิดชันแนล มา และใส่ เดททาม(กันตายลงไป)  ถ้าท่านทำแบบ Register อาจจะพอคุยกันได้ง่าย
ครับผม
#4
GPIO Input/Output

ใช้ GPIOE  bit 0,bit1,bit2,bit3  เป็น Input 


และใช้ GPIOC  bit6,bit7,bit8,bit9    เป็น Output



#include"stm32f10x.h"

void   delay(uint32_t num)
                                        {
                                         while(num--);     
}

void Clock()
                  {
                   RCC->CFGR      =     0;                                          // Reset RCC_CFGR Register
                   RCC->CR          =     RCC_CR_HSEON;                  // Set External Xtal ON
                   while((RCC->CR & RCC_CR_HSIRDY)==0);           // Wait Xtal ON

                   /* Configuration  Clock   */
                   RCC->CFGR      =   RCC_CFGR_PLLSRC|RCC_CFGR_SW_PLL|RCC_CFGR_PPRE1_DIV2|
                                                 RCC_CFGR_ADCPRE_DIV6|RCC_CFGR_PLLMULL9;
                 
                   /*    Enable PLLON   */
                   RCC->CR        |=  RCC_CR_PLLON;
                   while((RCC->CR & RCC_CR_PLLRDY)==0);
}
void    GPIO()
                   {
                     RCC->APB2ENR    =     RCC_APB2ENR_IOPCEN|RCC_APB2ENR_IOPEEN; //  เปิดคล็อกให้พ็อท C&E
                     GPIOC->CRL         =    0x33000000;   //  bit6, bit7
                     GPIOC->CRH        =    0x00000033;   //  bit8,bit9

                     GPIOE->CRL         =    0x00008888;   //  bit6, bit7

                     GPIOC->ODR        =    0;
}
int main()
             {
              Clock();
              GPIO(); 
              while(1)
                         {
                          if(GPIOE->IDR&0x01==1)              // ตรวจสอบ bit 0
                          GPIOC->ODR     |=   0x40; 
                          else
                          GPIOC->ODR     &=  FFBF;

                         if(GPIOE->IDR&0x02==1)              // ตรวจสอบ bit 1
                          GPIOC->ODR     |=   0x80; 
                          else
                          GPIOC->ODR     &=  FF7F;

                        if(GPIOE->IDR&0x04==1)              // ตรวจสอบ bit 2
                          GPIOC->ODR     |=   0x0100; 
                          else
                          GPIOC->ODR     &=  FEFF;

                         if(GPIOE->IDR&0x08==1)           // ตรวจสอบ bit 3
                          GPIOC->ODR     |=   0x0200; 
                          else
                          GPIOC->ODR     &=  FDFF;
                         }
}

#5
ลอง Over Clock    ,Under Clock ศึกษาดูความแตกต่างการทำงาน
จากตัวอย่าง GPIOก่อนหน้านี้ครับ

โวเวอร์คล็อก


#include"stm32f10x.h"

void   delay(uint32_t num)
                                        {
                                         while(num--);     
}

void Clock()
                  {
                   RCC->CFGR      =     0;                                          // Reset RCC_CFGR Register
                   RCC->CR          =     RCC_CR_HSEON;                  // Set External Xtal ON
                   while((RCC->CR & RCC_CR_HSIRDY)==0);           // Wait Xtal ON

                   /* Configuration  Clock   */
                   RCC->CFGR      =   RCC_CFGR_PLLSRC|RCC_CFGR_SW_PLL|RCC_CFGR_PPRE1_DIV2|
                                                 RCC_CFGR_ADCPRE_DIV6|RCC_CFGR_PLLMULL15;   //  [b]เปลี่ยนจาก PLL9 เป็น PLL15[/b]    8*14 =  112 Mhz           
                   /*    Enable PLLON   */
                   RCC->CR        |=  RCC_CR_PLLON;
                   while((RCC->CR & RCC_CR_PLLRDY)==0);
}
void    GPIO()
                   {
                     RCC->APB2ENR    =     RCC_APB2ENR_IOPCEN; //  เปิดคล็อกให้พ็อท C
                     GPIOC->CRL         =    0x33000000;   //  bit6, bit7
                     GPIOC->CRH        =    0x00000033;   //  bit8,bit9
                     GPIOC->ODR        =    0;
}
int main()
             {
              Clock();
              GPIO(); 
              while(1)
                         {
                          GPIOC->ODR  ^=  0x03C0;  //ไฟกระพริบ  ที่ GPIOC  Bit 6, Bit7,  Bit8,  Bit9 
                          delay(5000000);                  // ฟังก์ชันหน่วงเวลา
                         }
}




สังเกตุไฟกระพริบ ที่PLL15

อันเดอร์คล็อกถัดมาครับ


#include"stm32f10x.h"

void   delay(uint32_t num)
                                        {
                                         while(num--);     
}

void Clock()
                  {
                   RCC->CFGR      =     0;                                          // Reset RCC_CFGR Register
                   RCC->CR          =     RCC_CR_HSEON;                  // Set External Xtal ON
                   while((RCC->CR & RCC_CR_HSIRDY)==0);           // Wait Xtal ON

                   /* Configuration  Clock   */
                   RCC->CFGR      =   RCC_CFGR_PLLSRC|RCC_CFGR_SW_PLL|RCC_CFGR_PPRE1_DIV2|
                                                 RCC_CFGR_ADCPRE_DIV6|RCC_CFGR_PLLMULL3;  // เปลี่ยนค่า PLL  8*3=24Mhz
                 
                   /*    Enable PLLON   */
                   RCC->CR        |=  RCC_CR_PLLON;
                   while((RCC->CR & RCC_CR_PLLRDY)==0);
}
void    GPIO()
                   {
                     RCC->APB2ENR    =     RCC_APB2ENR_IOPCEN; //  เปิดคล็อกให้พ็อท C
                     GPIOC->CRL         =    0x33000000;   //  bit6, bit7
                     GPIOC->CRH        =    0x00000033;   //  bit8,bit9
                     GPIOC->ODR        =    0;
}
int main()
             {
              Clock();
              GPIO(); 
              while(1)
                         {
                          GPIOC->ODR  ^=  0x03C0;  //ไฟกระพริบ  ที่ GPIOC  Bit 6, Bit7,  Bit8,  Bit9 
                          delay(5000000);                  // ฟังก์ชันหน่วงเวลา
                         }
}




สังเกตุผลการเปลี่ยนแปลง
#6
เรียนรู้ GPIO ครับ
การใช้งาน  GPIO จะต้องศึกษา Register  GPIOx_CRL กับ GPIOx_CRH
GPIO bit0.......GPIO bit 7      ถูกควบคุมด้วย  GPIOx_CRL       เมื่อ  x คือ   A,B,C,D,E,F.G,H  = ชื่อPort
GPIO bit8.......GPIO bit 15    ถูกควบคุมด้วย  GPIOx_CRH       เมื่อ  x คือ   A,B,C,D,E,F.G,H  = ชื่อPort
ดังนั้นสังเกตุว่า  1 bit GPIO จะใช้ถึง   4 bit ของ Register Port ในการควบคุมว่า จะให้ bit ของตำแหน่งนั้นๆ ทำงาน
เป็นอะไร

เว็ปอ่านเพิ่ม   http://dics.voicecontrol.ro/dicsEE-IP/chapter/Setting%20GPIO%20manually

ใน 4 bit Register Port นั้นๆจะประกอบด้วย     ชื่อของbit นั้นๆ ดังนี้   MODE0  ,MODE1,CNF0,CNF1 
MODE0,MODE1 หลักๆ ใช้ในการกำหนดความเร็วของ Bit ขาที่อ้างอิง
CNF0,CNF1       ใช้ในการกำหนดทิศทางว่า จะให้ขานั้นๆเป็น Input ,Output, Funtion เป็นต้น
ในขณะที่เปิดไฟใหม่ๆ หรือไม่ได้กำหนดค่าไว้ก่อน  ค่าเริ่มต้นของมันจะเป็น GPIOx_CRL = 0x44444444
และ    GPIOx_CRH = 0x44444444  นั้นคือ ขาปล่อยลอยๆ ไม่รับ ไม่จ่าย กระแสไฟ


ตัวอย่าง ใช้ GPIOC Bit 6,Bit7,Bit8,Bit9  เป็น Output ขับที่ความถี่เร็วสุด   50Mhz



#include"stm32f10x.h"

void   delay(uint32_t num)
                                        {
                                         while(num--);     
}

void Clock()
                  {
                   RCC->CFGR      =     0;                                          // Reset RCC_CFGR Register
                   RCC->CR          =     RCC_CR_HSEON;                  // Set External Xtal ON
                   while((RCC->CR & RCC_CR_HSIRDY)==0);           // Wait Xtal ON

                   /* Configuration  Clock   */
                   RCC->CFGR      =   RCC_CFGR_PLLSRC|RCC_CFGR_SW_PLL|RCC_CFGR_PPRE1_DIV2|
                                                 RCC_CFGR_ADCPRE_DIV6|RCC_CFGR_PLLMULL9;
                 
                   /*    Enable PLLON   */
                   RCC->CR        |=  RCC_CR_PLLON;
                   while((RCC->CR & RCC_CR_PLLRDY)==0);
}
void    GPIO()
                   {
                     RCC->APB2ENR    =     RCC_APB2ENR_IOPCEN; //  เปิดคล็อกให้พ็อท C
                     GPIOC->CRL         =    0x33000000;   //  bit6, bit7
                     GPIOC->CRH        =    0x00000033;   //  bit8,bit9
                     GPIOC->ODR        =    0;
}
int main()
             {
              Clock();
              GPIO(); 
              while(1)
                         {
                          GPIOC->ODR  ^=  0x03C0;  //ไฟกระพริบ  ที่ GPIOC  Bit 6, Bit7,  Bit8,  Bit9 
                          delay(5000000);                  // ฟังก์ชันหน่วงเวลา
                         }
}




#7
มารู้จักการเซ็นอัป clock กันครับ
ก่อนอื่นต้องขอบอกไว้ก่อนว่าจริงๆแล้วใน system_stm32f10x.c เองได้กำหนดไว้แล้วว่า ที่ Xtal 8 Mhz นั้น CPU จะเซ็ทค่าที่ PLL9
ดังนั้นเราไม่จำเป็นต้อง setup clock ก็ได้  แต่ถ้าเราไม่ได้ใช้ xtal 8 Mhz อันนี้ละก็ จะต้องมาจัดการกับ clock ของระบบกันครับ

ในตัวอย่างนี้จะต่อกับหัวข้อข้างบนที่ได้บอกถึงการเซ็ทอัป Keil ไว้แล้ว ก็มาต่อกันเลยกับตัวอย่างที่ได้ทำไว้ รีจีสเตอร์ต่างๆก็ศึกษาได้ตาตัวอย่าง
ที่จะได้นำเสนอดังต่อไปนี้


#include"stm32f10x.h"

// Xtal 8Mhz   Pll*9  =  8*9  = 72Mhz

void  Clock()
                   {
                    RCC->CFGR      =   0;                                                 // Reset RCC_CFGR Register
                    RCC->CR        =   RCC_CR_HSEON;                           // Set External Xtal ON
                    while((RCC->CR & RCC_CR_HSIRDY)==0);                // Wait Xtal ON

                   /*    The Configuration of  Clock System    */
                   RCC->CFGR      =   RCC_CFGR_PLLSRC|RCC_CFGR_SW_PLL|RCC_CFGR_PPRE1_DIV2|
                   RCC_CFGR_ADCPRE_DIV6|RCC_CFGR_PLLMULL9;

                   /*    Enable PLLON   */                 
                   RCC->CR        |=  RCC_CR_PLLON;
                   while((RCC->CR & RCC_CR_PLLRDY)==0);
}

int main()
             {
              Clock();
}


#8
ในครั้งนี้มาทำการเรียนรู้ STM32F103  กัน  ตัวอ้างอิงของผมเป็น STM32F103VBT6  ขนาดหน่วยความจำโปรแกรม  128K
ความถี่  72Mhz   ใครที่ใช้ เบอร์อื่นก็แก้ไขเล้กน้อยตามสเป็ค MCU แต่คำสั่งหลายๆอย่างคล้ายๆกันครับ

เริ่มแรกในบทนี้ก็เหมือนเดิม  ให้สร้าง Folderใหม่ขึ้นมา  ตั้งชื้อตามความต้องการของผู้ใช้ สมมุติในบทนี้ผมจะใช้ Clock
ผมสร้าง Floder ชื่อ Clock  และไปทำการก๊อปปี้  File ชื่อ system_stm32f10x.c กับ stm32f10x.h
เข้ามาไว้ใน Floder Clock ที่เร้าสร้างขึ้นมา  เวลาเราก๊อปปี้ ทั้งFloder ไปที่ไหน จะได้ไม่มีปัญหา หา File พวกนี้ไม่เจอ

system_stm32f10x.c  ก็อปมาได้จาก        C:\Keil\ARM\INC\ST\STM32F10x
stm32f10x.h               ก็อปมาได้จาก        C:\Keil\ARM\Startup\ST\STM32F10x

เมื่อมี 2 File นี้ก็เตรียมพร้อม สร้างโปรเจคได้เลย

เปิด Keil เลือกเบอร์ MCU ที่ท่านใช้   ในที่นี้เป็น  stm32f103vb  ครับ  ใครใช้นอกเหนือนี้ก็เปลี่ยนค่าเบอร์เอาครับ
เมื่อเลือกได้แล้ว  โปแกรมจะถามว่าให้แอดเอา startup_stm32f10x.s เข้ามาไว้ในFloder ด้วยมั๊ย  ตอบเลย Yes
ถ้าตอบ No ท่านจะต้องไปก็อปมาใหม่ใน C:\Keil\ARM\Startup\ST\STM32F10x มิเช่นนั้นจะใช้งานมิได้น่ะครับ

เมื่อทำการแอดเสร็จก็เป็นอันเตรียมตัวเขียนโปรแกรมต่อไป   ในช่วงที่จะเริ่มเขียนก็มีคำแนะนำอีกนึดนะครับว่า
STM3210x มันมีหลายซีเรีย จะแบ่งตามขนาดของหน่วยความจำ ซึ่งเราจะต้องรู้ด้วยว่า MCU ที่เราใช้เนี่ยอะ
มันเป็นซีเรียไหน  .......ก็ดูได้จาก Data sheet ของมันอะ  ดูตามต้นไม้  ปะแป้ง ก็ไม่เห็นเลข เอ้ยไม่เห็น รุ่น
น่ะครับ   มาถึงตรงนี้ใจเย็นๆ อย่าพึ่งถอนใจ  ว่ายุ่งยาก  ถ้าเริ่มสัปสนพัก 10 นาทีเดี๋ยวมาต่อกัน
แว๊ปผ่านไป 10 นาที ไวอย่างจรวจ น้ำ  เมื่อเริ่มไม่เข้าใจ หรือเข้าใจ ไม่เป็นไร  มาต่อกัน  ......................
ในรุ่นอ้างอิงผม  stm32f103vb ของผมเป็น MD มิเดียมคือค่าของหน่วยความจำขนาด กลางซึ่งในรุ่นF1 จะมีซีเรียดังนี้

STM32F10X_LD                  =               STM32 Low density devices
STM32F10X_LD_VL            =               STM32 Low density Value Line devices
STM32F10X_MD                 =               STM32 Medium density devices
STM32F10X_MD_VL           =               STM32 Medium density Value Line devices
STM32F10X_HD                 =               STM32 High density devices
STM32F10X_HD_VL           =               STM32 High density value line devices
STM32F10X_XL                  =               STM32 XL-density devices
STM32F10X_CL                  =               STM32 Connectivity line devices */

ดังนั้นมันมีความสำคัญม๊ากมากน่ะครับ เราจะต้องรู้ว่า MCUที่เราใช้เป็นรุ่นได 
stm32f103vbt6  นี้ตรงกับ    STM32F10X_MD  ครับ  เมื่อเรารู้แล้วก็จะให้กดคีย์  Alt+F7พร้อมกันครับ
กดเลยครับ ผมรู้ท่านยังไม่กด กดซะ เดี๋ยวเราจะไปต่อไม่ได้  อะไม่มีไรเกิดขึ้น......ก็เปิดหน้า Keil ก่อนกดครับ
เปิดหน้าเว๊ปนี้กดไม่มีอะไรเกิดขึ้นแน่ๆ  เมื่อเปิด Keil แล้วกด Alt+F7 จะเกิดบล็อกชื่อOption for targetขึ้นม
ให้เลือกหัวข้อชื่อ  C/C++ คลิ๊กเข้าไป จะเห็นมีบล็อกและช่องว่างๆและรายละเอียดขึ้นมา
ในช่องบนสุดแรกที่ชื่อ  Define  และทางขวามือเป็นช่องว่างๆสีขาวให้ใส่รุ่นของ MCU เข้าไปครับ
ในที่นี้เป็นพิมพ์ว     STM32F10X_MD ลงไปเป็นอันสร็จการเลือกรุ่น MCU ถ้าเป็นเบอร์อื่นให้ดูว่าเบอร์นั้นไปตกรุ่นไหน
ก็ใส่ชื่อรุ่นลงไปครับ

ส่วนค่าอื่นๆให้ศึกษาเอาจาก Web keil การใช้งาน หรือที่เคยอ้างอิงไว้หลายลิงค์ก่อนหน้านี้ใน STM32F4 ได้แนบไว้ถ้าไม่เข้าใจก็หา
ศึกษาเพิ่มการใช้ Keil  เพราะต่อจากนี้เราจะไม่พูดเรื่องการ Setup Keil แล้ว เราจะไปต่อที่ตัว MCU เลยครับ

เมื่อทำตามมาถึงตรงนี้เราก็พร้อมเดินเครื่องกันได้เลยครับ  ตรงนี้ขอจบไว้ก่อนที่การ  Setup Keil ก่อนเขียนโปรแกรม