Phát hiện chuyển đổi tạm thời nào khiến cpu STM32 thức dậy


10

Chỉnh sửa : Câu hỏi này là sai. Stm325105 chỉ có một pin thức dậy. Nhưng các bộ phận ST khác có nhiều hơn một chốt đánh thức, vì vậy câu trả lời đã cho là hợp lệ cho các bộ phận đó.


Tôi có một stm32f105 có hai nút tạm thời được kết nối với đầu vào đánh thức. Bộ xử lý được đặt ở chế độ STANDBY. Khi nhấn bất kỳ nút nào hoặc bộ hẹn giờ RTC kích hoạt, cpu sẽ thức dậy.

Vấn đề là tôi muốn cpu làm những việc khác nhau tùy thuộc vào việc kích hoạt đầu vào đánh thức nào. Theo 5.3.5 từ tài liệu tham khảo ST stm32f105xx , không có thanh ghi nào được bảo tồn ngoại trừ thanh ghi trạng thái cho biết chúng tôi đã thức dậy (nhưng không phải bởi ai) và 42 thanh ghi dự phòng.

Chế độ Chờ cho phép đạt được mức tiêu thụ điện năng thấp nhất. Nó dựa trên chế độ ngủ sâu Cortex ® -M3, với bộ điều chỉnh điện áp bị tắt. Do đó, miền 1.8 V bị tắt nguồn. PLL, bộ dao động HSI và bộ dao động HSE cũng bị tắt. Nội dung SRAM và thanh ghi bị mất ngoại trừ các thanh ghi trong miền Sao lưu và mạch chờ.

Sau khi thức dậy từ chế độ Chờ, thực thi chương trình khởi động lại giống như sau khi Đặt lại (lấy mẫu chân khởi động, đặt lại véc tơ được tìm nạp, v.v.). Cờ trạng thái SBF trong thanh ghi điều khiển / trạng thái Nguồn (PWR_CSR) cho biết MCU ở chế độ Chờ.

Bài đăng trên diễn đàn ST này, Làm thế nào để xác định nguồn gốc của Wakeup từ Chế độ chờ? , gợi ý rằng tôi không thể phát hiện ra sự thức dậy nào được kích hoạt trong phần mềm. Tôi không tìm thấy bài viết nào khác ở đó mà đã khai sáng thêm.

Làm cách nào tôi có thể sử dụng phần mềm hoặc phần cứng để xác định, sau khi thức dậy, đầu vào đánh thức nào được kích hoạt?


1
Có nút sạc lên nắp và đọc nó
PlasmaHH

1
Nhìn lên một vài biến thể STM32F105, chúng chỉ có MỘT pin thức dậy. Phần nào bạn có nghĩa là chính xác, và chân nào?
berendi - phản đối

@berendi STM32F105 của tôi, như bạn nói, chỉ một pin thức dậy. Nó được định cấu hình ở chế độ STOP, không phải chế độ STANDBY như tôi đã nêu trong câu hỏi của mình. Nó sử dụng các sự kiện EXTI để thức dậy. Tôi đã trộn lẫn ý nghĩa của những "sự kiện EXTI" với "ghim thức dậy". Nhưng tôi đoán câu trả lời do Olin cung cấp vẫn hữu ích nếu ai đó cần phân biệt giữa "bị đánh thức bởi RTC" hoặc "bị đánh thức bởi pin thức dậy" trong CHẾ ĐỘ STANDBY. Có ai có đề xuất về cách chỉnh sửa câu hỏi này để phù hợp với câu trả lời của Olins không? Một lưu ý nhỏ khi bắt đầu mô tả những gì sai? En chỉnh sửa lại toàn bộ? Hay tôi chỉ nên xóa toàn bộ câu hỏi?
Daniel Näslund

1
Có các bộ điều khiển ST có nhiều hơn một pin đánh thức, như F0, F3, L0 hoặc L1, trong đó nguồn thực sự không thể được xác định sau khi thoát khỏi chế độ chờ, bởi vì chúng có một cờ đầu vào đánh thức. ST đã sửa lỗi giám sát này trước tiên trong loạt F7 và L4 mới nhất, có các cờ riêng cho mỗi đầu vào đánh thức.
berendi - phản đối

Câu trả lời:


11

Tôi không biết chi tiết về phần ST này, vì vậy tôi sẽ cho rằng mô tả của bạn về nó là chính xác.

Bộ xử lý sẽ thức dậy rất sớm sau khi nhấn một trong hai nút. Điều này đặc biệt đúng nếu nó có bộ dao động RC bên trong. Ngay cả khi cuối cùng bạn cần chạy từ một tinh thể vì lý do chính xác, có lẽ bạn có thể có phần bắt đầu từ một RC bên trong, sau đó chuyển sang tinh thể sau. Có những micros có thể làm những việc như vậy, mặc dù tôi không biết nếu bạn là một trong số họ.

Trong mọi trường hợp, bạn đọc cả hai đầu vào càng sớm càng tốt sau khi thức dậy. Trừ khi có điều gì đó bất thường về micro ST này, đó là từ một ms đến vài 10 ms từ nút nhấn.

Để đảm bảo đường dây vẫn ở mức thấp, hãy sử dụng tụ điện để giữ đường dây ở mức tối đa 100 ms sau khi nút được nhả.

Ví dụ, giả sử mức đầu vào logic thấp được đảm bảo là 20% điện áp cung cấp. Đường dây được kéo lên với một điện trở, và có một tụ điện nối đất. Nút quần ngắn xuống đất. Do đó, dòng nổi cao và buộc phải tiếp đất khi nhấn nút. Khi nút được giải phóng, điện áp phân rã theo cấp số nhân đối với nguồn cung cấp.

Phân rã đến 20% giá trị cuối cùng xảy ra trong 0,22 hằng số thời gian. Hãy nói rằng bạn muốn đảm bảo dòng trông thấp trong 100 ms sau khi nhấn nút. Điều đó có nghĩa là hằng số thời gian RC phải là 450 ms. Với pullup 100 kΩ, điện dung sẽ cần 4,5 4.5F. Vì vậy, một nắp 4.7 VFF 10 V sẽ làm tốt.

Tóm lại, đây là mạch:


1
Nếu phải là cách khác, STM32 thức dậy trên cạnh tăng. Ngoài ra, afaik họ luôn bắt đầu với đồng hồ bên trong, chuyển sang tinh thể bên ngoài và pll được thực hiện bởi phần mềm. Vấn đề là với mã khởi động được cung cấp hoặc tạo bởi công cụ CubeMX, điều này khiến cho việc chạy mã người dùng hơi khó khăn trước khi thiết lập cây đồng hồ.
berendi - phản đối
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.