スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

WAVプレーヤーの製作(その5 stm32f10:STBeeでTFT液晶)

STM32_SSD1289プロジェクトは、stm32f4 DiscoveryとCoIDE環境での動作なのだが、これは
stm32_proj_2.jpg
こちらの方(今はサーバーリンクが切れたようです)が構築された、glcsarm.zipを手直ししただけであり、あまり私の勉強になっていない。

そこで、当初始めたstm32f10 STBee + vs1011 DAC + SDIO接続のmicroSDの環境への移植を考えました。
これを行えば、TFT液晶(SSD1289)+タッチパネルとstm32マイコンへのハード接続、ソフトウエアの仕組みが理解できそうだ。

【ハードウエア】
stm32_proj_9.jpg

中央がstm32f103 STBee、左がvs1011 DAC基板、右上がSDIO接続のmicroSDです。

stm32_proj_10.jpg

裏側にssd1289 TFT液晶が接続されてます。やっとのことでDemo画面が表示できました。

【接続基板】
stm32_proj_11.jpg

これらを接続している基板です。手製です。41本のパターン上ラインと23本のジャンパーで接続されてます。

中央とやや上部に開いてる四角い穴はSTBeeのCPUとスイッチに対応する部分です。意味はありません。
EAGLEでSTBeeのライブラリを起こした際、描画レイヤを間違えたら穴あきになってしましました。

stm32_proj_12.jpg

片面基板なのでハンダ面にLCDコネクタを付けねばなりません。
ここではコネクタ浅く差し込み、浮いた隙間にハンダ付けしました。40ピン付いているので強度はありそうです。

【ソフトウエア】
stm32f10 STBeeを使うのでIDEは「マイコン徹底入門」のeclipseにしました。

stm32_proj_8.jpg

この画面はやっとことで先のDemo画面が表示できたeclipse IDEの状態表示です。


以下、備忘録です。
CoIDE + stm32f4 Discovery 環境から、eclipse + stm32f10 STBee 環境への移植作業になります。

1.CoIDEでのworkspaceにある移植対象(ここでは「STM32_SSD1289」)フォルダを、eclipseのworkspaceにコピー。
(以下はeclise、STM32_SSD1289での作業)

2.このフォルダにあるファイル間の関連を掴む。手書メモでツリー状の関連図を作り、修正を要する部分を抽出。

3.ファイル名称の変更、stm32f4xx*** ではわかりづらいので、stm32f10x*** にする。

4.関連する内部のファイル名を汎用エディタで、stm32f4xx から stm32f10x に変更する。

5.このままでは動かないが、eclipseに悪い部分のコードを見つけてもらう。

  eclispeの「ファイル」「インポート」で次の画面が出ます。
  stm32_proj_13.jpg
  「アーカイブファイルまたはディレクトリから新規プロジェクトを作成します」と表示されるので、ウンウンと
  思うのだが、選択する部分が「既存プロジェクトをワークスペースへ」となっているので、ウッ?と思う。
  でもここを選ぶ。

  stm32_proj_14.jpg
  該当するフォルダ(私の場合、c:\miqnnet\workspace\STM32_ssd1289)を指定する。
  okボタンを押すと次の画面(省略)でこのフォルダ名が選択表示されるので「完了」させる。

6.以上の操作でeclipseを起動させるとプロジェクト・エクスプローラ部分に、STM32_ssd1289プロジェクトが
  表示される(表示されたはず?です。少し不安、忘れてる オッ)

7.このままでビルドさせても様々なエラーが出ます。細かなことは省略しますが、大きく修正することは

 1)GPIO、FSMC設定文の変更:stm32f4 と stm32f10では異なります。
   この設定はLCD_STM32F10.cで行われています。主な修正箇所です。この対応に時間がかかりました。

---stm32f4--- 元のコード、変えるところを赤字で記載します

void Init_GPIO(void)
{
  GPIO_InitTypeDef init={0};

  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);      //Add 2014/3/23
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE |
  RCC_AHB1Periph_GPIOC, ENABLE);


  /* RESET */
  init.GPIO_Pin=GPIO_Pin_3;
  init.GPIO_Mode=GPIO_Mode_OUT;
  init.GPIO_OType=GPIO_OType_PP;          //ADD 2014/3/23
  init.GPIO_PuPd=GPIO_PuPd_NOPULL;        //ADD 2014/3/23
  init.GPIO_Speed=GPIO_Speed_2MHz;
  GPIO_Init(GPIOD,&init);

  /* PORTD */
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);     // D2
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);     // D3
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);     // NOE -> RD
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);     // NWE -> WR
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);     // NE1 -> CS
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);     // D13
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);     // D14
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);    // D15
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);    // A16 -> RS
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);    // D0
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);    // D1

  /* PORTD */
  init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
               GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
               GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15;
  init.GPIO_Mode = GPIO_Mode_AF;
  init.GPIO_OType = GPIO_OType_PP;
  init.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  init.GPIO_Speed = GPIO_Speed_50MHz;                    // change to 50MHz, 2014/3/23
  GPIO_Init(GPIOD, &init);

//---PORT Eは省略します
}

--- stm32f10 --- への変更
void Init_GPIO(void)
{
  //GPIO clocl set
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
 // stm32f10ではGPIOはAPB2に接続されています。データシートのblock diagramにあります
   // この行だけで可

  GPIO_InitTypeDef GPIO_initstruc;  //定義名を変えました。同じでも良かった

  /* RESET pin*/
  GPIO_initstruc.GPIO_Pin=GPIO_Pin_3;
  GPIO_initstruc.GPIO_Mode=GPIO_Mode_Out_PP;
 // Mode設定は、stm32f10ではOut_PPとすれば、stm32f4での_OUT,_OType_PP,_PuPd_NOPULL
 // と同じです。
  GPIO_initstruc.GPIO_Speed = GPIO_Speed_50MHz;       // change to 50MHz, 2014/3/23
  GPIO_Init(GPIOD, &GPIO_initstruc);

 // GPIO_PinAFConfig *** と記載されていた行は不要です

  /* PORTD */ //FSMC data pin1 and Control pin
  GPIO_initstruc.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
               GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
               GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_initstruc.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_initstruc.GPIO_Speed = GPIO_Speed_50MHz;           // change to 50MHz, 2014/3/23
  GPIO_Init(GPIOD, &GPIO_initstruc);
}
--- ここまで---

 FSMC(LCD描画を高速で行うため、LCDメモリーを擬似SRAMに見立てた送信を行うことらしい)は
 大きな変更はありません。接続バス名が違うことの対応(のよう)です。 詳しく調べていません m(~ ~)m

  void Init_FSMC(void)
 --- stm32f4 ---
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);

  --- stm32f10 ---
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);

7.ts.h、ts.c にはLCDコントロール用SPI設定と、タッチパネルSPI設定が混在しているが、ここではLCD部分
  だけを修正し、タッチパネル用のエラー行はとりあえずコメントアウト。

  SPIの設定変更はGPIO_Modeの名称変更を行う。
  <例>
  /*!< Configure sFLASH Card CS pin in output pushpull mode ********************/
  GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
  GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;
  //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    // stm32f4 での設定
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  //GPIO_InitStructure.GPIO_PuPd =  GPIO_PuPd_UP;    // stm32f4 での設定
  GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);

8.これでビルドができるようになったが、動かない・・・
 
  一番上の写真に示した白いジャンパー線は、STBeeに装着された緑LEDのGND側をPE0(GPIOX_0_PIN)  
  に接続し、どこで止まっているかをDebugしてみました。

  結果、delay_ms()の待ちコード部分で止まってました。このコードが収納されているのは、mignnet環境
  では、lib\delay.h なので明示的にincludeさせました。

やっとのことで、STBee(stm32f103)にTFTカラー液晶(SSD1289)が接続でき、文字表示もできる環境を構築できました。

でもタッチパネルが動かなくては外部からファイル選択ができません。
stm32f4 Discovery + ssd1289 (CoIDE)環境に戻り、タッチパネル操作を行ってみましたが、何ということか! 動かないではありませんか!

・・・はい、stm32f4に戻って原因を調べましょう。






テーマ : 電子工作・電気関係工作
ジャンル : 趣味・実用

コメントの投稿

非公開コメント

No title

もうご存知かもしれませんがねむいさんという方がSSD1289を含めた
100種類以上のLCDに対応したドライバとChaNさんのFatFsを組み合わせた
コードを公開されております。
http://nemuisan.blog.bai.ne.jp/?eid=190873
GCCでビルドできるので何かのヒントになると思います。

No title

>にしさん

ご助言ありがとうございます。
このサイトは以前よりチラチラ見ておりましたが、ARM初心者小生の理解が
乏しいもので、よく見えておりません。

少し気合を入れてみてみようと思います。
プロフィール

haiga

Author:haiga
私のブログへようこそ!
電気オンチが始めた自作オーディオです
2010/3/17 電子工作をプラスしました。

自作オーディオの楽しみ共有のため、私が作ったパーツ提供をしてます。質問や要望を遠慮なくコメント欄に書き込んでください。

FC2カウンター
その日1回目にアクセスいただいた方の総カウントです
最新記事
最新コメント
最新トラックバック
カテゴリ
月別アーカイブ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。