คำแนะนำสำหรับการตั้งค่าเริ่มต้นสำหรับพินที่ไม่ได้ใช้บน STM32 (ARM Cortex M3) - ดึงขึ้น / ดึงลง?


15

ขณะนี้เรากำลังใช้ตระกูลไมโครคอนโทรลเลอร์ตระกูล STM32 หลากหลายรุ่น ฉันต้องการทราบสิ่งต่อไปนี้:

  1. การตั้งค่าเริ่มต้นที่แนะนำสำหรับพินของไมโครคอนโทรลเลอร์โดยทั่วไปคืออะไรหากคุณมีตัวเลือกในการเลือกทั้งแบบดึงขึ้นหรือลง อะไรคือข้อดีข้อเสียของการไปกับอีกคนหนึ่ง? (สมมติว่าคุณจะตั้งค่าตามค่าเริ่มต้นเป็นอินพุต)

  2. โดยเฉพาะอย่างยิ่งฉันต้องการทราบว่าจะทำอย่างไรกับพินที่ไม่ได้ใช้สำหรับตระกูลไมโครคอนโทรลเลอร์ STM32 เป็นที่ชัดเจนสำหรับฉันว่าเราไม่ควรปล่อยหมุดที่ลอยอยู่ (ซึ่งเป็นข้อมูลทั้งหมดที่แผ่นข้อมูลบอกว่า :() แต่ฉันควรตั้งให้พวกมันป้อนด้วย pull-ups หรืออินพุทที่มี pull down หรือไม่โดยเฉพาะฉันต้องการ เพื่อเลือกการตั้งค่าที่ไวต่อ ESD น้อยที่สุดและหากเป็นไปได้ให้ใช้พลังงานในปริมาณน้อยที่สุด

  3. สำหรับพินที่สำคัญเราควรพึ่งพาเฟิร์มแวร์ในการตั้งค่าพินให้ถูกต้องเป็นสถานะเริ่มต้นที่ถูกต้องหรือความรับผิดชอบนี้ควรอยู่กับฮาร์ดแวร์ภายนอก (การเชื่อมต่อ pull ups ภายนอกหรือดึงลง) หากค่าที่เลือกสำหรับตัวต้านทานภายนอกมีค่ามากกว่าการดึงขึ้นภายในหรือการดึงลงการตั้งค่าในเฟิร์มแวร์ไม่สำคัญ

มืออาชีพที่ฉันเห็นในการทำข้างต้นคือถ้าไมโครไม่เริ่มต้นอย่างถูกต้องไม่ว่าด้วยเหตุผลใด (ฮาร์ดแวร์ผิดพลาดหรือสิ่งที่ชอบ) เราไม่พึ่งพาเฟิร์มแวร์ในการตั้งค่าพินอย่างถูกต้อง

ข้อเสียที่ฉันเห็นคือมันมีค่าใช้จ่ายมากกว่าในการทำเช่นนี้คือฮาร์ดแวร์

แสงใด ๆ ที่คุณสามารถหลั่งบนด้านบนจะได้รับการชื่นชมจริงๆ

ขอบคุณ ..


ทำไมไม่ตั้งพินที่ไม่ได้ใช้เป็นเอาต์พุต นั่นจะช่วยลดปัญหาการดึงลงและการดึงลง
Connor Wolf

หมายเหตุ: "เมื่อเกิดเหตุการณ์รีเซ็ต GPIO ทั้งหมดเป็นอินพุตแบบลอยซึ่งจะป้องกันความเสียหายที่ไม่ได้ตั้งใจกับ GPIOs ในกรณีฉุกเฉิน" embedded-lab.com/blog/stm32-gpio-ports-insights
cp.engr

คำตอบ:


11

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

มันเป็นกำลังใจที่จะเห็นคนที่ถามคำถามง่าย ๆ แต่พื้นฐานและแสดงความตระหนักว่า "สิ่งเล็กน้อย" ดังกล่าวสามารถ 'แก๊ง aglae' ในชีวิตจริงได้อย่างไร

เช่น "ถ้าไมโครไม่เริ่มต้นอย่างถูกต้อง ... " อ่านจริงๆ "... เมื่อไมโครไม่เริ่มต้นอย่างถูกต้อง ... " :-) - และเห็นได้ชัดว่าคุณตระหนักถึงเรื่องนี้

ดังนั้น:

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

  • การดึงขึ้นหรือลงดูเหมือนว่าจะไม่ได้ผลลัพธ์ที่ดีกว่า มันอาจแตกต่างกันระหว่าง IC แต่สามารถกำหนดได้จากแผ่นข้อมูล ทุกสิ่งเท่ากัน (เท่าที่ควร) ฉันชอบที่จะดึงลงเพราะมีแนวโน้มที่จะลดการรั่วไหลของกระแสไฟฟ้าไปยังอุปกรณ์ภายนอกวงจร - แต่มันมีแนวโน้มที่จะน้อยที่สุดใน PCB ที่เคลือบตามมาตรฐานและ / หรือสภาพแวดล้อมที่อ่อนโยน

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

  • ความไวต่อ ESD จะเป็นอุปกรณ์ที่เฉพาะเจาะจงมีความสมมาตรค่อนข้างมากและโดยทั่วไปแล้วโปรเซสเซอร์หลาย ๆ ตัวอาจจะดึงลงมาเนื่องจากไดรเวอร์มีแนวโน้มที่จะจมได้ดีกว่าแหล่งที่มาถ้าไม่สมมาตร หากคุณสนใจเกี่ยวกับ ESD มากคุณอาจต้องการใช้เอาต์พุตที่มีการดึงลงเนื่องจากเส้นทางความต้านทานต่ำจะช่วยป้องกัน ESD ได้ดีขึ้น แต่ถ้าคุณสนใจ ESD เป็นอย่างมากคุณจะต้องออกแบบมันในรูปแบบอื่นและไม่ต้องพึ่งพาการป้องกันแบบ in-IC เป็นหลักในการป้องกันของคุณ

  • Re คำถาม 3 - pullxxxs ภายนอกเป็นที่พึงปรารถนา แต่ดูเหมือนว่าปลอดภัยที่จะใช้ค่าซึ่งอยู่ในระดับสูงสุดของการออกแบบที่เหมาะสมและจากนั้นใช้ xxx ของภายในแบบขนานหากต้องการ อย่างไรก็ตามเนื่องจากการดึง xxxs ภายในมักจะมี 2: 1 Reffective คุณสามารถรับ R ที่ใหญ่ที่สุดและกระแสที่เล็กที่สุดโดยใช้ภายนอกเท่านั้น สิ่งที่คุณต้องการหลีกเลี่ยงคือการดึงขึ้นจากภายนอกและดึงลงภายในหรือรองเบอซา - แต่นั่นไม่น่าเป็นปัญหา

  • เมื่อฉันพูดว่า "... การ จำกัด การออกแบบที่เหมาะสมระดับสูง ... " ฉันหมายถึงแค่นั้นและไม่ใช่ "ผ่านการ จำกัด ... " เช่นพินจะมีค่าความต้านทานตามที่ระบุซึ่งอนุญาตให้ตรงกับข้อมูลจำเพาะ Vin กรณีที่เลวร้ายที่สุด ตัวต้านทานขนาดใหญ่อาจใช้กระแสไฟฟ้าน้อยลงในตัวต้านทาน แต่อาจเริ่มเปิดสวิตช์ภายในเล็กน้อย นั่นคือมันอาจเป็นไปได้ว่ามี Rpulldown_current เทียบกับการแลกเปลี่ยนกระแสรวมที่ต่ำที่สุดเมื่อผู้ขับขี่ภายในเริ่มเห็นกระแสรั่วไหล (ซึ่งจะเล็กมาก) เพิ่มกระแสให้กับ dirver และกระซิบเล็กน้อย

  • ถ้าคุณใช้เช่น pulldown คุณอาจพบว่ามันใช้พลังงานต่ำกว่าในการตั้งค่าพินเป็นเอาท์พุทและขับต่ำ แต่นี่เป็นตัวเลือกที่สามารถตัดสินใจได้ในเวลาอันใกล้

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


1
คำตอบที่ลึกซึ้งมาก ขอบคุณมาก. คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้ได้เล็กน้อย - "ถ้าคุณสนใจ ESD มากคุณอาจต้องการใช้เอาต์พุตแบบดึงลง - เนื่องจากเส้นทางความต้านทานต่ำจะให้การป้องกัน ESD ที่ดีกว่า" หากตั้งค่าเป็นเอาต์พุต - คุณจะไปเปิดท่อระบายน้ำหรือดันดึง (สูง / ต่ำ) เป็นค่าเริ่มต้นหรือไม่
IntelliChick

@IntelliChick จุดทั้งหมดของการตั้งค่าคือการส่งออกคือการขับรถไปยังสถานะที่รู้จักในระดับความต้านทานต่ำซึ่งหมายความว่าคุณจะไม่ได้ตั้งค่าให้เปิดท่อระบายน้ำโดยเฉพาะอย่างยิ่งท่อระบายน้ำเปิดโดยเฉพาะอย่างยิ่งท่อระบายน้ำเปิด
DKNguyen

@DKNguyen 8 ปีขึ้นไป ... :-) และ Intellichick ไม่เคยเห็นมานานกว่า 8 ปีแล้ว - แต่ก็ยังคุ้มที่จะเพิ่มความคิดเห็นของคุณ
รัสเซลแม็คมาฮอน

@RussellMcMahon ปลดปล่อยตัวเองจากคุกนั่นคือการรับรู้ตามกาลเวลา
DKNguyen

@DKNguyen ฉันสร้างปีศาจด้วยโฟตอนมานานแล้ว เราอยู่ในนิรันดร์ในตอนนี้ อย่างไรก็ตามฉันก็ยังไม่สามารถจัดการเพื่อให้บรรลุสิ่งที่พวกเขาทำ โฟตอนทั้งหมดอาศัยอยู่ในความสามัคคี "ไร้ที่ติ" ที่ไร้กาลเวลา โฟตอนที่ออกจากโซลและโฟตอนที่ทำให้อัลฟาเซ็นทอรีพร็อกซิมาอยู่ด้วยกันตลอดเวลาไม่เคยรู้ความหมายของการมาถึงครั้งแรกหรือครั้งสุดท้ายหรือครั้งสุดท้าย เมื่อฉันถามพวกเขาถึงวิธีการบรรลุเป้าหมายที่พวกเขาเพียงแค่ยิ้ม || ผู้คนจำนวนมากแสดงความคิดเห็นต่อโพสต์ของฉันหลายปีหลังจากโพสต์ หรือแก้ไขได้ ของคุณเช่นกันไม่ต้องสงสัยเลย
รัสเซลแม็คมาฮอน

2

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

ฉันเคยตรวจสอบการคำนวณความน่าเชื่อถือของบอร์ดโปรเซสเซอร์ มันได้รับการออกแบบมาอย่างดีพร้อมตัวยึด decoupling ครอบคลุมทั่วทุกสถานที่และตัวต้านทานแบบดึงตามต้องการบนหมุด I / O ทั้งหมด วิศวกรความน่าเชื่อถือหยิบคู่มือของเขาออกมาเพิ่มอัตราความล้มเหลวของส่วนประกอบทั้งหมดที่เกี่ยวข้องและจบลงด้วยตัวเลขที่ถูกครอบงำโดยอัตราความล้มเหลวของส่วนประกอบแบบพาสซีฟ ตัวเลขนั้นสูงกว่าข้อกำหนดดังนั้นเราจึงมีปัญหา นำตัวต้านทานเหล่านั้นออกแล้วตัวเลขก็จะตกลง แต่ข้อเสนอดังกล่าววิศวกรไฟฟ้าเริ่มตะโกนด้วยความโกรธ (ถูกต้องเช่นนั้น IMO) ฉันจำไม่ได้ว่าเรื่องราวจบลงอย่างไร ฉันคิดว่าเราไปที่ลูกค้าและขอให้มีการยกเว้นอัตราความล้มเหลวของตัวต้านทานจากการคำนวณเนื่องจากพวกเขาไม่มีกระแสไฟฟ้าที่มีนัยสำคัญ


1

ฉันเพิ่งกำหนดค่าพินที่ไม่ได้ใช้เป็นเอาต์พุตและตั้งให้ต่ำ


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

@ Leon Heller - ที่ตรงกับการทดสอบ "works มักจะ" แต่ล้มเหลว "เมื่อ micrprocessor ไม่เริ่มต้นที่เหมาะสมหรือเมื่อ Murphy พลิกบิตแบบกึ่งสุ่มตามที่เขาทำบางครั้ง 'pin ของคุณถูกตั้งค่าเอาท์พุท & set ต่ำ' pulldown ทำงานได้ดี
รัสเซลแม็คมาฮอน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.