ตรวจหาสวิตช์ชั่วขณะที่ทำให้ซีพียู STM32 ตื่นขึ้นมา


10

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


ฉันมี stm32f105 ที่มีสองปุ่มชั่วขณะเชื่อมต่อกับอินพุตปลุก ตัวประมวลผลถูกวางใน STANDBY MODE เมื่อกดปุ่มใดปุ่มหนึ่งหรือตัวจับเวลา RTC เริ่มทำงาน cpu จะกลับมาทำงานอีกครั้ง

ปัญหาคือฉันต้องการให้ซีพียูทำสิ่งต่าง ๆ โดยขึ้นอยู่กับการกระตุ้นการทำงานของอินพุต ตาม5.3.5จากคู่มืออ้างอิง ST stm32f105xx จะไม่มีการบันทึกการลงทะเบียนยกเว้นการลงทะเบียนสถานะที่ระบุว่าเราได้ถูกปลุก (แต่ไม่ใช่โดยใคร) และการลงทะเบียนสำรอง 42 รายการ

โหมดสแตนด์บายอนุญาตให้ใช้พลังงานต่ำที่สุด มันขึ้นอยู่กับโหมด Cortex ® -M3 deepsleep เมื่อปิดการทำงานของตัวควบคุมแรงดันไฟฟ้า ดังนั้นโดเมน 1.8 V จึงถูกปิดการทำงาน PLL, HSI oscillator และ HSE oscillator ก็ถูกปิดเช่นกัน SRAM และเนื้อหาการลงทะเบียนสูญหายไปยกเว้นการลงทะเบียนในโดเมนสำรองและวงจรสแตนด์บาย

หลังจากตื่นขึ้นจากโหมดสแตนด์บายการดำเนินการของโปรแกรมจะเริ่มต้นใหม่ในลักษณะเดียวกับหลังการรีเซ็ต สถานะสถานะ SBF ในการควบคุมพลังงาน / การลงทะเบียนสถานะ (PWR_CSR) ระบุว่า MCU อยู่ในโหมดสแตนด์บาย

โพสต์ฟอรั่ม ST นี้, วิธีการตรวจสอบที่มาของ Wakeup จาก Standby? แสดงให้เห็นว่าฉันไม่สามารถตรวจพบว่ามีการเรียกใช้การปลุกในซอฟต์แวร์ใด ฉันไม่พบโพสต์อื่นที่นั่นซึ่งให้ความกระจ่างมากขึ้น

ฉันจะใช้ซอฟต์แวร์หรือฮาร์ดแวร์ในการพิจารณาหลังจากตื่นขึ้นมาได้ซึ่งทริกเกอร์อินพุทใดถูกเรียก?


1
ให้ปุ่มชาร์จไฟสูงสุดและอ่านมัน
ลาสม่าเอช

1
ค้นหาชุด STM32F105 ไม่กี่ตัวพวกเขามี PIN ปลุกเพียงอันเดียว ส่วนไหนที่คุณหมายถึงอย่างแน่นอนและหมุดไหน
berendi - ประท้วง

@berendi STM32F105 ของฉันมีอย่างที่คุณพูดเพียงแค่หนึ่งพินปลุก มันถูกกำหนดค่าในโหมดหยุดไม่โหมด STANDBY ตามที่ฉันระบุไว้ในคำถามของฉัน มันใช้เหตุการณ์ EXTI สำหรับการตื่นขึ้น ฉันผสมผสานความหมายของ "เหตุการณ์ EXTI เหล่านั้นกับ" wakeup pins " แต่ฉันเดาว่าคำตอบที่ได้รับจาก Olin ยังคงมีประโยชน์ถ้าใครบางคนต้องการแยกความแตกต่างระหว่าง "woken by RTC" หรือ "woken by wakeup pin" ในโหมด STANDBY ไม่มีใครมีคำแนะนำเกี่ยวกับวิธีการแก้ไขคำถามนี้เพื่อให้ตรงกับคำตอบ Olins? โน้ตตัวเล็ก ๆ ตอนต้นอธิบายว่าเกิดอะไรขึ้น แก้ไขใหม่ทั้งหมดหรือไม่ หรือฉันควรลบคำถามทั้งหมด?
Daniel Näslund

1
มีตัวควบคุม ST ที่มีพินปลุกมากกว่าหนึ่งพินเช่น F0, F3, L0 หรือ L1 ซึ่งไม่สามารถหาแหล่งที่มาได้อย่างแน่นอนหลังจากออกจากโหมดสแตนด์บายเนื่องจากมีแฟล็กอินพุตปลุกเดี่ยว ST แก้ไขการกำกับดูแลนี้เป็นครั้งแรกในซีรีย์ F7 และ L4 ใหม่ล่าสุดซึ่งมีการตั้งค่าสถานะแยกกันสำหรับแต่ละอินพุตการปลุก
berendi - ประท้วง

คำตอบ:


11

ฉันไม่ทราบรายละเอียดของส่วนนี้ดังนั้นฉันจะถือว่าคำอธิบายของคุณถูกต้อง

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

ไม่ว่าในกรณีใดก็ตามคุณอ่านทั้งสองอินพุตโดยเร็วที่สุดหลังจากการปลุก ยกเว้นว่ามีบางสิ่งผิดปกติเกี่ยวกับ ST micro นี้ที่ควรจะเป็น ms ถึง 10 วินาที ms จากการกดปุ่ม

เพื่อรับประกันว่าสายยังคงอยู่ในระดับต่ำให้ใช้ตัวเก็บประจุเพื่อรักษาระดับต่ำให้สูงถึง 100 ms หลังจากปล่อยปุ่ม

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

การสลายตัวถึง 20% ของมูลค่าสุดท้ายเกิดขึ้นในค่าคงที่เวลา 0.22 ให้บอกว่าคุณต้องการรับประกันสายดูต่ำเป็นเวลา 100 ms หลังจากกดปุ่ม นั่นหมายความว่าค่าคงที่เวลา RC ต้องเป็น 450 มิลลิวินาที ด้วยแรงดึง 100 kΩความจุจะต้องเป็น 4.5 µF ดังนั้นฝา 4.7 µF 10 V น่าจะทำได้ดี

โดยสรุปนี่คือวงจร:


1
ควรเป็นอีกด้านหนึ่ง STM32s ตื่นขึ้นมาบนขอบที่สูงขึ้น นอกจากนี้ afaik พวกเขามักจะเริ่มต้นด้วยนาฬิกาภายในสลับไปยังผลึกภายนอกและ pll จะทำโดยซอฟต์แวร์ ปัญหาคือรหัสเริ่มต้นที่ให้มาหรือสร้างขึ้นโดยเครื่องมือ CubeMX ซึ่งทำให้ยากต่อการเรียกใช้รหัสผู้ใช้ก่อนการตั้งค่าทรีนาฬิกา
berendi - ประท้วง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.