วันอังคารที่ 9 เมษายน พ.ศ. 2556

STM32F3xx GPIO

สวัสดีครับบทความนี้จะเป์นการใช้งาน GPIO ของ stm32f3xx

  • 1.ประกาศ structure GPIO ชื่อ GPIO_InitStructure ดังนี้
     GPIO_InitTypeDef       GPIO_InitStructure;
  • 2.เปิดใช้งาน clock ของ GPIO port E โดยใช้คำสั่ง RCC_AHBPeriphClockCmd ดั้งนี้
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);

  • 3.กำหนดค่าการทำงานของ GPIO ตัวอย่างจะใช้ pin 0 กับ 1 ดังนี้
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // เลือก pin
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;           // เลือก mode เป็น digital out put
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           // เลือกวงจรขับแบบ Push-pull
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;    // ไม่ต่อ R pull up และ pull down
      GPIO_Init(GPIOE, &GPIO_InitStructure);                               // กำหนดค่าลง port E

ตอนนี้ port E pin 0 กับ pin 1 จะเป็น digital out put และมีคำสั่งในการควบคุมต่างๆ ดังต่อไปนี้

GPIO_SetBits( GPIOz, GPIO_Pin_x);
GPIO_ResetBits(GPIOz, GPIO_Pin_x);
GPIO_WriteBit(GPIOz, GPIO_Pin_x, BITVALUE);
GPIO_Write(GPIOz, PORTVALUE);

*z แทนชื่อ port
*x แทนชื่อ pin





วันพุธที่ 11 เมษายน พ.ศ. 2555

เริ่มต้น 32 bit กับ STM32

STM32 เป็นไมโครคอนโทรลเลอร์ 32 บิต ซึ่งหน่วยประมวลผลกลางเป็น ARM Cortex-M3 สำหรับความสามารถและความเร็วของไมโครคอนโทรลเลอร์ 32 บิต นั้นดีกว่า 8 บิต พอสมควรแต่ต้องแลกกับความยากในการเขียนโปรแกรม เนื่องจากว่าโครงสร้างภายในมีความซับซ้อนมากว่าจึงทำให้การกำหนดค่ารีจิสเตอร์ต่างจะมากกว่า แต่สำหรับไมโครคอนโทรลเลอร์ STM32 นั้น มีชุดความสั่งในการกำหนดรีจิสเตอร์ไว้ให้ ชุดคำสั่งนี้เรียกชื่อเต็มว่า STM32F10x Standard Peripherals Library สามารถดาวน์โหลดได้ฟรีที่ เวปของ ST (www.st.com) หรือ ที่นี้

วันอาทิตย์ที่ 29 มกราคม พ.ศ. 2555

เปิดโปรแกรมด้วย RUN

ในเวลาที่เราลงโปรแกรมไปเยอะสิ่งหนึ่งที่เจอะคือเวลาจะเปิดโปรแกรมจาก start menu เราต้องเสียเวลาในการหา แต่มีตัวช่วยที่จะทำให้เราเปิดโปรแกรมที่ต้องการได้เร็วขึ้น คือ RUN โดยการเรียกใช้ RUN นั้นจะไปที่ start -> RUN หรือกดปุ๋ม windown+R แต่อีกปัญหาคือเราจะรู้ได้อย่างว่าโปรแกรมที่ต้องการจะเปิดต้องพิมพ์ว่าอย่างไร วิธีแรกเราก็พิมพ์มันไปทั้ง path ที่โปรแกรมนั้นอยู่ เช่น C:\Program Files\Atmel\AVR Studio 5.0\avrstudio5.exe แล้ว AVR Studio 5 ก็จะเปิดขึ้นมา แ่ต่ถ้าเราขี้เกียจพิมพ์ยาวขนาดนั้นก็พิมพ์แค่ avrstudio5 ก็พอ แต่ใช่ว่าทุกโปรแกรมจะเป็นเหมือนกันบางโปรแกรมที่ลงไว้อาจจะยังไม่ได้เซ็ืต path ไว้จึงเรียกใช้ไม่ได้แต่เราสามารถเซ็ตเองได้ โดยการเข้าไปแก้ที่ regedit ดังนี้
1. start > RUN พิมพ์ regedit 
2. ไปที่ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windowns\CurrentVersion\App Path 
แล้วทำการแก้ตรงนี้ ตามวิดีโอ(เดี๋ยวอัพให้)

วันศุกร์ที่ 9 ธันวาคม พ.ศ. 2554

ต่อจอ lcd 16x2

   ไมโครคอนโทรลเลอร์ก็เหมือนกับเคสคอมพิวเตอร์ย่อขนาดมาใส่ไว้ในชิบ ในบทความนี้จะพาต่อจอแสดงผลออกมาครับ ซึ่งจอแสดงผลที่เป็นพื้นฐานที่นำมาต่อกับไมโครคอนโทรลเลอร์คือจอ LCD Character แต่จอแสดงผลแบบนี้จะมี IC คอนโทรลอีกที่ IC ตัวนั้นคือ IC เบอร์ hd44780 ซึ่งตอนแรกผมตั้งใจจะเขียน library ติดด่อกับ hd44780 แต่พอได้ไปดู library ที่เขาเขียนไว้แล้วเอาของเขาดีกว่า เขียนดีกว่าเราเยอะ lib ที่เอามานี้ผมเอามาจาก avrfreaks.net สาวก avr ควรไปสมัครเป็นสมาชิกไว้ เพราะจะโหลด lib เขาต้องเป็นสมาชิกก่อนถึงจะโหลดได้


วันอังคารที่ 6 ธันวาคม พ.ศ. 2554

รีจิสเตอร์ คืออะไร


  registers คือวงจรภายในที่ทำหน้าที่ควบคุมการทำงานของไมโครคอนโทรลเลอร์ เราสามารถติดต่อกับรีจิสเตอร์ผ่าน RAM โดยมีการแบ่งได้หลายแบบ ถ้าแบ่งตามลักษณะการทำงานจะแบ่งได้ 3 ชนิด


  1. control register ทำหน้าที่ควบคุมการทำงาน
  2. data register   ทำหน้าที่รับส่งข้อมูล
  3. status register  ทำหน้าที่บอกสถานะ
ยกตัวอย่าง register ที่เกี่ยวกับ I/O ของ atmega8 มีอยู่ 3 ตัว คือ DDR ,PORT และ PIN DDR เป็น control register PORT และ PIN เป็น data register มาดูโปรแกรมกัน

  1. #include <avr/io.h>

  2. int main()
  3. {
  4. DDRB = 0xFF ;
  5. DDRC = 0x00 ;
  6. while(1)
  7. {
  8. PORTB = PINC ;
  9. }
  10. }
จากโปรแกรมผมเซ็ต port B ให้เป็น output เซ็ต port C ให้เป็น input แล้วนำข้อมูลจาก port C มาออกที่ port B ข้อมูลของregister สามารถหาอ่านได้ ใน use manual ของ mcu เบอร์นั้นๆ นะครับ

วันจันทร์ที่ 5 ธันวาคม พ.ศ. 2554

เริ่มต้นเขียนโปรแกรม Microcontroller

     ในการเริ่มต้นเขียนโปรแกรมไมโครคอนโทรลเลอร์นั้นจริงๆ จะต้องศึกษาสถาปัตยกรรมภายในของไมโครคอนโทรลเลอร์ของเบอร์ที่เราจเขียน แต่ถ้าเขียนด้วยภาษาซีแล้วอาจจะไม่ต้องไปทำความเข้าใจถึงขนาดนั้นเอาแค่ทำความเข้าใจเรื่องรีจิสเตอร์ ในตอนแรกนี้จะมีรีจิสเตอร์ที่เกี่ยวข้องอยู่สองตัวคือ DDR (รีจิสเคอร์ควบคุมกำหนดทิศทางของข้อมูล) กับ PORT (เป็นรีจิสเตอร์ข้อมูลที่ใช้เก็บข้อมูลที่เช้า ออก ผ่าน port)

     สำหรับภาษาซีที่เขียนในคอนโทรลเลอร์นั้นหลักๆ จะแยกออกสองส่วนที่อยู่ในฟังก์ชั่นหลัก ( main )


  1.           int main()
  2.          {
  3.                ประกาศตัวแปร เซ็ตรีจิสเตอร์(ส่วนที่1)

  4.                       while loop 
  5.                       {
  6.                         งานที่จะทำ   (ส่วนที่2)
  7.                        }
  8.           }