วันศุกร์ที่ 3 พฤษภาคม พ.ศ. 2556

ใช้งาน GPIO STM32F10x

สำหรับการใช้งาน GPIO ของ STM32F1 โดยใช้เป็น Digital out put มีขั้นตอนดังนี้
  • ประกาศ GPIO_InitTypeDef ซึ่งจะใช้เก็บค่าในการกำหนด GPIO 
  • เปิดใช้งาน clock ของ GPIO
  • กำหนดค่า Port




สำหรับ GPIO สามารถเลื่อกโหมดได้ดังนี้
  • GPIO_Mode_AIN กำหนดให้เป็นอนาล็อกอินพุต
  • GPIO_Mode_IN_FLOATING กำหนดให้เป็นขาดิจิตอลอินพุตแบบลอยขา
  • GPIO_Mode_IPD กำหนดให้เป็นดิจิตอลอินพุตแบบพูลดาวน์
  • GPIO_Mode_IPU กำหนดให้เป็นดิจิตอลอินพุตแบบพูลอัพ
  • GPIO_Mode_Out_OD กำหนดให้เป็นดิจิตอลเอาท์พุตแบบ open-drain
  • GPIO_Mode_Out_PP กำหนดให้เป็นดิจิตอลเอาท์พุตแบบ push-pull
  • GPIO_Mode_AF_OD กำหนดให้เป็นขาฟังก์ชันพิเศษแบบ open-drain
  • GPIO_Mode_AF_PP กำหนดให้เป็นขาฟังก์ชันพิเศษแบบ push-pull
และตัวแปรอื่นสามารถกำหนดได้ตามภาพข้างล่าง





วันอังคารที่ 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 เบอร์นั้นๆ นะครับ