การทำงานกับตัวบ่งชี้ LCD บนบอร์ดพัฒนา STM32L-Discovery การฝึกอบรมเรื่อง STM32 ให้กับมวลชน บล็อกตัวแบ่งความถี่

ข้อมูลทั่วไป

บอร์ดพัฒนา STM32L-Discovery มีจอแสดงผลคริสตัลเหลว (LCD) พร้อมด้วยอักขระ 14 ส่วน 6 ตัว, 4 โคลอน (โคลอน), 4 จุด (DP), 4 แถบ (บาร์) เซ็กเมนต์ทั้งหมดจะรวมกันเป็นกลุ่ม COM0, COM1, COM2, COM3 จาก 24 เซ็กเมนต์ แต่ละกลุ่มมี "สายสามัญ" แยกกัน


มีการติดตั้งไมโครคอนโทรลเลอร์ STM32L152RBT6 บนบอร์ดดีบัก ไมโครคอนโทรลเลอร์มีคอนโทรลเลอร์ LCD ในตัวที่ควบคุมตัวบ่งชี้ LCD ขาวดำ
ตัวควบคุมจอแอลซีดี:

  1. ช่วยให้คุณกำหนดค่าความถี่การอัพเดต (อัตราเฟรม - ความถี่ที่ข้อมูลบน LCD ได้รับการอัพเดต)
  2. รองรับโหมดการควบคุมแบบคงที่และมัลติเพล็กซ์
  3. รองรับ การติดตั้งซอฟต์แวร์ตัดกัน
  4. ช่วยให้ควบคุมแรงดันไฟฟ้าได้หลายระดับ (สูงสุด 4 ระดับ)
  5. ใช้การบัฟเฟอร์สองครั้งทำให้ข้อมูลในการลงทะเบียน LCD_RAM ​​​​สามารถอัปเดตได้ตลอดเวลาระหว่างการทำงานของโปรแกรมโดยไม่ละเมิดความสมบูรณ์ของข้อมูลที่แสดง

การลงทะเบียนหน่วยความจำคอนโทรลเลอร์ LCD

ไมโครคอนโทรลเลอร์ STM32L152RB มีการลงทะเบียน LCD_RAM ​​​​พิเศษซึ่งข้อมูลที่เก็บไว้ซึ่งสอดคล้องกับกลุ่มของเซ็กเมนต์ COM0 - COM3 แต่ละกลุ่มสอดคล้องกับรีจิสเตอร์ 32 บิตสองตัว การลงทะเบียนจำนวนนี้ทำให้ไมโครคอนโทรลเลอร์สามารถควบคุม LCD c จำนวนมากเซ็กเมนต์มากกว่าที่ติดตั้งบนบอร์ดพัฒนา

ในการควบคุม LCD ที่มี 176 ส่วน จะใช้ 4 กลุ่ม COM0 - COM3 จาก 44 ส่วนในแต่ละส่วน ในการควบคุม LCD ที่มี 320 ส่วน จะใช้ 8 กลุ่ม COM0 - COM7 จาก 40 ส่วนแต่ละส่วน



บอร์ดพัฒนา STM32L-Discovery ใช้จอ LCD ที่มี 96 ส่วน แบ่งออกเป็น 4 กลุ่ม COM0 - COM3 จาก 24 ส่วนแต่ละส่วน


LCD บนบอร์ดพัฒนา STM32L-Discovery เชื่อมต่อในลักษณะที่บิต S40, S41 ของการลงทะเบียน LCD_RAM ​​​​ที่สองในแต่ละกลุ่มและใช้บิต S0-S27 ของการลงทะเบียน LCD_RAM ​​​​แรก เพื่อลดจำนวนรีจิสเตอร์ที่ใช้ ข้อมูลจากบิต S40-S43 จะถูกเขียนไปยังบิตอิสระ S28-S31 โดยใช้ฟังก์ชันการแมปใหม่

บล็อกตัวแบ่งความถี่

บล็อกตัวแบ่งความถี่ (ตัวสร้างความถี่) ช่วยให้คุณได้รับอัตราเฟรมที่แตกต่างกันบน LCD ในช่วงตั้งแต่ 32 kHz ถึง 1 MHz ข้อมูลต่อไปนี้สามารถใช้เป็นแหล่งสัญญาณไทม์มิ่งได้:
  1. เครื่องกำเนิดความถี่ต่ำภายนอกที่มีความถี่ 32 kHz (LSE ภายนอกความเร็วต่ำ)
  2. เครื่องกำเนิดความถี่ต่ำภายในที่มีความถี่ 37 kHz (LSI ภายในความเร็วต่ำ)
  3. เครื่องกำเนิด RF ภายนอกที่มีตัวแบ่งความถี่ 2,4,8 และ 16 และความถี่สูงสุด 1 MHz (HSE ภายนอกความเร็วสูง)
เพื่อให้ได้จังหวะเวลาที่แม่นยำและลดการชดเชยแรงดันไฟฟ้า กระแสตรงแหล่งที่มาของสัญญาณไทม์มิ่งจะต้องเสถียรผ่านส่วน LCD สัญญาณนาฬิกา LCDCLK จะถูกส่งไปยังคอนโทรลเลอร์ LCD ความถี่สัญญาณนาฬิกาจะถูกแบ่งตามปัจจัยการแบ่งที่กำหนดโดยบิต PS, DIV ของรีจิสเตอร์ LCD_FCR (Frame Control Register) ความถี่ผลลัพธ์ที่เอาต์พุตของบล็อกตัวแบ่งความถี่คำนวณโดยสูตร:

F ck_div =F LCDCLK / (2 พิโคเซคอน *(16+DIV))

อัตราเฟรมคำนวณโดยใช้สูตร:

F Frame =f ck_div *หน้าที่

โดยที่หน้าที่คือรอบการทำงาน - อัตราส่วนของระยะเวลาพัลส์ต่อช่วงเวลา ในระหว่างหนึ่งเฟรม ข้อมูลจาก LCD_RAM[x], LCD_RAM ​​ฯลฯ จะถูกแสดงตามลำดับบน LCD สำหรับ LCD ที่ติดตั้งบนบอร์ดพัฒนา ในหนึ่งเฟรม คอนโทรลเลอร์ LCD จะต้องส่งข้อมูลออกจากกลุ่ม 4 กลุ่ม COM0 - COM3 ดังนั้นระยะเวลาของพัลส์ควบคุมสำหรับหนึ่งกลุ่มจะเท่ากับ 1/4 ของระยะเวลาเฟรม กล่าวคือ หน้าที่=1/4.

การควบคุมจอแอลซีดี

มีสองวิธีในการควบคุม LCD - โหมดควบคุมแบบคงที่และโหมดควบคุมมัลติเพล็กซ์ ด้วยตัวบ่งชี้แบบคงที่ แต่ละส่วนของบิตตัวบ่งชี้จะเชื่อมต่อกับเอาต์พุตของไมโครคอนโทรลเลอร์ ในความสัมพันธ์กับ LCD บนบอร์ดดีบั๊ก STM32LDiscovery ต้องใช้พินไมโครคอนโทรลเลอร์ 6 * 14 = 84 ตัว (ไม่รวมโคลอน จุด และแถบ) เนื่องจากมีการใช้พินจำนวนมาก การเชื่อมต่ออุปกรณ์ต่อพ่วงอื่นๆ จึงเป็นไปไม่ได้ ไมโครคอนโทรลเลอร์ STM32L152RB มี 64 พิน ในโหมดควบคุมมัลติเพล็กซ์ (โหมดควบคุมไดนามิก) ส่วนที่เหมือนกันของตัวเลขตัวบ่งชี้จะถูกรวมเป็นกลุ่ม ข้อมูลจะแสดงขึ้นเนื่องจากการสลับแสงของส่วนของตัวเลขตัวบ่งชี้ โดยมีความถี่ที่สายตามนุษย์ไม่สามารถมองเห็นได้

การควบคุมมัลติเพล็กซ์ช่วยให้คุณควบคุมเซ็กเมนต์จำนวนมากได้ แทนที่จะแยกการควบคุมแต่ละองค์ประกอบ สามารถแก้ไขได้ด้วยแถวและคอลัมน์ (COM และ SEG) ซึ่งทำให้วงจรควบคุมง่ายขึ้นเนื่องจาก แต่ละส่วนไม่จำเป็นต้องมีสายควบคุมของตัวเอง หากต้องการเปิดใช้งานส่วนที่เลือก ต้องใช้ความแตกต่างที่เป็นไปได้ COM และ SEG ตัวอย่างการทำงานของตัวบ่งชี้หลักตัวแรก (ตัวบ่งชี้จะแสดง “1:”):


ตัวเลขตัวแรกของตัวบ่งชี้ ณ เวลา t 0


ตัวเลขตัวแรกของตัวบ่งชี้ ณ เวลา t 1


ตัวเลขตัวแรกของตัวบ่งชี้ ณ เวลา t 2


แผนภาพทั่วไปของการเชื่อมต่อส่วนต่างๆ กับพิน LCD


แผนภาพการเชื่อมต่อของพิน LCD เข้ากับพอร์ตไมโครคอนโทรลเลอร์

สำหรับสาย SEG จะใช้แรงดันไฟฟ้าควบคุมจำนวนระดับที่กำหนดโดยค่าสัมประสิทธิ์อคติ LCD บนบอร์ดพัฒนาใช้โหมดควบคุมมัลติเพล็กซ์พร้อมหน้าที่ = 1/4 และไบแอส = 1/3 ค่าหน้าที่และค่าอคติจะถูกตั้งค่าผ่านการลงทะเบียน LCD_CR (Control Register) ในบิต DUTY และ BIAS

ฝึกฝน

การกำหนดค่าพอร์ตไมโครคอนโทรลเลอร์

ในการควบคุม LCD ต้องกำหนดค่าพอร์ตไมโครคอนโทรลเลอร์ตาม:
  1. ถึงทางออก
  2. การใช้ฟังก์ชั่นสำรอง AF 11
  3. มีความถี่เอาต์พุตไปที่พอร์ต 400 kHz
  4. ใช้โหมดการทำงานแบบกดดึง
  5. ไม่มีตัวต้านทานแบบดึงขึ้น
เมื่อพอร์ตทำงานในโหมดฟังก์ชันสำรอง บัฟเฟอร์ข้อมูลเอาท์พุตของพอร์ตจะถูกควบคุมโดยสัญญาณที่มาจากอุปกรณ์ต่อพ่วง ไฟล์ส่วนหัว stm32lxx.h ของไลบรารี CMSIS มีคำอธิบายของรีจิสเตอร์ต่อพ่วงทั้งหมด รวมถึงโครงสร้างสำหรับการเข้าถึง

หมุด LCD เชื่อมต่อกับพอร์ต GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) ของไมโครคอนโทรลเลอร์ เพื่อให้จอ LCD ทำงานได้ จะต้องจ่ายสัญญาณนาฬิกาให้กับพอร์ตที่เลือก พอร์ต GPIO ของไมโครคอนโทรลเลอร์นั้นโอเวอร์คล็อกจากบัส AHB ของระบบ RCC (รีเซ็ตและควบคุมนาฬิกา) - นาฬิกาและระบบรีเซ็ต สัญญาณนาฬิกาจะถูกส่งโดยการตั้งค่าบิตที่สอดคล้องกันในรีจิสเตอร์ RCC_AHBENR (การลงทะเบียนการเปิดใช้งานนาฬิกาต่อพ่วง AHB)

Register RCC_AHBENR (รูปแสดง 15 บิตแรก)

สำหรับพอร์ต GPIOA, GPIOB, GPIOC คุณต้องตั้งค่า 1 เป็น 0, 1, 2 บิตของการลงทะเบียน

ต่อไปผมจะจัดเตรียมโค้ดสำหรับเขียนข้อมูลลงในรีจิสเตอร์โดยใช้บิตมาสก์และโค้ดเลขฐานสิบหก การใช้ bitmasks นั้นสะดวกกว่า แต่การทำงานกับรหัสฐานสิบหกช่วยให้คุณเข้าใจสาระสำคัญของการทำงานกับรีจิสเตอร์

RCC->AHBENR |=(RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN|RCC_AHBENR_GPIOCEN); หรือ RCC->AHBENR = 0x7; /* 0x7=111 */

เพื่อระบุโหมดการทำงานของพอร์ต จะใช้รีจิสเตอร์ GPIOx_MODER (รีจิสเตอร์โหมดพอร์ต GPIO) (x = A..H) รีจิสเตอร์บิตทั้งหมดจะถูกจัดกลุ่มเป็นกลุ่ม MODERy โดยที่ y คือหมายเลขพินของพอร์ตที่เกี่ยวข้อง ต้องกำหนดค่าพอร์ตสำหรับโหมดฟังก์ชันสำรอง เช่น ในกลุ่มที่รับผิดชอบพินให้ตั้งค่าเป็น 10 สำหรับพอร์ต GPIOA คุณต้องกำหนดค่าพิน 1-3,8-10,15 นั่นคือตั้งค่า 1 เป็น 3,5,7,17,19 21,31 หลัก.


ลงทะเบียน GPIOx_MODER (การลงทะเบียนโหมดพอร์ต GPIO)

GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1 | GPIO_MODER_MODER15_1); หรือ GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1,000 0000 0010 1010 0000 0000 1010 1,000 */
พอร์ตไมโครคอนโทรลเลอร์ต้องเปลี่ยนเป็นโหมดกดดึง ในการดำเนินการนี้คุณต้องตั้งค่า 1 ในการลงทะเบียน GPIOx_OTYPER (การลงทะเบียนประเภทเอาต์พุตพอร์ต GPIO) ในบิตที่รับผิดชอบพิน


ลงทะเบียน GPIOx_OTYPER (การลงทะเบียนประเภทเอาต์พุตพอร์ต GPIO)

GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_15); หรือ GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1,000 0111 0000 1110 */
ตัวเลือกทั้งสองส่งผลต่อพินที่เลือก (สำหรับพอร์ต GPIOA มีการกำหนดค่าพิน 1-3.8-10.15) หากคุณต้องการสลับพินพอร์ตทั้งหมดเป็นโหมด push-pull คุณสามารถเขียนค่าต่อไปนี้ลงในรีจิสเตอร์:
GPIOA->OTYPER = 0x0;
ในการระบุความถี่ของข้อมูลที่ส่งออกไปยังพอร์ต จะใช้รีจิสเตอร์ GPIOx_OSPEEDR (การลงทะเบียนความเร็วเอาต์พุตพอร์ต GPIO) รีจิสเตอร์บิตทั้งหมดจะถูกจัดกลุ่มเป็นกลุ่ม OSPEEDRy โดยที่ y คือหมายเลขพินของพอร์ตที่เกี่ยวข้อง ในงานนี้ควรตั้งความถี่ไว้ที่ 400 kHz เช่น ในกลุ่มที่รับผิดชอบพินให้ตั้งค่าเป็น 00


ลงทะเบียน GPIOx_OSPEEDR (การลงทะเบียนความเร็วเอาต์พุตพอร์ต GPIO)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10 | GPIO_OSPEEDER_OSPEEDR15); หรือ GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
หากคุณต้องการตั้งค่าความถี่เอาต์พุตให้กับพอร์ตเป็น 400 kHz สำหรับพินทั้งหมด คุณสามารถเขียนค่าลงในรีจิสเตอร์ได้:
GPIOA->OSPEEDR = 0x0;
หากต้องการปิดใช้งานตัวต้านทานแบบดึงขึ้นและดึงลงสำหรับพินที่เลือก ให้ใช้รีจิสเตอร์ GPIOx_PUPDR (รีจิสเตอร์ดึงขึ้น/ดึงลงของพอร์ต GPIO) รีจิสเตอร์บิตทั้งหมดจะถูกจัดกลุ่มเป็นกลุ่ม PUPDRy โดยที่ y คือหมายเลขพินของพอร์ตที่เกี่ยวข้อง หากต้องการปิดใช้งานตัวต้านทานแบบดึงขึ้นในกลุ่มที่รับผิดชอบพิน ให้ตั้งค่าเป็น 00


ลงทะเบียน GPIOx_PUPDR (การลงทะเบียนพอร์ต GPIO แบบดึงขึ้น / ดึงลง)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15); หรือ GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
หากคุณต้องการปิดใช้งานตัวต้านทานแบบดึงขึ้นสำหรับพินทั้งหมด คุณสามารถเขียนค่าลงในรีจิสเตอร์ได้:
GPIOA->PUPDR = 0x0;
หากต้องการใช้ฟังก์ชันทางเลือกสำหรับพอร์ตไมโครคอนโทรลเลอร์ จะต้องลงทะเบียน GPIOx_AFRL สองตัว (ฟังก์ชันสำรอง GPIO ลงทะเบียนต่ำ) รับผิดชอบพินต่ำ (0 ถึง 7) และ GPIOx_AFRH (ลงทะเบียนฟังก์ชันสำรองสูง GPIO) รับผิดชอบพินสูง (8 ถึง 15) ถูกนำมาใช้ รีจิสเตอร์บิตทั้งหมดจะถูกจัดกลุ่มเป็นกลุ่ม AFRLy และ AFRHy โดยที่ y คือหมายเลขพินของพอร์ตที่เกี่ยวข้อง ต้องกำหนดค่าพอร์ตให้ใช้ฟังก์ชันทางเลือก AF11 ด้วยเหตุนี้กลุ่มที่รับผิดชอบพินจะต้องตั้งค่าเป็น 1011


ลงทะเบียน GPIOx_AFRL (ฟังก์ชันสำรอง GPIO ลงทะเบียนต่ำ)


ลงทะเบียน GPIOx_AFRH (ฟังก์ชันสำรอง GPIO ลงทะเบียนสูง)

ในการทำเช่นนี้คุณจะต้องเขียนค่าต่อไปนี้ลงในรีจิสเตอร์:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – เขียนค่าลงในการลงทะเบียน GPIOx_AFRL
AFR = 0xB0000BBB – เขียนค่าลงในรีจิสเตอร์ GPIOx_AFRH

การตั้งค่าพินที่เกี่ยวข้องของพอร์ต GPIOB และ GPIOC นั้นทำในลักษณะเดียวกัน

การตั้งค่าคอนโทรลเลอร์ LCD

เมื่อทำงานกับคอนโทรลเลอร์ LCD เช่นเดียวกับอุปกรณ์ต่อพ่วงอื่น ๆ จะต้องจ่ายสัญญาณนาฬิกาให้ สัญญาณนาฬิกาจะถูกส่งไปยังระบบจัดการพลังงานด้วย ตัวควบคุมและระบบการจัดการพลังงานใช้บัส APB1 สำหรับการตอกบัตร หากต้องการเปิดใช้งานการตอกบัตรในการลงทะเบียน RCC_APB1ENR (การลงทะเบียนเปิดใช้งานนาฬิกาต่อพ่วง APB1) คุณต้องตั้งค่า 1 ในบิต 9 และ 28


ลงทะเบียน RCC_APB1ENR (เปิดใช้งานการลงทะเบียนนาฬิกาต่อพ่วง APB1)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; หรือ RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
เพื่อให้คอนโทรลเลอร์ LCD ทำงาน จำเป็นต้องระบุแหล่งที่มาของสัญญาณนาฬิกา แหล่งที่มาถูกระบุไว้ในการลงทะเบียน RCC_CSR ตามค่าเริ่มต้น การเขียนไปยังรีจิสเตอร์นี้จะถูกปิดใช้งาน การป้องกันการเขียนในรีจิสเตอร์ RCC_CSR จะถูกลบออกจากรีจิสเตอร์ควบคุมพลังงาน PWR_CR รีจิสเตอร์ RCC_CSR ควบคุมแหล่งสัญญาณนาฬิกาของคอนโทรลเลอร์ RTC และ LCD
การเขียนไปยังรีจิสเตอร์ RCC_CSR ถูกเปิดใช้งานโดยการตั้งค่าบิต 8 ของรีจิสเตอร์ PWR_CR เป็น 1


ลงทะเบียน PWR_CR (การลงทะเบียนควบคุมพลังงาน PWR)

PWR->CR |= PWR_CR_DBP; หรือ PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
หากต้องการเปลี่ยนแหล่งสัญญาณนาฬิกาของคอนโทรลเลอร์ LCD (และนาฬิกา RTC ด้วย) คุณต้องรีเซ็ตแหล่งสัญญาณนาฬิกาก่อนโดยตั้งค่าบิต RTCRST (การตั้งค่า 1 เป็นบิต 23) ในรีจิสเตอร์ RCC_CSR (รีจิสเตอร์ควบคุม/สถานะ)


ลงทะเบียน RCC_CSR (การควบคุม/การลงทะเบียนสถานะ)

RCC->ความรับผิดชอบต่อสังคม |= RCC_CSR_RTCRST;
หรือโดยการเขียนค่าลงในรีจิสเตอร์โดยใช้ตัวดำเนินการ “|=” เนื่องจาก มูลค่าโดย
การลงทะเบียนเริ่มต้นแตกต่างจาก 0x0:
RCC->ความรับผิดชอบต่อสังคม |= 0x800000; /* 0x800000 = 1,000 0000 0000 0000 0000 0000 */
ในการเลือกแหล่งสัญญาณนาฬิกาใหม่ คุณต้องลบบิต RTCRST ออก:
RCC->ความรับผิดชอบต่อสังคม &= ~RCC_CSR_RTCRST; หรือ RCC->CSR &= ~0x800000;
เครื่องกำเนิดความถี่ต่ำภายนอกถูกเลือกเป็นแหล่งสัญญาณนาฬิกา หากต้องการเปิดเครื่องกำเนิดไฟฟ้าในการลงทะเบียน RCC_CSR คุณต้องตั้งค่าบิต LSEON (ตั้งค่า 1 ถึง 8 บิต):
RCC->ความรับผิดชอบต่อสังคม |= RCC_CSR_LSEON; หรือ RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
หลังจากเปิดเครื่องกำเนิดไฟฟ้าแล้วจะใช้เวลาพอสมควรในการทำให้เสถียร ตรวจสอบความพร้อมของเครื่องกำเนิดไฟฟ้าโดยการตั้งค่าฮาร์ดแวร์ของบิต LSERDY ในการลงทะเบียน RCC_CSR:
ในขณะที่(!(RCC->CSR&RCC_CSR_LSERDY));
การเลือกเครื่องกำเนิดความถี่ต่ำภายนอกเป็นแหล่งสัญญาณนาฬิกาดำเนินการโดยการตั้งค่า RCC_CSR register เป็น 01 ในกลุ่ม RTCSEL:
RCC->ความรับผิดชอบต่อสังคม |= RCC_CSR_RTCSEL_LSE; หรือ RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
ในคอนโทรลเลอร์ LCD คุณต้องติดตั้ง โหมดที่ต้องการอคติ. ในการดำเนินการนี้ในการลงทะเบียน LCD_CR (การลงทะเบียนการควบคุม LCD) คุณต้องตั้งค่า 10 ในกลุ่ม BIAS ก่อนที่จะติดตั้งบิต จำเป็นต้องล้างบิตของ "ขยะ" ก่อน


ลงทะเบียน LCD_CR (รีจิสเตอร์ควบคุม LCD)

รีเซ็ตบิต:
จอแอลซีดี->CR &= ~LCD_CR_BIAS; หรือ LCD->CR &= ~0x60;
การเลือกโหมด bias=1/3 โดยใช้บิตมาสก์:
จอแอลซีดี->CR |= LCD_CR_BIAS_1; หรือ จอแอลซีดี->CR |= 0x40;
ตั้งโหมดหน้าที่=1/4 ในการดำเนินการนี้ ขั้นแรกเราจะรีเซ็ตบิตทั้งหมดด้วย:
จอแอลซีดี->CR &=~LCD_CR_DUTY; หรือ จอแอลซีดี->CR &= ~0x1C;
ตั้งค่า 011 เป็นกลุ่ม DUTY ของรีจิสเตอร์ LCD_CR
หน้าที่ของโหมด=1/4:
จอแอลซีดี->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; หรือ LCD->CR |= 0xС;
เราเปิดใช้งานฟังก์ชันการกำหนดพินใหม่ เมื่อต้องการทำเช่นนี้ ให้ตั้งค่า 1 ถึง 7 บิตของการลงทะเบียน LCD_CR:
จอแอลซีดี->CR |= LCD_CR_MUX_SEG; หรือ จอแอลซีดี->CR |= 0x80;
เราตั้งค่าของค่าสัมประสิทธิ์การแบ่งความถี่ของสัญญาณนาฬิกา LCDCLK ค่าสัมประสิทธิ์ถูกกำหนดไว้ในการลงทะเบียน LCD_FCR (การลงทะเบียนการควบคุมเฟรม LCD) ขั้นแรก เรายังล้างบิตทั้งหมดด้วย จากนั้นจึงตั้งค่าบิตที่จำเป็น


ลงทะเบียน LCD_FCR (รีจิสเตอร์ควบคุมเฟรม LCD)

จอแอลซีดี->FCR &= ~LCD_FCR_PS; จอแอลซีดี->FCR &= ~LCD_FCR_DIV; หรือ LCD->FCR &= ~0x3C00000; จอแอลซีดี->FCR &= ~0x3C0000;
ค่าของค่าสัมประสิทธิ์การแบ่งความถี่สัญญาณนาฬิกาถูกตั้งค่าเท่ากับ ck_ps = LCDCLK/16, ck_div = ck_ps/17 หากต้องการทำสิ่งนี้ ให้ตั้งค่าตัวเลข 1 ถึง 24 และ 18 หลัก:
จอแอลซีดี->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
ในการตั้งค่าระดับคอนทราสต์ที่ต้องการ คุณต้องตั้งค่า 010 ในกลุ่ม CC และล้างบิตออกจากค่าเก่าก่อน:
จอแอลซีดี->FCR &= ~LCD_FCR_CC; จอแอลซีดี->FCR |= LCD_FCR_CC_1; หรือ LCD->FCR &= ~0x1C00; จอแอลซีดี->FCR |= 0x800; /*0x800 = 1,000 0000 0000*/
หลังจากตั้งค่าทั้งหมดแล้ว จะต้องใช้เวลาระยะหนึ่งในการซิงโครไนซ์รีจิสเตอร์ LCD_FCR การซิงโครไนซ์รีจิสเตอร์ได้รับการตรวจสอบโดยการตั้งค่าบิต FCRSF ในฮาร์ดแวร์ในรีจิสเตอร์ LCD_SR (การลงทะเบียนสถานะ LCD)

ลงทะเบียน LCD_SR (การลงทะเบียนสถานะ LCD)

ในขณะที่(!(LCD->SR&LCD_SR_FCRSR));
ในฐานะแหล่งจ่ายแรงดันไฟฟ้าสำหรับ LCD เราเลือกตัวแปลง step-up ภายในเพื่อสร้าง V lcd เมื่อต้องการทำเช่นนี้ บิตแรกของการลงทะเบียน LCD_CR (การลงทะเบียนการควบคุม LCD) จะถูกตั้งค่าเป็น 0:
จอแอลซีดี->CR &= ~LCD_CR_VSEL; หรือ จอแอลซีดี->CR &= ~0x2;
การทำงานของคอนโทรลเลอร์ LCD ถูกเปิดใช้งานโดยการตั้งค่าบิตการลงทะเบียน LCD_CR (การลงทะเบียนการควบคุม LCD) เป็น 0:
จอแอลซีดี->CR |= LCD_CR_LCDEN; หรือ จอแอลซีดี->CR |= 0x1;
หลังจากติดตั้ง Step-up Converter ภายในเป็นแหล่งจ่ายแรงดันไฟฟ้าแล้ว คุณต้องรอจนกว่าจะพร้อม ตรวจสอบความพร้อมโดยการตั้งค่าฮาร์ดแวร์ของบิต RDY ในรีจิสเตอร์ LCD_SR (รีจิสเตอร์สถานะ LCD):
ในขณะที่(!(LCD->SR&LCD_SR_RDY));
หลังจากปล่อยให้คอนโทรลเลอร์ LCD ทำงานแล้ว คุณต้องรอจนกว่าจะพร้อม ตรวจสอบความพร้อมโดยการตั้งค่าฮาร์ดแวร์ของบิต ENS ในรีจิสเตอร์ LCD_SR (รีจิสเตอร์สถานะ LCD):
ในขณะที่(!(LCD->SR&LCD_SR_ENS));

การก่อตัวของภาพบนจอ LCD

ส่วนตัวบ่งชี้ทั้งหมดจะรวมกันเป็นกลุ่ม COM0 - COM3 โดยแต่ละส่วนมี 24 ส่วน (SEG0-SEG23) ข้อมูลเกี่ยวกับเซ็กเมนต์จะถูกเก็บไว้ในการลงทะเบียน LCD_RAM ​​ของหน่วยความจำคอนโทรลเลอร์ LCD สายไฟ แผงวงจรพิมพ์เป็นเช่นนั้นหมายเลขเซ็กเมนต์ไม่ตรงกับหมายเลขบิตของการลงทะเบียน LCD_RAM

หากต้องการแสดง 1 ในหลักแรกของจอ LCD คุณต้องแบ่งส่วนแสง 1B, 1C ส่วน 1B เป็นของกลุ่ม COM0 ส่วน 1C เป็นของกลุ่ม COM1 ดังนั้นจึงต้องเขียนข้อมูลเกี่ยวกับสิ่งเหล่านี้ลงในการลงทะเบียน RAM (LCD_RAM0), RAM (LCD_RAM2) ตามลำดับ เซ็กเมนต์ 1B รับผิดชอบเอาต์พุต LCD LCDSEG22 ซึ่งเป็นข้อมูลที่จัดเก็บไว้ในบิต SEG40 ของการลงทะเบียน RAM (LCD_RAM1) เมื่อใช้ฟังก์ชันการแมปใหม่ เซ็กเมนต์ LCDSEG22 จะถูกกำหนดให้กับบิต SEG28 ของการลงทะเบียน RAM (LCD_RAM0) ส่วน 1C รับผิดชอบเอาต์พุต LCD LCDSEG1 ซึ่งเป็นข้อมูลที่จัดเก็บไว้ในบิต SEG1 ของการลงทะเบียน RAM (LCD_RAM2)

จอแอลซีดี -> RAM = 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ จอแอลซีดี -> RAM = 0x2; /*0x2= 10 */
ก่อนที่จะเขียนค่าลงรีจิสเตอร์หน่วยความจำ จำเป็นต้องตรวจสอบว่าการถ่ายโอนข้อมูลก่อนหน้าไปยัง LCD เสร็จสมบูรณ์หรือไม่ ในการดำเนินการนี้ บิต UDR (คำขออัปเดตการแสดงผล) ของการลงทะเบียน LCD_SR (การลงทะเบียนสถานะ LCD) จะถูกตรวจสอบ คอนโทรลเลอร์ LCD มีบัฟเฟอร์เอาต์พุตสองตัว ข้อมูลจะถูกป้อนลงในบัฟเฟอร์แรก และเอาต์พุตไปยัง LCD จากบัฟเฟอร์ที่สอง บิต UDR ถูกตั้งค่าระหว่างการถ่ายโอนจากบัฟเฟอร์แรกไปยังวินาที ปกป้องการลงทะเบียน LCD_RAM ​​​​จากการเขียน:
ในขณะที่(จอแอลซีดี->SR & LCD_SR_UDR);
หลังจากเขียนข้อมูลไปยังการลงทะเบียน LCD_RAM ​​คุณจะต้องตั้งค่าบิต UDR ในการลงทะเบียน LCD_SR (การลงทะเบียนสถานะ LCD) (ตั้งค่า 1 ถึง 2 บิต):
จอแอลซีดี->SR |= LCD_SR_UDR; หรือ จอแอลซีดี->SR |= 0x4; /*0x4 = 100 */

สำหรับการทรมานและการศึกษาอุปกรณ์นี้ พูดไม่ทันทำเลย รวบรวมผ้าพันคอแล้วเราก็ออกเดินทาง โอ้ใช่! หัวข้อการสนทนาของเราเปลี่ยนเป็นการเปรียบเทียบ MK ทั้งสอง อันข้างบนต่อต้าน ATmega328 ทำไมพวกเขาถึงเป็นเช่นนั้น? MK ทั้งสองอยู่ในแพ็คเกจ TQFP-32 (จริงอยู่ที่ ATmega328 มาในแพ็คเกจ DIP ด้วย)
ตอนนี้เรามาดูภายในของพวกเขากันดีกว่า เพื่อความเข้าใจที่มากขึ้น ฉันได้รวบรวมข้อมูลที่จำเป็นทั้งหมดไว้ในตารางเดียว

ตัวเลือก ATmega328 STM32F030K6T6
ความลึกบิต 8 บิต 32 บิต
แฟลช 32กิโลไบต์ 32กิโลไบต์
สแรม 1กิโลไบต์ 4กิโลไบต์
อีพรอม 512b -
ไทม์เมอร์ 8 บิต 2 ชิ้น -
ไทม์เมอร์ 16 บิต 1 ชิ้น 16 ชิ้น
พีเอ็มดับเบิลยู 3ช่อง 6ช่อง
USART 1 ชิ้น 1 ชิ้น
เอสพีไอ 1 ชิ้น 1 ชิ้น
ไอทูซี 1 ชิ้น (TWI) 1 ชิ้น
เอดีซี 8 ช่อง 10 บิต 16 ช่อง 12 บิต
โภชนาการ 2,7 - 5,5 2,4 - 3,6
ความเร็ว 0 - 16เมกะเฮิรตซ์ 48MHz พร้อมภายนอก 4 - 32MHz
ราคา 160 - 170 ถู 80 - 140 ถู
อย่างที่คุณเห็นจากตาราง STM32 ค่อนข้างน่าสนใจและสมบูรณ์กว่า AVR มีสิ่งเล็กๆ น้อยๆ อยู่อย่างหนึ่งจริงๆ STM32 ไม่มี EEPROM แต่มี DMA ที่จะฆ่า AVR โดยสิ้นเชิง จริงอยู่ AVR มี Arduino และการเขียนโปรแกรมที่ง่ายดาย ฉันไม่เถียง แต่ STM32 มี STM32Cube ซึ่งสร้างโค้ดสำหรับ IAR และดูแลขั้นตอนการตั้งค่าอุปกรณ์ต่อพ่วงทั้งหมด และหมุดสุดท้ายในโลงศพของ AVR คือ RTOS ใช่ คุณยังสามารถติดตั้งบน AVR ได้ แต่คุณต้องเข้าใจก่อน แต่ใน STM32 เราทำเครื่องหมายที่ช่อง "FREERTOS" เท่านี้ก็เรียบร้อย ตัวระบบจะทำทุกอย่างที่จำเป็น และสิ่งที่เราต้องทำคือสร้างเธรดและเขียนโค้ดลงไป นี่เป็นเพียงสำหรับผู้เริ่มต้นเท่านั้น ที่จริงแล้วทุกอย่างซับซ้อนขึ้นเล็กน้อยที่นั่น กล่าวโดยสรุป ฉันชอบ STM32 และเพื่อที่จะชนะใจคุณให้มาสู่แพลตฟอร์มนี้ โดยโยน Arduino ลงในลิ้นชัก ฉันจะสร้างบอร์ดตั้งแต่ต้นจนจบและแสดงวิธีทำงานกับมัน โอ้ ฉันลืมไป STM32 ทั้งหมดมีดีบักเกอร์ SWD นี่คือสายสามสาย SWDIO, SWCLK, GND และคุณสามารถข้ามบรรทัดของโค้ดได้โดยตรงในฮาร์ดแวร์และไม่เหมือนกับ ATmega328 ใน Proteus ในการทำเช่นนี้คุณเพียงแค่ต้องมีโปรแกรมเมอร์สากล ST-LINK สามารถใช้ได้หากคุณซื้อบอร์ด Discovery หรือโปรแกรมเมอร์แยกต่างหาก และตอนนี้จากคำพูดสู่การกระทำ
โครงการ ใหญ่กว่า
ฉันสร้างบอร์ดนี้เป็นโมดูลสำหรับบอร์ดดีบั๊กสำหรับ AVR แต่คุณสามารถทำซ้ำได้โดยแจกจ่ายบอร์ดตามดุลยพินิจของคุณ (ฉันจะโพสต์โครงการสำหรับ DipTrace ในตอนท้ายของบทความ) อะไรอยู่ในแผนภาพ และแผนภาพแสดงชุดบังเหียนธรรมดาสำหรับ AVR ควอทซ์ 8 MHz พร้อมตัวเก็บประจุ 20p สองตัว เช่นเดียวกับใน AVR วงจรจ่ายไฟสำหรับส่วนรองรับ ADC จะถูกประกอบเข้าด้วยกัน รีเซ็ตวงจรเช่น AVR ข้อแตกต่างเพียงอย่างเดียวคือวงจร BOOT ต่างจาก AVR ตรงที่ STM32 ทั้งหมดมีฮาร์ดแวร์บูตโหลดเดอร์อยู่บนบอร์ด โดยค่าเริ่มต้นจะเชื่อมต่อกับ USART นั่นคือหากคุณกดพิน BOOT0 เข้ากับแหล่งจ่ายไฟแล้วรีสตาร์ท MK จากนั้นใช้โปรแกรม Flash Loader Demonstrator คุณสามารถแฟลช MK ได้โดยไม่ต้องใช้โปรแกรมเมอร์ คุณสมบัตินี้มีประโยชน์หากคุณมีอุปกรณ์ที่พร้อมใช้งานอยู่แล้วและจำเป็นต้องอัปเดตเฟิร์มแวร์ คุณเพียงต้องใช้อะแดปเตอร์ USB USART เท่านั้น หลายคนไม่อยากยุ่งกับ STM32 เนื่องจากไฟจ่ายไม่เกิน 3.6 โวลต์ เรื่องไร้สาระ หากดูตารางพินจะสังเกตเห็นว่าขาทุกข้างสามารถรับไฟได้ 5 โวลต์โดยไม่มีผลกระทบใดๆ เดินหน้าต่อไป

และนี่คือลักษณะที่ติดตั้งบนบอร์ด

ตอนนี้เราเชื่อมต่อโปรแกรมเมอร์ ST-LINK-GA เข้ากับตัวเชื่อมต่อ SWD

เมื่อทุกอย่างพร้อมแล้ว ให้ดาวน์โหลดเวอร์ชันล่าสุดจากเว็บไซต์ ST (ลิงก์ที่ด้านล่างสุดของหน้า) ติดตั้งและเปิดใช้งาน

คลิกโครงการใหม่ และในหน้าต่างที่ปรากฏขึ้นเราจะพบตัวควบคุมของเรา คลิกตกลง

หลังจากคิดได้นิดหน่อย โปรแกรมจะแสดงหน้าต่างแบบนี้

ฉันจะไม่อธิบายว่าอะไรและเพราะเหตุใดเนื่องจากนี่คือหัวข้อของบทความแยกต่างหาก ตัวอย่างเช่น แค่ทำตามสิ่งที่ฉันแสดงให้คุณเห็น พวกเราทำอะไร. เราจะเปิดตัว ระบบปฏิบัติการและในเธรดเดียวเราจะกะพริบ LED ประเภท "Heloy Word" จากปืนใหญ่))) หากต้องการทำสิ่งนี้ในหน้าต่างด้านซ้ายให้คลิกที่เครื่องหมายบวกถัดจากคำจารึก "FREERTOS" และทำเครื่องหมายในรายการแบบเลื่อนลง

นอกจากนี้ ทันทีที่เลือกควอตซ์ภายนอก ทางด้านขวาของคอนโทรลเลอร์ ขาที่คุณต้องแขวนจะถูกเน้นเป็นสีเขียว สิ่งต่อไปที่คุณต้องทำคือเลือกขาที่ LED จะแขวน ฉันเลือกพอร์ต B และพิน 0 และพบคราด ฉันไม่รู้ว่าทำไมฉันจึงหมุนหวีเอาท์พุตของพินสี่ตัวแรกกลับหัวด้วยความกลัว ทำให้เกิดความสับสนในพอร์ต B ปัญหานี้มีผลกับบอร์ดของฉันเท่านั้น แต่ไม่มีอะไร สิ่งนี้ไม่ได้หยุด MK ไม่ให้ทำงาน และกำหนดค่าพิน ความจริงก็คือด้วย STM พินทั้งหมดสามารถรับค่าได้มากมาย แต่ถ้าเราพูดถึงอินพุต/เอาท์พุตแบบแยก เอาท์พุตอาจมีสามตัวเลือก เอาต์พุตในอากาศ เอาต์พุตแบบดึงขึ้นไปยังแหล่งจ่ายไฟบวก เอาต์พุตแบบดึงขึ้นไปยังบัสทั่วไป ตามค่าเริ่มต้น STM32CubeMX จะห้อยขาขึ้นไปในอากาศ ปล่อยให้เป็นอย่างนั้นเราแค่ต้องตรวจสอบงานและสาธิตพลังของ STM32 ในการกำหนดค่าขาคุณต้องคลิกซ้ายที่ขานั้นแล้วเลือก GPIO_Output ในหน้าต่างที่ปรากฏขึ้น หาก MK เล็กเกินไป คุณสามารถหมุนวงล้อและขยายขนาดได้)))

ขั้นตอนต่อไปคือการปรับการตอกบัตร MK ความจริงก็คือ STM32 ยังไม่ชัดเจนในเรื่องนี้ ต่างจาก AVR ตรงที่ STM32 มีควอตซ์ที่อินพุตด้วยความถี่ 4 ถึง 32 MHz และบนบัสสามารถโอเวอร์คล็อกได้ที่ 48 MHz ภายใน MK มีระบบตอกบัตรที่ซับซ้อนมาก แต่ STM32CubeMX กลับมาช่วยเราอีกครั้ง ไปที่แท็บ Clock Configuration และกำหนดค่าตามภาพด้านล่าง

นั่นคือทั้งหมดที่ คลิกที่ไอคอนรูปเฟืองที่ด้านบน

จะปรากฏหน้าต่างลักษณะนี้

และที่นี่ฉันลืมที่จะพูด ดาวน์โหลดและติดตั้ง IAR ด้วยตัวคุณเอง สามารถดาวน์โหลดได้จากเจ้าหน้าที่แต่ลดจำนวนโค้ดหรือสามารถพบได้ในทอร์เรนต์ หรือถ้าคุณมีเงินพิเศษมากก็สามารถซื้อใบอนุญาตได้ ฉันคิดว่าหลายๆ คนจะเดินตามเส้นทางที่มี CodeVisionAVR โดยทั่วไป ฉันปล่อยให้เรื่องนี้ขึ้นอยู่กับดุลยพินิจของคุณ ฉันมีเวอร์ชัน 7.40 กลับไปที่คิวบ์กันเถอะ ในหน้าต่างให้ตั้งชื่อโครงการ แต่เป็นภาษาละตินเท่านั้น IAR ไม่ชอบตัวอักษรรัสเซียในเส้นทาง และระบุตำแหน่งที่จะจัดเก็บโครงการ ในหน้าต่าง IDE คุณต้องเลือก (และเป็นค่าเริ่มต้น) EWARM คลิกตกลง โปรแกรมคิดแล้วก็แสดงหน้าต่างแบบนี้ อื่น ๆ. โดยทั่วไปให้คลิกเปิดโครงการ (สำหรับผู้ที่อยู่ในถังปุ่มกลาง)

หน้าต่างจะหายไป และ IAR และโครงการของเราจะเปิดตัวแทน ทางด้านซ้ายไปที่ Aplication->User และเรียกใช้ main.c โค้ดชุดนี้คือสิ่งที่ STM32CubeMX สร้างขึ้นสำหรับเรา

และตอนนี้จะทำอย่างไรกับความสยองขวัญนี้? แต่สำหรับสิ่งนี้ เราจำเป็นต้องมีบทความทั้งชุด))) และตอนนี้เราเพิ่งพบโค้ดชิ้นนี้

นี่เป็นเพียงกระแสของเราเท่านั้น ในร่างกาย สำหรับวง(;;) เราลบฟังก์ชันเดียว osDelay(1); และเขียนโค้ดนี้แทน HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
ระบบปฏิบัติการล่าช้า(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
ระบบปฏิบัติการล่าช้า(500);

มหัศจรรย์. ตอนนี้เพียงคลิกที่ปุ่มที่มีลูกศรสีเขียวที่ด้านบนขวาแล้วรอการรวบรวมและดาวน์โหลด

หากทุกอย่างถูกต้องและไม่มีข้อผิดพลาด โปรแกรมจะรวบรวมโปรเจ็กต์ทั้งหมด สร้างทุกสิ่งที่จำเป็น และโหลดเฟิร์มแวร์ลงใน MK หลังจากนี้จะเข้าสู่โหมดแก้ไขข้อบกพร่อง นี่เขาอยู่ ความฝันของชาย AVR หากคุณมีความปรารถนาอย่างแรงกล้าที่จะใช้มัน คุณสามารถไปทีละขั้นตอนกับฮาร์ดแวร์ทีละบรรทัด และถ้าคุณต้องการดูว่าโปรแกรมทำงานอย่างไร ให้กดกากบาทด้านซ้ายบนแล้วเพลิดเพลินไปกับการกะพริบของไฟ LED

นั่นคือทั้งหมดที่ ไมโครคอนโทรลเลอร์สามารถซื้อได้ในราคาต่ำสุดมากถึง 78 รูเบิลต่อชิ้นในร้าน ChipResistor ถ้าคุณต้องการราคาถูกกว่านี้ก็มีการขายส่งเล็กๆ น้อยๆ ด้วย จาก 35 ชิ้นแล้วราคา 50 รูเบิล
โครงการสำหรับ DipTrace
และแน่นอนว่าเป็นวิดีโอ


แขก 31/12/58 10:35 น

เมื่อเร็วๆ นี้ ฉันต้องการสร้างมิเตอร์ความถี่บน ATMEGA16 บวกกับตัวนับ 8 บิตภายนอกบนลอจิก 74 มันยังเร็วไม่พอ หัวของฉันไม่สามารถจัดการกับการเขียนในแอสเซมเบลอร์ได้ การฟันดาบเคาน์เตอร์ภายนอกด้วย 16 บิตนั้นปวดหัว ลา AVR เป็นศตวรรษที่ผ่านมาไม่ใช่คอนโทรลเลอร์ราคาถูก ฉันจะสนับสนุนผู้เขียน AVR คือ เวทีผ่านไปแล้ว ฉันยังซื้อชิป stm32f100 พร้อมชิปอะแดปเตอร์ USB CP2103 อีกไม่นานทุกคนจะยอมแพ้ AVR

อเล็กซ์ 31/12/58 12:26

ฉันไม่เห็นด้วย. อย่างไรก็ตาม Arduino ยังคงพัฒนาอยู่และหลาย ๆ คนก็ติดใจกับมัน และอย่างหลังก็ใช้งานได้บน AVR การไป STM ก็เหมือนกับการก้าวไปอีกระดับ พูดตั้งแต่อนุบาลถึงโรงเรียน

ไม่ระบุชื่อ 12.02.16 10:44

AVR และ STM32 เป็นโปรเซสเซอร์ที่ไม่ได้แข่งขันกัน จานของคุณไม่มีพารามิเตอร์ที่สำคัญที่สุด - นี่คือปริมาณการใช้ปัจจุบัน!! และมองดูพวกเขาแล้วคุณก็น้ำตาไหลได้ Atmega 328 - – โหมดแอกทีฟ: 0.2 mA – โหมดปิดเครื่อง: 0.1 µA – โหมดประหยัดพลังงาน: 0.75 µA (รวม 32 kHz RTC) STM32F030K6T6 48 MHz - โหมดแอกทีฟ: อุปกรณ์ต่อพ่วงบนอุปกรณ์ต่อพ่วง 23.3 mA ปิด 11.5 mA - โหมดหยุด: 0.048 mA STM32 สิ้นเปลืองไฟฟ้าอย่างไร้ความปราณี หรือพูดประมาณว่ามากกว่า AVR ถึง 100 เท่า คุณไม่สามารถจ่ายไฟให้กับอุปกรณ์ STM32 จากแบตเตอรี่ได้ แต่ AVR จะทำงานได้นานหลายเดือน ดังนั้นจึงเป็นเรื่องยากที่จะยอมแพ้กับ AVR โชคดีนะทุกคน.

อเล็กซ์ 12/02/59 10:54

และไม่มีใครแนะนำว่าเราจะละทิ้ง AVR ฉันแค่แสดงความแตกต่างในบริเวณรอบนอก ฉันยังคงรักษาไลบรารี AVR และยังมี ATMega8A เป็น MCU หลักของฉัน

เซอร์เกย์ 24/02/59 18:02 น

ในความคิดของฉัน การเปรียบเทียบ STM32 ใหม่กับ AVR ที่เลิกใช้แล้วเป็นเรื่องแปลก หากคุณต้องการเปรียบเทียบ STM32 กับคอนโทรลเลอร์ ATMEL ให้เปรียบเทียบกับตระกูล ATSAM แต่ไม่ใช่กับ AVR

อันเดรย์ 02.24.16 18:06

ลูกสมุนคนนี้คือใคร? AVR ยังมีชีวิตอยู่และจะมีชีวิตอยู่ต่อไปใครจะรู้ว่านานแค่ไหน เมื่อดูที่โต๊ะแล้ว ในความคิดของฉัน การเปรียบเทียบนั้นอยู่ที่บริเวณรอบนอกมากกว่า ไม่ใช่บนสถาปัตยกรรม

อเล็กซ์ 02.24.16 19:04

เอาล่ะมันเริ่มต้นแล้ว ตอนนี้เรามาหารือเกี่ยวกับ AMD และ Intel

เซอร์เกย์ 24/02/59 22:02 น

บนฮับ “ผู้เชี่ยวชาญ” คนหนึ่งเขียนว่า AVR ไม่มีบัสแบบขนานสำหรับเชื่อมต่อจอ LCD มาตรฐาน แต่ STM32 มี...

อเล็กซ์ 02.24.16 22:36

LCD มาตรฐานหมายถึงอะไร? เรื่องนี้เกี่ยวกับ FSMC หรือเปล่า? ดังนั้น นี่จึงไม่ใช่แค่สำหรับจอแสดงผลเท่านั้น แต่ยังสำหรับหน่วยความจำด้วย แค่รถเมล์ขนาน.. AVR ก็มีเช่นกันเช่น Mega8515 SRAM สามารถเชื่อมต่อได้ผ่านทางสลักรีจิสเตอร์

25/02/59 06:24 น

Alexey ฉันกำลังพูดถึงอะไรอยู่! ดูเหมือนว่าคุณไม่ได้พยายามที่จะเข้าใจความหมายของข้อความของฉันด้วยซ้ำ

อเล็กซ์ 25/02/59 09:38 น

แล้วการเปรียบเทียบไมโครคอนโทรลเลอร์สองตัวที่เหมือนกันจากบริษัทต่างๆ ล่ะจะมีประโยชน์อะไร? ทั้งคู่อยู่บนแกน ARM หากคุณจู้จี้จุกจิกจริงๆ คุณจะต้องเปรียบเทียบ AVR กับ STM8 จริงๆ จากนั้นฉันก็ติดอยู่กับความใกล้ชิดของขอบ ฟอร์มแฟคเตอร์ และราคา และสถาปัตยกรรมที่แตกต่างกัน

อัดลัน 03.06.16 17:40

สวัสดี ช่วยด้วยใครสามารถ ติดตั้งแล้ว รุ่นล่าสุดคิวบา 4.15, ไลบรารี F1 1.4.0 โปรเจ็กต์ว่างที่สร้างขึ้นใน EWARM ไม่ได้คอมไพล์ - มีข้อผิดพลาดมากกว่าร้อยรายการ มันจะเป็นอะไร? ขอบคุณ [ป้องกันอีเมล]

อเล็กซ์ 06/03/59 20:48

Adlan สิ่งแรกที่คุณต้องทำคืออัปโหลดโปรเจ็กต์ที่จะไม่คอมไพล์

หมอ 18/07/59 21:51 น

"เป็นเรื่องจริงที่ AVR มี Arduino และการเขียนโปรแกรมแบบง่ายๆ" เขาคุยอวดเรื่องอะไรได้? ;D

อเล็กซ์ 19/07/59 11:41

นี่เป็นการเปรียบเทียบที่โง่เขลา ประการแรก STM มีอะนาล็อกของ Arduino ที่เรียกว่านิวคลีโอ โปรแกรมถูกเขียนใน IDE ออนไลน์โดยตรงผ่านเบราว์เซอร์ แต่หากข้อดีของหินโดยส่วนตัวแล้ว ความถี่การทำงานหลักคือ 72 MHz AVR ไม่สามารถฝันถึงความเร็วดังกล่าวได้ แน่นอนถ้าคุณกระพริบไฟ LED ก็ไม่มีความแตกต่าง แต่ถ้าคุณสตาร์ทแกนและอุปกรณ์ต่อพ่วงมากมาย AVR จะระเบิด ความจุบิต 32 อยู่ไกลจาก 8 อุปกรณ์ต่อพ่วงบน STM สามารถมี 3 I2C, 3 SPI, 6 UART, USB, CAN, อีเธอร์เน็ต เกือบทุกอย่างมีความสามารถในการทำการแมปใหม่นั่นคือโอนไปยังขาอื่นของ mk นอกจากนี้ยังมี DMA ซึ่งเป็นโปรเซสเซอร์ร่วมอิสระสำหรับการทำงานกับอุปกรณ์ต่อพ่วง ดังนั้นการขัดจังหวะของ AVR จึงทำให้เกิดอาการกังวลใจข้างสนาม มีฮาร์ดแวร์ SDIO สำหรับ งานเต็มเปี่ยมด้วยการ์ดซีดี ไม่ใช่ ISP ไม้ยันรักแร้ใน AVR โดยทั่วไปยังมีอะไรอีกมากมาย แต่หินที่ใหญ่ที่สุดในสวนของ AVR คือการป้องกันเสียงรบกวน การจะล้ม AVR ด้วยสายเคเบิลที่วิ่งอยู่ใกล้ๆ จากมอเตอร์ไฟฟ้านั้นไม่ใช่เรื่องง่าย แต่จำเป็นต้องลองใช้ STM ดังนั้นฉันไม่แนะนำให้ประชด Arduino

แขก 08/11/59 23:27 น

MICROCHIP ดูดซับ AVR!)))))))))))

อเล็กซ์ 12/08/59 08:35 น

เรามาช้ากับข่าวเหมือนเมื่อห้าปีก่อน

วลาดิมีร์ 17/08/59 22:56 น

อเล็กซี่! ในเดือนมกราคม 2559 Microchip ซื้อ Atmel ในราคา 3.56 พันล้านดอลลาร์ 5 ปีอะไร?

อเล็กซ์ 18/08/59 10:30 น

นี่เป็นการกระทำโดยนิตินัย แต่โดยพฤตินัยมันเกิดขึ้นมาตั้งแต่ปี 2551 เลยทำผิดจริงๆ ไม่ใช่ 5 ปี แต่ 8 ปีที่แล้ว))))

วลาดิมีร์ 18/08/59 23:53

Alexey ฉันเริ่มเปลี่ยนมาใช้ stm32 แล้ว และสำหรับการบริโภคในโหมดอัตโนมัติเขาไม่แนะนำให้โอเวอร์คล็อกทุกอย่าง จากนั้นกระแสการบริโภคจะลดลง

โอเล็ก 09.11.16 22:31

ในเอกสารข้อมูลบน STM ฉันไม่พบกราฟของการใช้นาฬิการะบบ CLK เช่นเดียวกับใน AVR - และตามแผ่นเหล่านั้นที่มีอยู่ STM32 จะสูญเสียทันทีทั้งในโหมดปกติและในโหมดปกติ ใช่และ STM32 นี้ไม่มีนาฬิกา 72 MHz - สูงสุดเพียง 48 เท่านั้นนั่นคือทั้งหมดดังนั้นถึงแม้จะมี 32 บิต 8 beatnik AVR ก็กลับกลายเป็นดีกว่าและอย่างไรก็ตามผู้ผลิตในแผ่นข้อมูลไม่ได้เขียนจำนวน รอบสัญญาณนาฬิกาในวงจรเครื่อง STM32 มี ดังนั้นหากกลายเป็น 2 รอบสัญญาณนาฬิกาเทียบกับ 1 สำหรับ AVR ให้พิจารณาว่า 48/2 = 24 MHz จริง - เกือบจะเหมือนกับ 20 MHz สำหรับ AVR คำถามก็คือ ปาฏิหาริย์ของ STM32 ที่คุณกำลังพูดถึงอยู่ที่ไหน?

ไม่ระบุชื่อ 09.11.16 23:03
อเล็กซ์ 11/10/59 00:23 น

ฉันไม่ต้องการที่จะโต้แย้ง Intel หรือ AMD อันไหนดีกว่ากัน? หรือ Zhiguli หรือ Volga? STM มีฮาร์ดแวร์ USB, CAN, อีเธอร์เน็ต, SDIO และอุปกรณ์ต่อพ่วงอื่นๆ มากมายที่ AVR ทำได้เพียงแค่ฝันถึง ในท้ายที่สุด มี DMA ในฐานะโปรเซสเซอร์ร่วมอิสระที่มีการเข้าถึงหน่วยความจำโดยตรง ซึ่ง AVR ทั้งหมดจะขัดขวางควันที่ข้างสนามอย่างประหม่า ตัวอย่างเช่น ซีรีส์แรกมี 3 UART, 2 SPI, 3 I2C บนบอร์ด มีการแมปพอร์ตใหม่และคุณไม่จำเป็นต้องกังวลเกี่ยวกับวิธีแยกชิ้นส่วนบอร์ด ถ้าคุณชอบทำงานกับ AVR ก็ทำงานใครก็ตามที่รบกวนใจคุณ จนถึงทุกวันนี้ ฉันสร้างเมกะแปดสำหรับโปรเจ็กต์เล็กๆ และไม่บ่น โอ้ ใช่ ติด AVR ไว้ข้างสตาร์ทเตอร์ แล้วดูว่ามันระเบิดหัวจากการรบกวนได้อย่างไร AVR ไม่มีการป้องกัน EMI ดังนั้นจึงมีการติดตั้ง PIK ในสัญญาณเตือนรถเสมอ เนื่องจาก AVR เสียชีวิตในสภาวะดังกล่าว เถียงทำไม มันเป็นเลขตาย

คอร์เน็ต 27.11.16 21:22

อย่างไรก็ตาม STM32 มี Arduino อยู่แล้ว นี่คือ Amperka และ Espruino ทุกประเภทใน JS) ยิ่งไปกว่านั้น หาก Atmel ยึดไมโครชิปไปก็ให้สกรูมัน

อเล็กซ์เซย์ 27.11.16 21:44

ชื่อ Espruino ล้อเลียน Arduino ซึ่งเป็นแพลตฟอร์มงานอดิเรกที่มีชื่อเสียงที่สุดในขณะนั้น แต่ Espruino เข้ากันไม่ได้กับรุ่นคลาสสิก อาร์ดูโน่ อูโน่ทั้งทางกลไกและทางโปรแกรม (อ้างจาก Amperka)
ฉันยังมีบอร์ด Nucleo และมันก็ไม่เกี่ยวอะไรกับ Arduino ยกเว้นรูปทรงเรขาคณิตของบอร์ดเอง)))
โดยทั่วไปแล้วโดยพื้นฐานแล้วฉันใช้ MK ที่เหมาะกับงานปัจจุบัน

อันเดรย์ 20/12/59 22:50

ใครชอบจ่ายเงินมากเกินไป: มันคุ้มค่า attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ timer -1/8bit_ timer -1 =2.1$ vs stm32f103c8t6 64Kb-flash/20Kb-sram/16BIT timer (+ การควบคุมเวลาตายสำหรับ dual -channel โหมด PWM ) -4/ADC-2/72MHz CPU/=2.3$ ในความคิดของฉัน การสร้างอิมพีแดนซ์มิเตอร์สำหรับวงจร RLC โดยใช้ AVR แทบจะเป็นไปไม่ได้เลย หรือมี 10 สโตน แต่คุณทำได้ ด้วย STM และ FFT (DMA ช่วย) ฉันลองทำเครื่องวัดความถี่บน Mega10 (ความแม่นยำ 1 เฮิรตซ์) - มันไม่เร็วพอ (หรือติดตั้งตัวนับ 32 บิตภายนอกพร้อมรีจิสเตอร์กะ - โดยที่ขนาด มาจาก) ฉันเลิกใช้ AVR เมื่อปีที่แล้ว AVR กลายเป็นว่าสำหรับคนมีฐานะ

อันเดรย์ 20/12/59 22:53

ANONYMOUS เขียน -“ และนี่คืออีกคำพูดจากคำอธิบายของ STM32 ในภาษารัสเซีย -“ ... ด้วย
ช่วงเวลา
การรับ
ขัดจังหวะ
ก่อน
เริ่ม
การดำเนินการ
อันดับแรก
ทีม
ตัวจัดการ
ขัดจังหวะ
ถูกใช้ไป
เท่านั้น
สิบสอง
รอบ
นาฬิกา
สัญญาณ"

นี่เป็นเรื่องจริง แต่คูณตัวเลข 32 บิตสองตัวด้วย avr - ชัดเจน 8-10 รอบนาฬิกา!

อเล็กซ์ 20/12/59 23:31

ใช่ ฉันเสียใจแล้วที่ฮาลิวาร์นี้เริ่มต้นขึ้น))))

อเล็กซานเดอร์ 21/12/59 00:27 น

ฉันอ่านความคิดเห็นแล้วจำได้
เด็กสองคนในกล่องทราย
หนึ่งดูก้า!
ประการที่สอง บี๊บ!
ก่อนอื่น ดูดูก้า! (น้ำเสียงน่ากลัวกว่า)
ประการที่สอง บีบิก้า! (พร้อมน้ำเสียงที่แสดงออกมากยิ่งขึ้น)
ดูดูก้าตัวแรก! (กรี๊ดแล้ว)
บิบิก้าที่สอง!!! (แทบจะร้องไห้)
....
ศึกนี้จบแล้วทั้งคู่ยืนร้องไห้เสียงดังกว่าอีกคน)))

วันที่ 02/10/60 01:43 น

ถ้าวนซ้ำโดยไม่ชักช้าจะเป็นความถี่เท่าใด?
ในขณะที่ (1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
}

อเล็กซ์ 10.02.17 10:07

อันบนรถบัส APB

อิกอร์ 06/08/17 22:33 น

เรามารวมแล็ปท็อปเข้ากับระบบฝังตัวกันทันที พวกมันดีกว่า STM หลายร้อยเท่า และมีอุปกรณ์ต่อพ่วงมากมายอยู่ที่นั่น มี Wi-Fi และบลูทูธอยู่แล้ว และแม้แต่โปรแกรมเมอร์ก็ไม่จำเป็น ทันทีที่จอภาพพร้อม แป้นพิมพ์สำหรับเขียนโปรแกรมและรันได้ทันทีโดยไม่จำเป็นต้องใช้โปรแกรมเมอร์และดีบักเกอร์
มันเหมือนกับการซื้อรถขุดเพื่อใช้งานส่วนตัวที่กระท่อมของคุณเพื่อบางครั้งจะขุดหลุมสองสามหลุมลึกครึ่งเมตร
ในความคิดของฉัน การใส่ STM ไว้ในเทอร์โมสตัท นาฬิกา เครื่องชั่ง นี่ไม่ใช่เรื่องปกติ ยังไงก็ตามใช่แล้วเป็นยังไงบ้าง หน่วยความจำไม่ลบเลือนฉันกำลังสร้างเทอร์โมสตัท ตั้งอุณหภูมิ แล้วไฟดับ แล้วไงล่ะ การตั้งค่าก็หายไป แต่ในระบบฝังตัวที่ต้องกำหนดค่าหนึ่งครั้งเพื่อดำเนินการต่อไปจะต้องบันทึกค่าไว้ตลอดไป

อเล็กซ์ 06/09/17 08:25

ตัวอย่างเช่นชิปจุ่ม STM32F030F4P6 มีราคา 48 รูเบิลและ ATtiny2313 อะนาล็อกโดยตรงมีราคา 98 รูเบิล ฉันคิดว่าสิ่งใดสิ่งหนึ่งก็เพียงพอที่จะสร้างเทอร์โมสตัทได้ และการชดเชยหน่วยความจำสำหรับ STM สามารถอยู่ในเซ็นเซอร์อุณหภูมิใดก็ได้ ใช่ อย่างน้อยก็ใน DS18B20 เดียวกัน สำหรับแล็ปท็อป เครื่องรับชำระเงินใดๆ จะมีพีซีติดตั้งระบบปฏิบัติการและจอภาพ ดังนั้นจึงมีระบบดังกล่าวด้วย เมื่อเลือก MK ก่อนอื่นให้เลือกอันที่ถูกกว่า หากนี่เป็นงานอดิเรกคุณสามารถซื้อ Arduino เพื่อไม่ให้ยุ่งยากกับการบัดกรีและเมื่อมีการวางแผนที่จะนำระบบไปผลิตและผลิตเป็นร้อย ๆ เงินทุกสตางค์ก็มีความหมาย และการจ่ายเงินเกิน 50 รูเบิลสำหรับ MK เมื่อราคาอยู่ที่ 48 ถือเป็นความหรูหราที่เอื้อมไม่ถึง

รุสลัน 17/06/17 21:46 น

Alexey ทำไมคุณถึงเลือกสภาพแวดล้อมการเขียนโปรแกรม IAR
มือใหม่จะเลือกสภาพแวดล้อมไหนดีกว่ากัน (เพื่อให้มีคำแนะนำต่างๆ มากมาย เช่น แอตเมล สตูดิโอ)?

อเล็กซ์ 17/06/17 22:07
รุสลัน 17/06/17 22:56
หากฉันไม่ได้ดู “แย่” ก็ให้ลิงก์ที่ฉันสามารถดูหรืออ่านวิธีการทำมาให้ฉันได้!
ยังดีกว่าทำวิดีโอ ฉันคิดว่าผู้เริ่มต้นหลายคน (และไม่เพียงเท่านั้น) จะสนใจดูวิดีโอนี้!
ขอบคุณล่วงหน้า!
อเล็กซ์ 08/05/17 10:19
รุสลัน 22.11.17 12:17

ฉันหมายถึงสิ่งนี้https://www.youtube.com/watch?v=wOIlhRd-vN8
5 - 7 นาที!!!

รุสลัน 22.11.17 12:18

Alexey โปรดบอกวิธีทำงานกับการแจงนับ "enum" ไม่เช่นนั้นจะไม่มีข้อมูลดังกล่าวเลยและในวิดีโอของคุณไม่มี "C for the little people" แต่ฉันต้องการมันจริงๆ!
ตอนที่ฉันเล่นกับ AVR ฉันไม่เคยเห็นปาฏิหาริย์เช่นการแจกแจงมาก่อน แต่ตอนนี้ฉันสนใจ STM และมีเยอะมาก! และไม่มีข้อมูลว่าจะทำงานร่วมกับพวกเขาอย่างไร!
นี่คือตัวอย่างจากโค้ดจริง:


StatusCode MIFARE_Read (ไบต์ blockAddr, ไบต์ * บัฟเฟอร์, ไบต์ * ขนาดบัฟเฟอร์);

การแจงนับ StatusCode อยู่ที่ไหน:


enum StatusCode: ไบต์ (
STATUS_OK , // สำเร็จ
STATUS_ERROR , // เกิดข้อผิดพลาดในการสื่อสาร
STATUS_COLLISION , // ตรวจพบการชนกัน
STATUS_TIMEOUT , // หมดเวลาในการสื่อสาร
STATUS_NO_ROOM , // บัฟเฟอร์ไม่ใหญ่พอ
STATUS_INTERNAL_ERROR , // ข้อผิดพลาดภายในในรหัส ไม่ควรเกิดขึ้น ;-)
STATUS_INVALID , // อาร์กิวเมนต์ไม่ถูกต้อง
STATUS_CRC_WRONG , // CRC_A ไม่ตรงกัน
STATUS_MIFARE_NACK = 0xff // MIFARE PICC ตอบกลับด้วย NAK
};

นี่มาจากไลบรารี Arduino (C ++) แต่ Keil สาบานเลย!
จะเขียนการส่งคืนฟังก์ชันการแจงนับได้อย่างถูกต้องได้อย่างไร?

รุสลัน 22.11.17 12:29 น

และวิธีการประกาศอาร์กิวเมนต์ตัวใดตัวหนึ่งในฟังก์ชันที่เป็นการแจงนับ:


เป็นโมฆะ PCD_WriteRegister (PCD_Register reg, ค่าไบต์);

โดยที่ PCD_Register อยู่ในรายการ:


enum PCD_Register: ไบต์ (
// หน้า 0: คำสั่งและสถานะ
// 0x00 // สงวนไว้สำหรับใช้ในอนาคต
CommandReg = 0x01<< 1, // starts and stops command execution
ComIEnReg = 0x02<< 1, // enable and disable interrupt request control bits
DivIEnReg = 0x03<< 1, // enable and disable interrupt request control bits
ComIrqReg = 0x04<< 1, // interrupt request bits
...
};

และตามที่ฉันเข้าใจ reg เป็นการแจงนับ แต่ไม่มีการประกาศที่ใดก็ได้ในโค้ดและฉันไม่เข้าใจว่ามันมาจากไหน!
ฉันอ่านหน้าเว็บจำนวนมากบนอินเทอร์เน็ตและพบข้อมูลว่าการแจงนับเหล่านี้สามารถแทนที่ด้วยคำจำกัดความได้ แต่ฉันยังต้องการทราบวิธีทำงานกับพวกเขา!!!

รุสลัน 22.11.17 12:35 น

ฉันรอคอยคำตอบของคุณ!
อาจจะทำวิดีโอเกี่ยวกับวิธีการทำงานร่วมกับพวกเขาเพื่อที่คนอื่นจะได้ใช้ ฉันคิดว่าวิดีโอนี้จะมีประโยชน์มากเพราะไม่มีวิดีโอดังกล่าว (อย่างน้อยฉันก็ไม่พบพวกเขา)!

มิทรี 28.11.17 22:02

"การเขียนโปรแกรมอย่างง่าย"

อวัยวะที่น่าสนใจสำหรับตัวควบคุมการเขียนโปรแกรม โดยทั่วไปยังไม่ชัดเจนว่าจะสามารถเปรียบเทียบ 32 บิตกับ 8 บิตได้อย่างไร เหมือน Porsche Cayenne กับ Zarporozhets

อเล็กซ์ 29/11/17 10:24

คุณสามารถเปรียบเทียบได้ คุณต้องคำนึงว่าในการเปรียบเทียบนี้ Porsche มีราคาถูกกว่า Zaporozhets ในส่วนของระบบทางเดินปัสสาวะนั้นมีความน่าสนใจมากกว่า ดังนั้นฉันจะไม่แก้ไขมัน

คอนสแตนติน 23/12/17 00:06

Ruslan ฉันไม่เข้าใจว่าคุณค้นหาอย่างไรและไม่พบอะไรเลย (ดูเหมือนว่าคุณไม่ได้มองหา) นี่เป็นพื้นฐานของภาษา C (ไม่ใช่เฉพาะสำหรับ MK เท่านั้น แต่ยังสำหรับคอมพิวเตอร์ด้วย) อ่านหนังสือของ Kernighan และ Ritchie ซึ่งมีการอธิบายภาษา C ทั้งหมดไว้ที่นั่นอย่างสมบูรณ์แบบ
และจะไม่มีใครตอบคำถามของคุณ นี่เป็นเรื่องเบื้องต้น

ไม่ระบุชื่อ 11.02.18 16:27

เหตุใดคุณจึงเปรียบเทียบ ST MK แบบ 32 บิตกับ Atmel 8 บิต เปรียบเทียบโง่ๆ. เทียบเท่ากับการเปรียบเทียบ Atmel AT91SAM แบบ 32 บิตกับ STM8 8 บิต แม้จะพิจารณาว่า Atmel มีตัวปล่อยประจุที่ทรงพลังกว่า 32 ตัว

อเล็กซ์ 13/02/18 12:18

เนื่องจากในขณะที่เขียนนี้ ST 8 แบนด์ไม่ได้ลดราคา และ mega และ STM32 ก็มีราคาเท่ากัน

STM32_Dev 19/06/62 13:59 น

AVR จะใช้เวลา 4-5 รอบนาฬิกาเพื่อทำสิ่งเดียวกัน!!! แค่. และที่นี่อีกครั้งปรากฎว่า AVR นั้นทำได้ดีกว่า STM32 โดยมีนาฬิกาที่สูงเกินจริง และ STM32 ไม่มี EEPROM อยู่ข้างในเหมือนกับ AVR

นาฬิกา AVR ที่ 16 MHz - 1/16000000 = 0.0000000625 s = 62.5 ns * 5 นาฬิกา = 312.5 ns
นาฬิกา ARM ที่ 48 MHz - 1/48000000 = 0.0000000208 s = 20.8 ns * 12 นาฬิกา = 250 ns

ดูเหมือนว่าพิพิธภัณฑ์ atmega จะนับ 5 รอบนาฬิกาของมันนานกว่า 12 รอบนาฬิกาของ STM32)))

STM32 ไม่มี eprom หรือไม่? แน่นอน? STM32L152 - 8kB eprom! แล้วเอทีเมก้าล่ะ? 512 ไบต์? โอ้โห เยอะมาก!!! ฉันไม่รู้ด้วยซ้ำว่าจะเขียนอะไรที่นั่น ลองคิดว่า... อืม... 16 ตัวแปร ตัวละ 4 ไบต์)) ก็แค่พายุฝนฟ้าคะนองในหมู่คอนโทรลเลอร์))

SIM31 30/06/62 19:29 น

ในแง่ของการบริโภคคุณสามารถเปรียบเทียบได้ atmega และ attiny ใหม่นั้นประหยัดมาก
และทุกอย่างก็มีประโยชน์ของมัน หากคุณต้องการพลังงาน ลองใช้ Raspbery Pi 4 และไม่ต้องกังวล Python มีความเป็นไปได้มากยิ่งขึ้น แม้แต่การตั้งค่าเว็บเซิร์ฟเวอร์ที่มีคุณสมบัติครบถ้วน หรือแม้แต่เรียกใช้ Quake 3D
หากคุณต้องการประมวลผลสตรีมข้อมูล โปรด (ดูโครงการ "Mars Rover" "Mars Rover 2")
ผู้เขียนมีข้อดีมากมาย แต่การที่ Arduina ยังมีชีวิตอยู่มากกว่าสิ่งมีชีวิตทั้งหมดหมายความว่าไม่ใช่ทุกสิ่งจะง่ายนัก


เป็นเวลาหลายปีแล้วที่นักวิทยุสมัครเล่นใช้ไมโครคอนโทรลเลอร์ 8 บิตในตระกูล PIC และ AVR เป็นที่นิยมเนื่องจากมีราคาถูก เอกสารรายละเอียด ความง่ายในการเขียนโปรแกรม และติดตั้งง่าย อย่างไรก็ตามบ่อยครั้งที่มีกรณีที่พลังของไมโครคอนโทรลเลอร์ไม่เพียงพอที่จะแก้ปัญหาได้ ตัวอย่างที่ง่ายที่สุดคือเครื่องวัดความถี่หรือเครื่องกำเนิดสัญญาณบนไมโครคอนโทรลเลอร์ ซึ่งความถี่สูงสุดที่วัดหรือสร้างได้จะขึ้นอยู่กับความเร็วของการประมวลผลหรือเอาต์พุตข้อมูลโดยตรง

นอกเหนือจากความเร็วแล้ว ไมโครคอนโทรลเลอร์ 8 บิตยังมีข้อจำกัดอื่นๆ เช่น AVR หลายรุ่นมีพอร์ตอนุกรมฮาร์ดแวร์เพียงพอร์ตเดียว ซึ่งไม่อนุญาตให้รับข้อมูลจากอุปกรณ์ภายนอกและส่งผลการประมวลผลไปยังผู้บริโภคไปพร้อมๆ กัน ไม่ต้องพูดถึงสิ่งที่ "ซ้ำซาก" เช่น การแสดงข้อมูลบนตัวบ่งชี้กราฟิก ซึ่งต้องใช้ทรัพยากรขนาดใหญ่ทั้งความเร็วและหน่วยความจำ หลังจากวิเคราะห์ข้อ จำกัด ดังกล่าวแล้วผู้เขียนก็เกิดแนวคิดที่จะเปลี่ยนไปใช้ไมโครคอนโทรลเลอร์ในตระกูล STM32

ตัวอย่างเช่น พิจารณาไมโครคอนโทรลเลอร์สองตัวที่มีหมวดหมู่ราคาเดียวกัน - STM32F103C6 และ ATmega328P

ตารางที่ 1

ประเภทไมโครคอนโทรลเลอร์

ขนาดโปรเซสเซอร์

ระยะห่างของตะกั่ว mm

ความถี่สัญญาณนาฬิกา MHz

ปริมาณหน่วยความจำแฟลช เคบี

จำนวน RAM, KB

หมายเลข USART

จำนวนตัวจับเวลา 16 บิต

จำนวนบรรทัด I/O

ราคาโดยประมาณถู

พารามิเตอร์เปรียบเทียบแสดงอยู่ในตาราง 1. ผลการเปรียบเทียบค่อนข้างน่าประหลาดใจด้วยซ้ำ ไมโครคอนโทรลเลอร์แบบ 32 บิตไม่เพียงแต่มีประสิทธิภาพมากกว่าไมโครคอนโทรลเลอร์แบบ 8 บิตในเกือบทุกด้านเท่านั้น แต่ยังมีราคาถูกกว่าอีกด้วย แน่นอนว่าการบัดกรีไมโครคอนโทรลเลอร์ที่มีระยะพิน 0.5 มม. ที่บ้านไม่ใช่เรื่องง่าย โชคดีที่ในกรณีส่วนใหญ่สิ่งนี้ไม่จำเป็น - มีบอร์ดพัฒนาหลายประเภทที่มีไมโครคอนโทรลเลอร์ตระกูล STM32 ในท้องตลาด ซึ่งเพียงพอสำหรับการใช้งานที่หลากหลาย ลองดูรายละเอียดเพิ่มเติม

STM32F4-การค้นพบ

บอร์ดนี้ (แสดงในรูปที่ 1) อาจสะดวกที่สุดสำหรับผู้เริ่มต้นที่ศึกษาไมโครคอนโทรลเลอร์ STM ประการแรกมีอุปกรณ์ต่อพ่วงชุดใหญ่ นอกจากไมโครคอนโทรลเลอร์แล้ว บอร์ดยังมีมาตรวัดความเร่งแบบไมโครไฟฟ้า, ไมโครโฟน, Audio DAC, ขั้วต่อ USB สองตัว, ปุ่มหนึ่งปุ่มและไฟ LED สี่ดวง

หมุดไมโครคอนโทรลเลอร์ถูกนำออกมาบนแผ่นสัมผัสเพื่อติดตั้งขั้วต่อพินที่ขอบซ้ายและขวาของบอร์ด ซึ่งทำให้ง่ายต่อการเชื่อมต่ออุปกรณ์ภายนอกที่จำเป็นทั้งหมดเข้ากับหมุดเหล่านั้น ไมโครคอนโทรลเลอร์ STM32F407VGT6 ที่ติดตั้งบนบอร์ดมีพารามิเตอร์ที่ดีมาก: หน่วยความจำ FLASH 1 MB, RAM 192 KB และความถี่สัญญาณนาฬิกา 168 MHz

ในที่สุด บอร์ดนี้มาพร้อมกับดีบักเกอร์ ST-LINK/V2 ในตัว ซึ่งสามารถใช้ในการดีบักโปรแกรมไม่เพียงแต่บนไมโครคอนโทรลเลอร์บนบอร์ดเท่านั้น แต่ยังรวมถึงไมโครคอนโทรลเลอร์ตระกูลเดียวกันที่อยู่บนบอร์ดอื่นด้วย การสลับไปใช้ทำได้โดยใช้จัมเปอร์แบบถอดได้และขั้วต่อ SWD

ราคาของบอร์ดอยู่ที่ประมาณ 800 รูเบิลซึ่งถือว่าค่อนข้างยอมรับได้

STM32F103RBT6 บอร์ดพัฒนา

ตัวเลือกที่น่าสนใจถัดไปคือบอร์ดพัฒนาที่มีไมโครคอนโทรลเลอร์ STM32F103RBT6 (รูปที่ 2)

มันค่อนข้างอ่อนแอกว่าที่ติดตั้งบนบอร์ดรุ่นก่อนหน้า - ความถี่สัญญาณนาฬิกา 72 MHz, หน่วยความจำ FLASH 128 KB และ RAM 20 KB แต่อุปกรณ์ต่อพ่วงนั้นน่าสนใจมาก มีหน้าจอสัมผัสแบบ TFT ความละเอียด 320x240 พิกเซล เส้นทแยงมุม 2.8", มีพอร์ต USB ในตัวสำหรับแลกเปลี่ยนข้อมูลกับคอมพิวเตอร์, ช่องใส่การ์ดหน่วยความจำ SD, นาฬิกาควอทซ์ 32768 Hz, ช่องสำหรับ แบตเตอรี่นาฬิกาแบบเรียลไทม์และตัวเชื่อมต่อ ST-LINK สำหรับโปรแกรมดีบัก

ราคาของบอร์ดนี้อยู่ที่ประมาณ 800 รูเบิล แต่ควรสังเกตว่าไม่มีดีบักเกอร์ในตัว หากต้องการดาวน์โหลดโปรแกรม คุณต้องซื้อดีบักเกอร์ ST-LINK แยกต่างหาก หรือใช้บอร์ด STM32F4-DISCOVERY ที่กล่าวถึงข้างต้นแทน

เมเปิ้ล มินิ

ความคล้ายคลึงภายนอกของบอร์ดนี้ (รูปที่ 3) กับโมดูล Arduino ที่รู้จักกันดีนั้นน่าทึ่ง และนี่ไม่ใช่เรื่องบังเอิญ

บอร์ด Maple Mini ได้รับการออกแบบมาทดแทน Arduino Nano ภาษาการเขียนโปรแกรมและสภาพแวดล้อมการพัฒนาสำหรับไมโครคอนโทรลเลอร์ตระกูล AVR ที่ติดตั้งใน Arduino ได้รับการปรับให้เข้ากับตระกูล STM แล้ว ไปที่ http://leaflabs.com/docs/maple-q uickstart.html เพื่อดูข้อมูลโดยละเอียดเกี่ยวกับภาษาการเขียนโปรแกรม Maple IDE และสภาพแวดล้อมในการพัฒนา

บอร์ดพัฒนามีไมโครคอนโทรลเลอร์ STM32F103CBT6 ทำงานที่ความเร็ว 72 MHz, หน่วยความจำ FLASH 128 KB และ RAM 20 KB ซึ่งมากกว่าโมดูล Arduino ใดๆ อย่างไม่ต้องสงสัย และยังมีข้อดีอีกมากที่สภาพแวดล้อมการพัฒนายังคงไม่เปลี่ยนแปลงเลย

เราสังเกตว่าแม้จะมีขนาดที่เล็ก แต่ Maple Mini ก็มีอุปกรณ์ต่อพ่วงที่หลากหลายมาก: 34 I/O lines, 2 SPI และ 2 I2C interface channel, 3 พอร์ตอนุกรม ทำให้สามารถนำไปใช้ในการพัฒนามือสมัครเล่นต่างๆ ได้สำเร็จ ด้วยขนาดที่เล็ก ทำให้ Maple Mini สามารถติดตั้งเข้ากับอุปกรณ์ที่กำลังพัฒนาได้โดยตรง

สามารถซื้อบอร์ด Maple Mini ดั้งเดิมได้ในราคา 35 ดอลลาร์บนเว็บไซต์ของผู้พัฒนา ค่าจัดส่งจะมีค่าใช้จ่ายอีก $5 สำเนาบอร์ดที่ผลิตในจีนจะมีราคาเพียงครึ่งเดียว

ซอฟต์แวร์

มีหลายตัวเลือกสำหรับสภาพแวดล้อมการพัฒนาที่สามารถใช้เพื่อเตรียมโปรแกรมสำหรับไมโครคอนโทรลเลอร์ในตระกูล STM32:

Commercial IAR Embedded Workbench, AtollicTrueSTUDIO, Keil ฯลฯ ผลิตภัณฑ์ที่มีคุณสมบัติครบถ้วนเหล่านี้มีราคาค่อนข้างแพงโดยมีราคาลิขสิทธิ์เริ่มต้นที่ 1,000 ยูโร แต่ยังมีเวอร์ชันสาธิตฟรีโดยมีข้อ จำกัด เกี่ยวกับปริมาณของโปรแกรมที่กำลังพัฒนา สำหรับส่วนใหญ่ โครงการง่าย ๆ ก็เพียงพอแล้ว

Eclipse ฟรีที่มีคอมไพเลอร์ ARM-GCC ต้องการการกำหนดค่าคอมไพเลอร์ที่ไม่สำคัญก่อนใช้งาน ข้อดีประการเดียวสำหรับวันนี้คือความสามารถในการทำงานไม่เพียง แต่ใน Windows เท่านั้น แต่ยังรวมถึงใน Linux ด้วย

ฟรี CooCox IDE (CoIDE) โดยใช้โปรแกรมแก้ไข Eclipse เดียวกัน โหลดและแก้ไขโปรแกรมผ่าน ST-LINK ไม่เหมือนกับตัวเลือกก่อนหน้านี้ CoIDE ไม่ต้องการการตั้งค่าพิเศษใดๆ และทำงานได้ทันทีหลังการติดตั้ง ตัวเลือกนี้สะดวกที่สุดและคุ้มค่าที่จะใช้

ลองใช้ CooCox IDE เพื่อสร้างโปรแกรมตัวอย่างสำหรับบอร์ด STM32F4-DISCOVERY ที่ใช้การกะพริบ LED แบบคลาสสิกของโปรแกรมแรกสำหรับไมโครคอนโทรลเลอร์ บนบอร์ด STM32F4-DIS-COVERY มีไฟ LED สี่ดวงซึ่งเชื่อมต่อกับพิน PD12-PD15 ของไมโครคอนโทรลเลอร์ ให้กระพริบสลับกัน

ขั้นตอนที่ 1 เรียกใช้สภาพแวดล้อมการพัฒนา CoIDE และสร้างโปรเจ็กต์ จากรายการแบบเลื่อนลงที่แสดงในรูป 4 เลือกไมโครคอนโทรลเลอร์ STM32F407VG

ขั้นตอนที่ 2 ดังแสดงในรูป 5 เลือกส่วนประกอบที่จะใช้ในโครงการ หลักคือ GPIO (อินพุต-เอาท์พุต), C Library (ฟังก์ชันพื้นฐานของภาษา C) และ M4 Core (ฟังก์ชันหลักของโปรเซสเซอร์) เมื่อคุณเปิดใช้งานส่วนประกอบ CoIDE จะคัดลอกไฟล์ที่จำเป็นไปยังโฟลเดอร์โปรเจ็กต์โดยอัตโนมัติซึ่งสะดวกมาก

ขั้นตอนที่ 3 การป้อนข้อความโปรแกรม มันค่อนข้างสั้นและมีระบุไว้ในตาราง 2.

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

หลังจากป้อนข้อความโปรแกรมโดยคลิกที่ปุ่มหน้าจอ "ดาวน์โหลดไปยังแฟลช" ข้อความจะถูกดาวน์โหลดไปยังไมโครคอนโทรลเลอร์ ไฟ LED บนบอร์ดเริ่มกะพริบ แยกเป็นมูลค่า noting ความสามารถในการดีบัก - สามารถตั้งค่าเบรกพอยต์ได้ทุกที่ในโปรแกรมคุณสามารถรันโปรแกรมทีละขั้นตอนโดยดูค่าของตัวแปร

แน่นอนว่าตัวอย่างนี้ไม่เหมาะ ตัวอย่างเช่น คุณสามารถใช้การขัดจังหวะตัวจับเวลาเพื่อควบคุมการกะพริบของ LED ซึ่งจะทำให้ลูปโปรแกรมหลักว่างสำหรับงานอื่นๆ ผู้ที่ต้องการสามารถเข้าใจสิ่งนี้ได้ด้วยตนเอง

บทสรุป

โดยทั่วไปหลังจากรู้จักกันครั้งแรกไมโครคอนโทรลเลอร์ของตระกูล STM32 ก็ทิ้งความประทับใจไว้อย่างมาก ทุกอย่างดูไม่ซับซ้อนนักและความสะดวกสบายของสภาพแวดล้อมการพัฒนากระบวนการแก้ไขข้อบกพร่องและฟังก์ชันมาตรฐานจำนวนมากยังทำให้นึกถึงการเปลี่ยนจาก Ms DOS เป็น Windows บ้าง - ประเด็นทั่วไปดูเหมือนจะเหมือนกัน แต่ทุกอย่างเป็น สะดวกและใช้งานได้มากขึ้น

แต่ข้อเสียเปรียบหลักของตระกูลนี้สำหรับการพัฒนามือสมัครเล่นยังคงเป็นพินพินที่เล็กเกินไป การออกแบบและบัดกรีบอร์ดที่มีระยะพิน 0.5 มม. ที่บ้านถือเป็นงานที่ไม่สำคัญมาก แต่ในราคาปัจจุบัน บอร์ดแก้จุดบกพร่องที่มีไมโครคอนโทรลเลอร์ที่ติดตั้งไว้แล้วนั้นค่อนข้างสามารถเข้าถึงได้สำหรับนักวิทยุสมัครเล่นทุกคน

มันคุ้มค่าที่จะแปลงทุกอย่างเป็น STM และสถาปัตยกรรม 32 บิตหรือไม่ ไม่แน่นอน มีงานที่ ATtiny ค่อนข้างเพียงพอ แต่ตัวอย่างเช่นในการวิเคราะห์สเปกตรัมในเครื่องรับ SDR แบบโฮมเมดหรือรับและส่งข้อมูลจำนวนมากผ่านเครือข่ายการใช้ไมโครคอนโทรลเลอร์ที่ทรงพลังทันทีจะมีประสิทธิภาพมากกว่ามากเพื่อไม่ให้หน่วยความจำหรือประสิทธิภาพขาดเมื่อ การปรับปรุงอุปกรณ์

จากแกน Cortex พวกเขาเริ่มได้รับความนิยมอย่างมากในหมู่นักพัฒนาอุปกรณ์บนไมโครคอนโทรลเลอร์ทั้งมืออาชีพและมือใหม่ มีหลายสาเหตุนี้:
- ราคาต่ำเมื่อเทียบกับคู่แข่ง
- อินเทอร์เฟซในตัวจำนวนมาก
- ความง่ายในการเขียนโปรแกรมและความน่าเชื่อถือสูง
แต่ก็มีข้อเสียเปรียบที่สำคัญอย่างหนึ่งเช่นกัน - ไมโครคอนโทรลเลอร์ STM ทั้งหมดไม่ได้ผลิตในแพ็คเกจ DIP ซึ่งมักจะทำให้ผู้เริ่มต้นกลัวเพราะการสร้างบอร์ดที่มีแทร็กน้อยกว่า 0.3 มม. ที่บ้านเป็นปัญหา สถานการณ์นี้นำไปสู่การปรากฏตัวในตลาดของบอร์ดดีบักจำนวนมากทั้งจาก ST Microelectronics (Discovery) และบอร์ดที่ผลิตโดย บริษัท บุคคลที่สาม (Olimex, Pinboard) ฉันเลือก Discovery ด้วยเหตุผลสามประการ:
- ราคาค่อนข้างต่ำ (สามารถซื้อบอร์ดได้จาก 300 รูเบิล)
- ฝีมือดี (แม้ว่าจะมีข้อตำหนิบ้างเกี่ยวกับการเดินสายไฟ แต่ก็ไม่ได้สำคัญนัก)
- มีการโพสต์แหล่งที่มาและตัวอย่างมากมายบนเว็บไซต์ของผู้ผลิต
- มีโปรแกรมเมอร์ในตัว (คุณไม่จำเป็นต้องซื้อแยกต่างหาก)
จุดประสงค์ของบทเรียนแรกคือการช่วยให้นักพัฒนามือใหม่เลือกบอร์ดดีบั๊กและในอนาคต - เพื่อสอนพื้นฐานของการเขียนโปรแกรม
งั้นไปกัน.

STM32F0การค้นพบ

บอร์ดนี้เปิดตัวในเดือนกุมภาพันธ์ 2012 เพื่อดึงดูดนักพัฒนาที่เคยใช้ไมโครคอนโทรลเลอร์ 8 บิตมาก่อน จึงเข้ามาเติมเต็มกลุ่มเฉพาะนี้ ฉันไม่สามารถพูดอะไรที่ไม่ดีหรือดีเกี่ยวกับเธอได้ กระดานธรรมดาราคาไม่แพงเหมาะอย่างยิ่งสำหรับการเริ่มต้น มีลักษณะดังต่อไปนี้:
- ไมโครคอนโทรลเลอร์: STM32F051R8T6 (Cortex M0, 48 MHz, แฟลช 64 KB, RAM 8 KB);
- ST-link/V2 ในตัว ซึ่งสามารถใช้แยกจากบอร์ดได้
- ขับเคลื่อนจาก USB หรือจากแหล่งจ่าย 3/5V ภายนอก
- ไฟ LED 4 ดวงและ 2 ปุ่ม;
- อินเทอร์เฟซ: USART, SPI, I2C, HDMI;
- ตัวจับเวลา 16 และ 32 บิต;
- เอาต์พุตทั้งหมดถูกส่งไปยังหวีแถวเดียวสองอัน
จริงๆแล้วบอร์ดดังกล่าวค่อนข้างล้าสมัยไปแล้วและขอแนะนำให้ใช้เฉพาะช่วงเริ่มต้นของการฝึกอบรมเท่านั้น

STM32VLDISCOVERY

มันแตกต่างจากบอร์ดก่อนหน้าเฉพาะในโปรเซสเซอร์ STM32F100RBT6B (Cortex M3, 24 MHz, แฟลช 128 KB, RAM 8 KB) และโครงร่างของหวีอุปกรณ์ต่อพ่วง เช่นเดียวกับที่กล่าวไว้ข้างต้น เหมาะสำหรับนักพัฒนามือใหม่ ไม่มีอะไรจะพูดเกี่ยวกับเธออีกต่อไป

STM32LDISCOVERY

STM32LDISCOVERY เป็นวิวัฒนาการที่คุ้มค่าของบอร์ดรุ่นก่อน นี่คือสิ่งที่น่าสนใจเกี่ยวกับเรื่องนี้:
- ไมโครคอนโทรลเลอร์ STM32L152RBT6 (Cortex M3, 32 MHz, แฟลช 128Kb, RAM 8Kb, EEPROM 4Kb)
- อินเทอร์เฟซ: USB, USART, SPI, I2C;
- 8 ตัวจับเวลา;
- ADC 12 บิต 24 ช่อง;
-DAC 12 บิต;
- นาฬิกาเรียลไทม์
- คอนโทรลเลอร์ LCD 8x40
- ST-link/V2 ในตัว
สิ่งต่อไปนี้ได้รับการติดตั้งบนบอร์ด:
- จอ LCD 24x8;
- ไฟ LED 4 ดวง;
- 2 ปุ่ม;
- แป้นพิมพ์สัมผัส;
- หวีแถวเดี่ยว 2 อันพร้อมสายฟรี
ฉันอยากจะพูดแยกกันเกี่ยวกับ USB: คอนโทรลเลอร์รองรับ USB 2.0 ความเร็วเต็มโหมดโฮสต์และอุปกรณ์ซึ่งไม่ค่อยเห็นใน MK ของคลาสนี้
ในความเป็นจริงบอร์ดเป็นตัวเลือกที่ดีที่สุดสำหรับการทำงานกับคอร์ Cortex-M3 ดังนั้นคุณจึงสามารถนำไปใช้ได้อย่างปลอดภัยเนื่องจากราคาต่ำ

STM32F3การค้นพบ

STM32F3DISCOVERY เป็นบอร์ดพัฒนารุ่นต่อไปจาก STM และมีคุณสมบัติดังต่อไปนี้:
- ไมโครคอนโทรลเลอร์ STM32F303VCT6 (Cortex M4, 72 MHz, แฟลช 256 KB, RAM 48 KB)
- นาฬิกาเรียลไทม์
- ST-link/V2 ในตัว;
- 13 ตัวจับเวลา;
- คอนโทรลเลอร์ DMA 12 ช่อง;
- 4 ADC;
- แอมพลิฟายเออร์ปฏิบัติการ 4 ตัว
- อินเทอร์เฟซ: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 เส้น GPIO

- พอร์ต USB แบบกำหนดเอง
- มาตรความเร่ง 3 แกนและเซ็นเซอร์ภูมิศาสตร์แม่เหล็ก 3 แกนในตัวเครื่องเดียว
- ไจโรสโคป 3 แกน;
- ไฟ LED 10 ดวง;
- 2 ปุ่ม;
- หวีสองแถว 2 อัน
บอร์ดที่น่าสนใจมาก มีโอกาสทดลองมากมาย โดยทั่วไปความคิดเห็นเกี่ยวกับเรื่องนี้ยังคงดีอยู่ แต่การมุ่งเน้นไปที่การติดตามสถานะทางกายภาพและตำแหน่งจะช่วยลดขอบเขตของการทดลองได้อย่างมากแม้ว่าคุณจะสร้างบอร์ดขยายด้วยตัวเองได้อย่างง่ายดายก็ตาม

STM32F4DISCOVERY

ฉันมีโอกาสได้ร่วมงานกับบอร์ดนี้มากที่สุด และฉันชอบมันมากกว่าบอร์ดอื่นๆ - การมุ่งเน้นที่ครอบคลุมของมันส่งผลต่อบอร์ดนี้
นี่คือสิ่งที่:
- ไมโครคอนโทรลเลอร์ STM32F407VGT6 (Cortex M4, 168 MHz, แฟลช 1 MB, RAM 192 KB)
- ST-link/V2 ในตัว;
- ตัวจับเวลา;
- ตัวควบคุม DMA;
- เอดีซี/DAC;
- อินเทอร์เฟซ: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
บอร์ดประกอบด้วยอุปกรณ์ต่อพ่วงดังต่อไปนี้:
- พอร์ต USB แบบกำหนดเอง
- มาตรความเร่งแบบ 3 แกน;
- ไฟ LED 8 ดวง;
- 2 ปุ่ม;
- หวีสองแถว 2 อัน
- เสียง DAC พร้อมแอมพลิฟายเออร์คลาส D;
- ไมโครโฟนดิจิตอลรอบทิศทาง

ตามที่ฉันเขียนไว้ข้างต้นบอร์ดนี้กลายเป็นบอร์ดหลักสำหรับฉันฉันพอใจกับความสามารถในการทำงานกับเสียงและมาตรความเร่ง

บทเรียนเพิ่มเติมจะขึ้นอยู่กับกระดานนี้

สรุป.
หากคุณตัดสินใจที่จะเริ่มทำงานกับบอร์ดดีบั๊ก STM ฉันแนะนำให้คุณใช้ STM32F4DISCOVERY ในความคิดของฉัน มันมีฟังก์ชันการทำงานที่ยิ่งใหญ่ที่สุด บทความเพิ่มเติมจะขึ้นอยู่กับการทำงานโดยเฉพาะ บทความจะเขียนในหัวข้อต่อไปนี้ในอนาคตอันใกล้นี้:
- ทำงานร่วมกับ GPIO, ตัวจับเวลา, การขัดจังหวะ ฯลฯ
- การทำงานร่วมกับอินเทอร์เฟซ UART, SPI, I2C และ 1 สายโดยใช้ตัวอย่างอุปกรณ์จริง เช่น จอแสดงผล โมดูล GPS และ GSM เซ็นเซอร์อุณหภูมิ การสื่อสารกับคอมพิวเตอร์ผ่าน RS-232 และอื่นๆ อีกมากมาย
เป้าหมายสุดท้ายของวงจรนี้คือการสร้างบอร์ดขยายสำหรับ STM32F4 เฟิร์มแวร์และแผนภาพวงจรทั้งหมดจะเปิดเผยต่อสาธารณะ