

Był już ARM za 16 centów, teraz mamy ARMa za 8 centów. Tak, osiem.

PY32F002/PY32F003 firmy PUYA to mikrokontrolery z rdzeniem ARM Cortex M0+ o taktowaniu 24/32MHz.
PY32F002 posiadają 20kB FLASH, 3kB RAM, SPI, USART, I2C, ADC, timery... nie ma na co narzekać.
PY32F003 dodatkowo DMA i kilka timerów więcej, jest też większy wybór pamięci.
Jest interfejs SWD, tak że nie trzeba jakiegoś egzotycznego programatora.
Zasilanie 1,7V...5,5V.
Obudowy od standardowych SOP, przez TSSOP, po małe QFNy czy DFNy.
PDFy do pobrania na chińskiej wersji strony:
https://www.puyasemi.com/cpzx3/info_267_aid_242_kid_235.html
Klikamy na pomarańczowy folder. W każdym jest ten sam RAR z paczką PDFów i innych pomocy. Część po chińsku, część po angielsku.
PY32F002:

PY32F003:

Przykładowe obudowy:




Hello world (źródła w załączniku):

Migające LEDy i tekst na UART (9600 bps)
Testy:
Z tego co zauważyłem jest kilka problemów z resetem.
1. Podłączając przycisk do pinu RESET czasem po wciśnięciu pojawia się przerwanie HardFault.
Zewnętrzny reset można wyłączyć, tak że problem raczej mały. Już dawno nie korzystałem z zewnętrznego resetowania.
2. Układ można przetaktować około 2-krotnie ustawiając "wait state" flasha na 1 i zmieniając kalibrację generatora.
Problem jest tylko taki, że reset zeruje "wait state" flasha, a nie zeruje kalibracji generatora.
Jak ktoś chce przetaktować, to nie resetować.
Pobór prądu w uśpieniu to około 5 µA, tak że 8-bit killerem go nie nazwę. Choć cenowo...

Programowanie:
Aby dodać do J-Linka obsługę układów PUYA, należy wgrać pliki ".FLM" z załącznika do katalogu "/opt/SEGGER/JLink/Devices/Puya/" a do pliku "JLinkDevices.xml" należy dopisać:
Quote:<!-- -->
<!-- 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? Ranking DIY