2012年8月19日日曜日

STM32-DISCOVERY DACを動かすのにDMAを使ってみた

お盆と年末年始の都内は電車とかがガラ空きなんでうれしいです.がっ、コミケの当日に秋葉原に行くとコミケから流れてきたデカイカバンを持った人々で鬼のように混むことをわたしは知っています.-----諸般の事情でコミケには行けずじまいでしたので、「謎の彼女X」同人誌を入手できておりません、残念-------

そして今日でお盆休みが終わり、明日から通常通り出勤なんだが意欲が湧かずに鬱々とされている方々が多いのではないかと思われます.もしくは、日焼けした上腕の皮を剥きつつ過ぎゆく夏を惜しんでいるアウトドアな方々もいらっしゃることでしょう.
わたしはアウトドア拒否人間なのでほとんど日焼け等はせずに、決算申告とSTM32をゴニョゴニョといじくっていたお盆休みでありました.

--------
さて、昨日~今日にかけてSTM32のDMAをいじくりました.上限50kHzのsine/cos波を発生します. https://sites.google.com/site/stm32datasheet/home/060-STM32-program-smpls/32-dac-dma

わたしはDMAを具体的に触ったのはこれが初めてだったんですが、かつての仕事柄hardwareで高速な信号処理するのを旨としてきたこともあり、DMAのようにhardware orientedなカラクリは気持ちがいいですね.softwareのシリアル処理よりもhardwareのパラレル処理の竹を割ったような潔さが好きだというのが根っこにあります.
STM32のDMAの仕様を見て思ったのは、多目的で汎用性のあるDMAを設計するのは骨が折れる作業なのだなと、仕様を決めた人の苦労が偲ばれました.

DMAの設定項目はこのようにたくさんありますので、いざ使おうとすると少々かったるいです.
  転送元アドレス/転送先アドレス
  転送元アドレス自動increment/転送先アドレス自動increment
  転送元データ幅/転送先データ幅
  データ個数/一発で終了/グルグル回るか?
  バス優先順位
  トリガの選択

DMAでADCとかDMAでUARTとかやってみたいと思ったのでしたー.


=== STMのアフィリエイト始めました ===
STM32のwelcome-kitです
       
試用レポはいずれまた...

37 件のコメント:

  1. こんにちは STM32 はARM マイコンなんですね。
    STM32VLDISCOVERY が1100
    STM32F0DISCOVERY が800
    と評価用はとっても安いです。

    小生は
    LPCXpresso NXP LPC1769(1768)評価キット2500
    とちょっと高めですがEthernetオンボード付きを買ってしまいました。

    ほかの種類のチップにもEthernet付きがあるそうですが、
    ARMということでこれにしてみました。
    ではまた

    返信削除
    返信
    1. STM32を使うのでしたらUSBかEtherを動かして見たいところですね

      削除
  2. こんにちは CORD_RED で Lチカを試しました。
    このバージョンは メモリ制限があるので mbed もやってみようと
    (FT232RL等で結ぶ必要があるようです)調査しましたが、
    LPCXpresso NXP LPC1769 は対応していると載っているのですが、
    まだ探し仕切れていません。

    最終は Ethernet 関連に使う予定です。

    ではまた

    返信削除
  3. 平坂さんは STM32 でやっておられますが 小生も 持っております。
    それ以外にも LPC1769 をやろうとしていますのは イーサネットが付いていたからですが、両者を比べますと ARM から派生しているためか 非常に似たところがあり、 評価板ですと安いので 32bit版は大変お得な気がしました。

    mbed はまないたのような意味でしょうか、それ以外のチップにも沢山この言葉が使われていました。
    LPCのmbedは高い分フルのメモリープログラムを使えるようで、
    これで組んで、評価版(128kbの制限有り)に移すことが出来るそうですが、そんなにおおきなのを組むのか? そのぶん価格が4倍くらいと、
    値打ちがあるのかよくわかりません。

    返信削除
    返信
    1. コードサイズって、マシン語自体のコンパクトさに加えてコンパイラがどれだけコンパクトなコードを吐くかにもよりますので、128kBあったらどれだけのことができるかはやってみないとよくわからないものだろうなぁという認識でおります.

      経験的には、浮動小数点の算術関数を使いまくるとライブラリをドカドカと追加してコードサイズが巨大になると思います.

      ちなみに、STM8Sで、ADC+LCD+SDカード+UART+浮動小数点をどっちゃりと実装してコードサイズが25kBぐらいでした.

      削除
  4. stm32-discovery の方から ソフトを始めたいと思います。
    今日接続すると、リムーバブルディスクとして認識し、
    STM32 (CORTEX M3) - 32-bit Microcontrollers として連結できました。
    SDカードの読み書き、I2C_LCDの表示、SPIかI2CのSRAMアクセスなどをやってみたいので、またご指導ください。
    (STM8の方はPCに嫌われて接続がうまく出来ず失敗しました)
    現在のパソコンは少し新しくなっています。

    LPCX1769の方はハード組み立てだけを先にやってみます。
    それではよろしくお願い致します。

    返信削除
  5. こんばんは 
    STM32F100xx USBなし ←STM32-DISCOVERYのCPU
    を見ました。
    アトメルのatmegaやattinyでは3.3vから1.5kでプルUPし、
    ブルーかグリンのLEDでクランプし、ソフトでUSBを実現する方式があります。
    STM32では出来ないのでしょうか?

    返信削除
    返信
    1. そうですか、そういうやりかたもありますか.
      まぁでも、そういう手の込んだ実装方法をいくら習得しても、努力の割りに報われないので、手出しする気はわたしはないです.
      キチンとUSBが載ったCPUで、キチンとしたlibraryを使ってprogrammingするという王道路線にしか興味はないです.

      削除
  6. >040 eclipse本家のサイトのダウンロードファイルでSTM32開発環境を作ってみました (今後この環境で進みます)

    ツール(IDE?)が間違っている気がして、全部削除して、再インストールします。

    解凍しますとなぜか
    C:\Documents and Settings\user\デスクトップ\
    の下に解凍されてしまいます。
    これは今まで無かったので解決できていません。
    また、C:\以下のホルダですがtemp等ですと使いにくいので、
    bin\ とか _stm\ とかにしてもいいでしょうか?
    ( _ )を付けると上の方に表示され探しやすくなります。

    また、「yagarto-tools-20100703-setup.exe」はなぜかダウンロードできませんでした。(firefox,seamonkyとも)

    「http://sourceforge.net/projects/yagarto/files/YAGARTO%20for%20Windows/20111119/yagarto-bu-2.21_gcc-4.6.2-c-c%2B%2B_nl-1.19.0_gdb-7.3.1_eabi_20111119.exe/download」はダウンロードできました。これが2個の分離するのでしょうか?

    まずは Lチカから・・宣言部の配置、メイン部の配置、その他の関数配置、ライブラリとの連結方法、(何だ、全部じゃないか)といわないでください。

    これを克服して SDカードプレーヤー、SDカードLAN放送機、ストリーミングプレーヤー の切り替え式、複合機までこぎ着けたいのです。

    それではよろしくお願い致します。

    返信削除
    返信
    1. これは実験台になっていただきましてありがとうございます.
      まずは、DL出来ない問題について.
      revision upによってリンクが切れていました.別のところをリンクしましたので、再チャレンジしてみてもらえますでしょうか?

      「これが2個の分離するのでしょうか?」
      そうではありません.

      削除
    2. 「解凍しますとなぜか C:\Documents and Settings\user\デスクトップ\
      の下に解凍されてしまいます。これは今まで無かったので解決できていません。」
      解凍ソフトがどこのフォルダに解凍するかは解凍ソフトの設定によります.なにか新しい解凍ソフトに変えませんでしたか? 解凍ソフトの設定を変えてみましょう.

      削除
    3. 「C:\以下のホルダですがtemp等ですと使いにくいので、bin\ とか _stm\ とかにしてもいいでしょうか?」

      これはわたしが書いた、
      eclipseフォルダをc:\eclipse に移動します.
      というところのことでしょうか?
      だとしたら、他のフォルダにしたら動かなくなると思いますのでオススメできません.

      削除
    4. 解凍フォルダはどこでもかまいません.

      削除
  7. こんばんは
    解凍ソフトは「Lhaplus」(7-Zipも)を使っていますが、解凍先指定が抜けていまして、右クリックでも出てこなかったのが判りました。

    よく考えますと、「c:_stm」の中にをリンク作って「c:\eclipse」を指させるようにすればよいですね。

    それと「yagarto」がIEを示そうとするのですが、firefoxにすることは出来ますか?(おそらく \gcc.url がIEでないと動作しないかもしれませんが)

    >ここまでで、eclipseでC言語のソースをビルドする環境設定はほぼ完了です.
    迄こぎ着けました。

    よくこんなにややこしいことを理解されるのですね。

    ちょっと間をおいて「projectの作成」も始めます。

    それではよろしくお願い致します。

    返信削除
    返信
    1. リンクでうまくいくかどうかは、windowsでは試したことがないのでよくわかりません.unixならうまくいきますけどね.では.

      削除
  8. こんばんは C:\_stm\eclipse.exe へ のリンクはうまくゆきまして、

    何とかLチカはうまくゆきました。

    LPC1769は組み込みのため基板をぶった切って、イーサネットを試しますと、
    動作しませんでした。

    壊してしまったかとあわてましたが、Lチカをやってみるとうまくいきましたので、壊れていなかったようです。
    (main部分の書き方が間違っていたようです)

    さて、PICの何もしないmain作成の所を16f1827で組んでみようとやってみたんですが、MPLABX にしてしまったので、表示の出方が違い ソースが書き込めないで まだ出来ていません。

    返信削除
  9. こんにちは 今頃になって気がついたんですが「LXCP_Spresso」は
    Eclipse platform だったんです。これでしたら、STM32とある程度同じように開発できるんでしょうか?

    返信削除
    返信
    1. eclipse自体は同じでも、eclipseというプラットホームの上で動かす諸々のものが違うので、かなり違うんじゃないかと予想します.

      削除
  10. こんばんは きょうは「LPCXPresso」をだいぶいじってみました。
    IDEはコードレッドのものらしいですが、いくつかの版のソースが使えるみたいです。(Eclipseも含んでいます)
    使ってみて困ったのは、中を空白(ブートローダを除く)に出来ない、次を書き込むと置き換わる、
    IDE(exe形式)の裏にワークベンチがあって、あらかじめ書き込むことが出来るが、一度消すと、ワークベンチの分をけさないいと、新たに呼び込む込むことが出来ず、ワークベンチは、exeの裏にあってもパスを指定すると読み書きできますが書いても見まえない状態です。
    新たにプロジェクトとして書き込むことは出来、見えるようにまります。

    新たにコードを書き込むとLPCリンクを見失ってUSBを差し直さないと、書き込めません(何かほかに方法SWなどがあるかもしれませんが)
    次はEclipseで組んだのを書き込んでみます。

    イサーネットも組み込みはやったんですが応答しませんでした。
    ではまた

    返信削除
  11. STM32VLDISCOVERY なんですが ST-LINK で構成する SWD(CN2) を
    ST-Link/Discovery (CN3) で切り替えていて、
    前の部分は 小さいながら STM32F103C8 
    http://www.st.com/internet/mcu/product/164476.jsp
    各種インターフェース用に企画されているようです。
    この部分だけ使うなんて事は出来るんでしょうか?

    返信削除
    返信
    1. それ、おっしゃっていること解ります.わたしも同じ事を考えたんですが、考えただけで実行はしてませんです.

      回路図にあるSB3~SB10の辺りのハンダショートを変更すると、汎用の焼き込み基板とかデバッガに流用できそうな気がしているんです.

      削除
  12. SB3~SB10は触ってはいけないと書いてありました。
    接続されている素子はFBです。
    http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/CD00267113.pdf
    CN2は外部用ST-LINK-SWDで CN3はディスカバリーへの3.3V GND接続です。
    STM32F103C8T6はJTAG用のpinがあるのですが外には引き出されていません。

    返信削除
    返信
    1. don't modifyと書かれてますね.
      しかし、いまはそれを越えて、保証外の使い方をするのが目的地なので、modifyしてしまえというのが置かれた状況だと思います.もちろん、その結果どうなろうとSTMicroは知りませんという前提で.

      削除
  13. CN3を抜くだけで下の基板はフリーになります。
    問題はSWDには出来るんですが、JTAGには出来ないことです。
    逆にJTAGならSTM8Sの方が対応していたようです。
    http://www.eleki-jack.com/mycom2/2010/01/stm8s_1.html

    ところでLPC1769はUSBも繋がったんですが、VIDPIDの関連で認識できませんでした。

    返信削除
  14. 以前 STM8ディしかバリーのST-LINKが不調になり、差すとPCがこけるというのがあったのですが、
    今回のPCでは問題なく動作しました。
    ファームウエアのアップデートを見つけたので、STM8S STM8L STM32ディスカバリーに適用しますと、
    STM8S STM8L は SWIM(1線式)STM32 は SWD(2線式) として アップデートできました。
    ちなみにLPCは DUF相当とLPC-LINKの2つのモードに切り替わります。
    http://www.st.com/stonline/stappl/resourceSelector/app?page=resourceSelector&doctype=FIRMWARE&ClassID=1734
    改造するにはSTM8Sが都合がよいようです(引き出しpinが多い)

    返信削除
    返信
    1. ST-LINKをわたしも買ってみたくなりました.

      削除
  15. STM8_D と STM32_D をつないで SVP を使って何かを書き込みました。

    書き込んでいる途中誤操作をして、書き込み途中の経過を消してしまったので、また時間を見て書いてみます。
    STMF103C8 の 14か15pinがリセットです、14pinはSB11に出ていますが、15pinを引き出して使いました。(どちらが正解か、どちらでも良いのか判っていません)
    ほかには3.3v2本とJCK JMS GND を使いました。
    ではまた

    返信削除
  16. こんばんは http://den-nekonoko.blog.so-net.ne.jp/2012-01-25
    に 追記をしました。
    書き込むプログラムはないが良いのか判断できていません。
    http://www.pwv.co.jp/~take/TakeWiki/index.php?arm%2FSTM8S-Discovery%E3%82%92Versaloon%E3%81%AB%E3%81%99%E3%82%8B%E7%B0%A1%E5%8D%98%E3%81%AA%E6%96%B9%E6%B3%95
    プロテクトの解除方法がありました。
    STM32 ST-Link Utilityから書き込むように書いてありましたが、うまく出来ず、STVPから書き込めました。
    問題はなにをか来たら一番良いか?おそらくJTAG関連だと思いますが、OpenOCDかVersaloon等のようです。
    めむいさんのぶろぐ http://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCD
    AVRにまつわるエトセトラさん http://hp.vector.co.jp/authors/VA000177/html/stm32f103.html
    なんかがおもしろそうですが、 ちょっとついて行けません。

    返信削除
  17. こんばんは STM32のSWDからSTM32F103C8に書き込めるようになりました。
    要点はST-LINKユーティリティでターゲットオプションバイトを操作しますと、プロテクションは解除されメモリーはクリアされます。
    STM32_DのSB11からリセットを取りSTM8S_DのCN5-8pinに入れ、
    (100kPULLUPされている)
    CN5の4,5,6,7,8 にSTM32_Dの規定信号と3.3V,GNDを入れると、SWIMではなくSWDとして動作します。
    しかし私にはのにのプログラムを入れると良いのかが判っていません。
    プログラム中のUSBのVID_0483,PID_3744にする必要があります。
    それではまた。

    返信削除
  18. 済みません CN5-8張りセットが効きますが、
    C11を外して、(7pin)の所に入れるのが正解のようです。

    返信削除
  19. こんばんは 試行錯誤を繰り返し、
    http://den-nekonoko.blog.so-net.ne.jp/2012-12-28
    STM32VLDISCOVERY で STM8S-DISCOVERY の STM32F103C8T の SWDによる配線方法が確定できました。
    ではまた。

    返信削除
  20. こんにちは もう ST-LINK v2 を買われたのでご興味がないかもしれませんが、
    ディスカバリーのST-LINK部分に使われる、STM32F103系統を主体にした、ページを見つけました。
    元は「Maple Mini」と云うのの流れのようです。
    http://stm32f4.web.fc2.com/STM32F1/momiji_momi2.html
    ではまた。

    返信削除
  21. 小生も ST-LINK/V2を買いました。
    目的はSTM32の方なのであまり影響はないのですが、4pinの先の曲がったケーブルを差しますと、方向を決める爪が折れてしまいました。
    よく見ると直線型より1mmほど厚くなっているので折れてしまうようです。

    UARTを使う stm32-stm8_flash_loader_demo がアップバージョンされました。
    以前あった、CANとDFUの項目が無くなっています。

    ではまた

    返信削除
  22. 060 STMライブラリを使ったプログラミング実例集‎ の

    32 DACをDMAで動かしてsine/cos波を発生させる (DAC,DMA,TIM2,TIM3,UART,LEDチカチカ)
    をやってみたいのですが、末尾の「stdperiph_32_DAC_DMA_sine.z・・」を一気に
    ダウンロードする(プロジェクト)なんて事は出来ますでしょうか?

    追伸 dマークでzipをダウンロードできました。
    これからbin\.hexを書き込めば動きましたが、
    プロジェクトを全部1度に読み込むなんてのはないんでしょうか?
    それではよろしくお願い致します。

    返信削除
  23. このコメントは投稿者によって削除されました。

    返信削除
    返信
    1. 追伸 (打ち間違いがひどかったので書き直しました)
      以前教えて頂いたのを思い出しながらtest02をやってみました。
      すでに.hexがあったので消して、ビルドすると.hexが出来たので、ちゃんと機能したのが判りました。
      ではまた

      削除
  24. Thаnκs fоr ѕhаring your thoughtѕ аbout nationjοb;.

    Rеgards

    my webpagе - voucher for cafe rouge,
    My website: voucher for Cafe rouge,

    返信削除