茱萸note

電子工作の備忘録と旅行の記録

ARM AVR マイコン 電子工作

STM32F042でAVRプログラマを作る

投稿日:2018年1月6日 更新日:

秋月で販売しているSTM32F042K6T6でAVRプログラマを作ります.


目次


STM32F042とは?

ARM Cortex-M0 ベースの32bitマイコンです.Nucleoボード等にも積まれています.秋月にて¥250で販売されています.

akizukidenshi.com

STM32F042は¥250という安さなのにUSBデバイスとして振る舞う事ができる優れものです.

さらに,STM32F042はD+のプルアップ抵抗や外付けXTALなど付けること無くUSB機能が使えます.入出力ピンの一部も5Vトレラントなので,5V系のAVRとも直結できます.

F042-AVRプログラマを作った動機

Atmel社を買収したMicrochip社の陰謀によりAVR ISP MKIIという比較的安価な純正AVRプログラマが販売中止に追い込まれました.

代替品を探してみた所,Pololu USB AVR Programmerという,純正AVRプログラマであるSTK500の互換品を発見しました.

www.pololu.com

Atmel Studio上で使用することができるので,純正AVRプログラマと使い勝手が変わらないのが魅力的でした.しかもUSB-Serialアダプターとしても使えます.

しかし,メインチップにPICが用いられているようで,「AVRプログラマに競合製品であるPICを用いるとはけしからん!!!」と思い,自作を決意しました.

調べてみると,ATMEGA8でSTK500互換プログラマを作成した前例がありました.

tuxgraphics.org: 05101, AvrUsb500 — an open source Atmel AVR Programmer, stk500 V2 compatible, with USB interface

これを参考に作ってみることにしました.

F042-AVRプログラマの概要

STK500は元々COMポート接続ですが,今回はF042で仮想COMポートをエミュレーションします.USB-Serialアダプターとしても使えるように,COMポートを2つエミュレートします.STM32F042で仮想COMポートを2ポート実装する方法については,後日説明します.

ソフトウェア

GitHubで一応見れます.諸事情により公開停止中(=_=)

TINY2313のヒューズビット読み書き・Flash読み書きは確認しました.

USB-Serialアダプタとしても一応動きますが,検証が必要です.

ハードウェア

Eagleでプリント基板を設計してALLPCBで注文しました.

BOOTピンの配線が間違っていたので,後日気が向いたら再発注するかもしれません.下の回路図・パターンは修正済みです.

ALLPCBで頼んだ基板が届いた。25枚注文して1700円。実際は42枚封入されてた。BOOTピンの配線ミスってるから気が向いたら再発注するかも。 pic.twitter.com/J3uR42DZQO

— A.T. (@4730_gumi) 2018年1月5日

昨日届いた基板を配線した。ちゃんとAVRライタとして機能している。 pic.twitter.com/oPUOdhfeLL

— A.T. (@4730_gumi) 2018年1月5日

-電子工作
-, , ,

関連記事

Arduinoもどき

Arduinoは普通に買うと高いので、互換品を作ってしまいます。

【Ubuntu】【上級者向け】EFIシステムパーティションを作成する

「空っぽのSSD・HDD・USBメモリにUbuntuをインストールしたい!」といった人に向けて、空っぽのSSD・HDD・USBメモリにEFIシステムパーティションを作成する方法を説明します。

Raspberry Pi と AWS IoT を連携させて Alexa で LED や スマートプラグを操作する【Alexa×Raspberry Pi その1】

AWS IoT Core と Raspberry Pi を連携させて、Alexa を搭載した Amazon Echo 等を使って Raspberry Pi につないだ LED を制御します。ついでに、Tp-Link のスマートプラグ『Tapo P105』も操作させてみます。

【Ubuntu】【Python】virtualenvを使う

UbuntuでPythonのパッケージ管理をしやすくするためにvirtualenvを導入します。

権限のない環境でvirtualenvを入れる

sudoが使えない、root権限のない環境でvirtualenvを入れます。