

Es gab schon einen ARM für 16 Cent, jetzt haben wir ARM für 8 Cent. Ja, acht.

PY32F002/PY32F003 von PUYA sind Mikrocontroller mit ARM Cortex M0+ Kern, der mit 24/32 MHz getaktet wird.
PY32F002 haben 20 kB FLASH, 3 kB RAM, SPI, USART, I2C, ADC, Timer... nichts zu meckern.
PY32F003 zusätzlich DMA und ein paar Timer mehr, außerdem gibt es eine größere Speicherauswahl.
Es gibt eine SWD-Schnittstelle, man braucht also keinen exotischen Programmierer.
Stromversorgung 1,7 V...5,5 V.
Gehäuse von Standard-SOPs über TSSOPs bis hin zu kleinen QFNs oder DFNs.
PDFs zum Herunterladen auf der chinesischen Version der Website:
https://www.puyasemi.com/cpzx3/info_267_aid_242_kid_235.html
Wir Klicken auf den orangefarbenen Ordner. Jeder hat das gleiche RAR mit einer Reihe von PDFs und anderen Hilfsmitteln. Manche auf Chinesisch, manche auf Englisch.
PY32F002:

PY32F003:

Beispiele für Gehäuse:




Hello world (Quellen beigefügt):

Blinkende LEDs und Text auf UART (9600 bps)
Tests:
Soweit mir aufgefallen ist, gibt es ein paar Probleme mit dem Zurücksetzen.
1. Beim Anschließen einer Taste an den RESET-Pin erscheint manchmal ein HardFault-Interrupt, wenn er gedrückt wird.
Der externe Reset kann deaktiviert werden, so dass das Problem eher gering ist. Einen externen Reset habe ich schon lange nicht mehr benutzt.
2. Das System kann ca. 2 Mal übertaktet werden, indem der "wait state" des Flashs auf 1 gesetzt und die Kalibrierung des Generators geändert wird.
Das einzige Problem ist, dass das Zurücksetzen "wait state" des Flashs zurücksetzt, und die Generatorkalibrierung wird nicht zurückgesetzt.
Wenn jemand übertakten möchte, nicht zurücksetzen.
Die Stromaufnahme im Schlafmodus liegt bei etwa 5 µA, als 8-Bit-Killer würde ich es also nicht bezeichnen. Obwohl preislich...

Programmierung:
Um Unterstützung für PUYA-Chips zu J-Link hinzuzufügen, muss man die ,,.FLM"-Dateien aus dem Anhang in das Verzeichnis ,,/opt/SEGGER/JLink/Devices/Puya/" hochladen und Folgendes zur Datei ,,JLinkDevices.xml" hinzufügen:
Zitat:<!-- -->
<!-- Puya -->
<!-- -->
<Device>
<ChipInfo Vendor="ST" Name="PY32F002Ax5" WorkRAMAddr="0x20000000" WorkRAMSize="0xC00" Core="JLINK_CORE_CORTEX_M0"/>
<FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x5000" Loader="Devices/Puya/PY32F0xx_20.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
<Device>
<ChipInfo Vendor="ST" Name="PY32F003x4" WorkRAMAddr="0x20000000" WorkRAMSize="0x800" Core="JLINK_CORE_CORTEX_M0"/>
<FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x4000" Loader="Devices/Puya/PY32F0xx_16.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
<Device>
<ChipInfo Vendor="ST" Name="PY32F003x6" WorkRAMAddr="0x20000000" WorkRAMSize="0x1000" Core="JLINK_CORE_CORTEX_M0"/>
<FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x8000" Loader="Devices/Puya/PY32F0xx_32.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
<Device>
<ChipInfo Vendor="ST" Name="PY32F003x8" WorkRAMAddr="0x20000000" WorkRAMSize="0x2000" Core="JLINK_CORE_CORTEX_M0"/>
<FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x10000" Loader="Devices/Puya/PY32F0xx_64.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
Cool? DIY-Rangliste