chibiegg日誌

chibiegg’s Diary

  • Home
RSS
Category Archives: 電子工作

stm32f10x_can.c のバグについて

Posted on 2011年11月27日 by chibiegg
No Comments

前回の投稿と打って変わって組込系の話題を。

最近STM32でCANとか使っているのですが、時々送信に失敗してしまうという問題がありました。

たまになので問題ないのですが、気になったので調べてみるとSTMicroが用意しているSTM32F10x standard peripheral libraryのバグでした。バージョンは04/16/2010 のV3.3.0と古いやつですが。

具体的に言うと、現在送信しようとしているメッセージの状態を確認する関数

CAN_TransmitStatus にあります。

ここでは CANxのTSRレジスタのTSS_RQCP0、TSR_TXOK0、およびTSR_TME0ビットの値を見て、

CANTXPENDING(送信中)、CANTXFAILED(失敗)、CANTXOK(成功)を返しています。

が、こんな風にレジスタにアクセスするようなコードになってます。

switch (TransmitMailbox)
{
case (0): state |= (uint8_t)((CANx->TSR & TSR_RQCP0) << 2);
state |= (uint8_t)((CANx->TSR & TSR_TXOK0) >> 0);
state |= (uint8_t)((CANx->TSR & TSR_TME0) >> 26);
break;
case (1): state |= (uint8_t)((CANx->TSR & TSR_RQCP1) >> 6);
state |= (uint8_t)((CANx->TSR & TSR_TXOK1) >> 8);
state |= (uint8_t)((CANx->TSR & TSR_TME1) >> 27);
break;
case (2): state |= (uint8_t)((CANx->TSR & TSR_RQCP2) >> 14);
state |= (uint8_t)((CANx->TSR & TSR_TXOK2) >> 16);
state |= (uint8_t)((CANx->TSR & TSR_TME2) >> 28);
break;
default:
state = CANTXFAILED;
break;
}[/sourcecode]
これでは、レジスタに3回アクセスしてしまっており、アクセスとアクセスの間でレジスタの値が変わってしまうと変なstatusになってしまいます。その結果 default で CANTXFAILED がセットされてしまうというのが送信失敗の原因です(実際にはこの瞬間に成功しているが、失敗したと判断してしまう)。

最も修正量の少ない解決策は簡単で、CANx->TSRの値を一旦変数に入れてやればいいのです。

uint32_t _tsr =  CANx->TSR;
switch (TransmitMailbox)
{
case (0): state |= (uint8_t)((_tsr & TSR_RQCP0) << 2);
state |= (uint8_t)((_tsr & TSR_TXOK0) >> 0);
state |= (uint8_t)((_tsr & TSR_TME0) >> 26);
break;
case (1): state |= (uint8_t)((_tsr & TSR_RQCP1) >> 6);
state |= (uint8_t)((_tsr & TSR_TXOK1) >> 8);
state |= (uint8_t)((_tsr & TSR_TME1) >> 27);
break;
case (2): state |= (uint8_t)((_tsr & TSR_RQCP2) >> 14);
state |= (uint8_t)((_tsr & TSR_TXOK2) >> 16);
state |= (uint8_t)((_tsr & TSR_TME2) >> 28);
break;
default:
state = CANTXFAILED;
break;
}[/sourcecode]
こんな風に。

で、最新のV3.5.0ではちゃんと修正されてました。

  switch (TransmitMailbox)
{
case (CAN_TXMAILBOX_0):
state = CANx->TSR & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0);
break;
case (CAN_TXMAILBOX_1):
state = CANx->TSR & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1);
break;
case (CAN_TXMAILBOX_2):
state = CANx->TSR & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2);
break;
default:
state = CAN_TxStatus_Failed;
break;
}[/sourcecode]
一度でアクセスするようになってます。でも返値変わってて、最新版に置き換えるのは大変そう...

Categories: 日記, 電子工作 | Tags: CAN, STM32, 電子工作

CNCでロボット製作

Posted on 2010年8月6日 by chibiegg
2 Comments

最近全然ブログを更新していませんが、実は大学のプロジェクトではしっかり実験・開発しています。

進捗状況が公開できるものは今日プロジェクトのブログで更新したライントレーサーですが、写真を撮ったのでこっちにも公開します。

合同ロボコン用ロボットの骨格

合同ロボコン用ロボットの骨格

詳しくは大阪大学Robohanの今日の投稿をご覧下さい。

STM32を使う予定でいるのでそっちの研究にも役立つかと思っています。

CNCを購入してから基板がつくれたりかなり便利になってます。

近々別に開発しているシステムも完成するのでそちらも公開できると思います。(こっちは制御・回路中心です)

Categories: 電子工作

NHK大学ロボコン2010 出場要項

Posted on 2010年5月19日 by chibiegg
No Comments

本日クラブにNHKから当日の確認事項が載った出場要項が届きました。

NHKロボコン2010「出場要項」

NHKロボコン2010「出場要項」


大会当日まであと少しという感じがしてきましたが、できるだけ良い結果が残せるようにがんばります。

と、Robohanのブログに書きました。

あとは個人的な話を。
STM32を入手したので明日の昼休みは図書館で今まで構築してきた開発環境の動作確認ができそうです。

アルバに開発を頼まれているいくつかのセンサー情報をSDカードへの記録するロガーの方もすこしずつ実験をしていかないとなぁと。

こっちは以前に試作したGPSロガーを元にすればそんなに大変ではないと予想しています。

では。

Categories: 日記, 電子工作 | Tags: Cortex, STM32, 電子工作

SnowLeopardにSTM32(Cortex-M3)の開発環境を構築

Posted on 2010年5月13日 by chibiegg
4 Comments

図書館で二時間時間を潰さないといけない状況になったので、なにかしようと思います。

そこで、最近無性にSTM32が使いたかったのでとりあえず開発環境でもを用意してみようかということで進めていきます。

今回は以下の二段構えになっています。

  • コンパイル環境の構築
  • 書き込み環境の構築

まず、前者についてはCortex M3開発環境 on Mac OS Xというページを参考にしました。

  • ARM用gccのインストール (Targetがarm-eabiのgcc)

ARM用のgccはSHやH8の時とはちがい、コンパイル済みのdevkitARMを利用します。このページからdevkitARMのOSXバージョンの最新版をダウンロードし、インストールします。

こいつはインストーラが無いので解凍してできたdevkitARMディレクトリを /usr/local/ ディレクトリにコピーしておきます。

そして、PATHを通すために~/.bash_profileファイルに(無ければ新規作成)

export PATH=$PATH:/usr/local/devkitARM/bin

という一行を加えておきます。
  • プロジェクトテンプレートの構築
次にSTM32のプログラムをコンパイルするためのプロジェクトのテンプレート(雛形)を作成します。
このディレクトリにSTMicroが用意してくれているSTM32のためのライブラリファイルや、リンカースクリプト、Makefile等を用意しておきます。新しくプログラムを作るときにはこのディレクトリのコピーを作成し、main.c等のユーザープログラムを書くだけでmakeコマンド一発でコンパイルできるようになります。
たぶんこれは二次配布可能だと思うので、圧縮したファイルを添付しておきます。問題があればコメントください。
STM32_Project.tar
このディレクトリはこのファイルでなくても、Strawberry LinuxのSTM32ボードであるSTBeeのサンプルプログラムでも構いません。
ただし、この場合には付属のMakefileの“arm-none-eabi”となっている所を全て”arm-eabi”に変更する必要があります。
以上でコンパイルまではできるようになりました。
次はDFUを使ってUSB経由で書き込みをするツールを用意します。dfu-utilというのを見つけたのでインストールしたいのですが、何故かコンパイルエラー。
ここで時間が来てしまったのでまた出来次第追記します。
Categories: Mac, 日記, 電子工作 | Tags: ARM, Cortex, Mac, Snow Leopard, STM32, マイコン, 電子工作

マイコン学習キット、基板発注

Posted on 2010年4月8日 by chibiegg
No Comments

本日ATMeaga644Pを使ったマイコン学習キットの基板の試作品を発注しました。

日本時間で15時20分に発注メールをOLIMEXに送信したら、19時40分にPDFの注文書が送られてきました。

たぶん今までで最速!。こんなに早いとうれしいなぁ

Categories: 電子工作

基板到着

Posted on 2009年6月5日 by chibiegg
No Comments

2週間ちょっと前にOLIMEXに発注した基板が到着しました。
OLIMEXを利用するようになってからもう何年か立ちますが、こんなに頼んだのは初めてです。

3パックに包まれてやってきました。
pcb_1

開封し、種類別に分けるとこんな感じ。
pcb_2

 

中身は

DCC関係

  • シグナルデコーダ
  • ポイントデコーダ
  • 赤外線トランスポンダ受信ボード
  • ファンクションデコーダ
  • モーター車用デコーダ
  • LocoUSB rev.2

その他

  • XBee USB変換基板
  • microSD変換基板
  • JTAGデバッガ
  • I2C接続モータードライバ

 

他には後輩が発注したものです。

製作結果は研究ノートに掲載予定です。

Categories: 日記, 電子工作

トランジスタ技術8月号

Posted on 2008年7月11日 by chibiegg
2 Comments

トランジスタ技術2008年8月号
普段はInterface (インターフェース)を定期購読しているのですが、8月号のトラ技にはUSBコントローラ内蔵の78K0マイコンが付録で付いているので購入しました。
使うのはいつのことになるやら…

9月号にはグラフィックLCDなどが載るボードが付属するのでそっちも買わないと…

Categories: 電子工作 | Tags: 78K0, CQ出版, Interface, トランジスタ技術, マイコン
  • テスト

  • 最近の投稿

    • Seagete ST32000542ASのファームウエアアップデート
    • Can you crack it?
    • stm32f10x_can.c のバグについて
    • nginxでSSL/TLSを使う
    • nginxでプロキシ&キャッシュサーバー
  • 最近のコメント

    • nginxでプロキシ&キャッシュサーバー に chibiegg より
    • nginxでプロキシ&キャッシュサーバー に ななし より
    • WordPressの自動アップデートエラーについて に Wordpressの自動アップグレード | Monai Hiromu より
    • iTunesの曲に自動でふりがな登録 に 黒生鉄心 より
    • WordPressから外部SMTPを使う に Wordpressから外部に通知メールを送る | inashiro's blog より
  • アーカイブ

    • 2012年1月
    • 2011年12月
    • 2011年11月
    • 2010年12月
    • 2010年9月
    • 2010年8月
    • 2010年7月
    • 2010年5月
    • 2010年4月
    • 2010年3月
    • 2010年2月
    • 2010年1月
    • 2009年11月
    • 2009年8月
    • 2009年7月
    • 2009年6月
    • 2009年5月
    • 2009年4月
    • 2009年2月
    • 2009年1月
    • 2008年12月
    • 2008年8月
    • 2008年7月
    • 2008年6月
    • 2008年5月
    • 2008年3月
    • 2008年2月
    • 2008年1月
    • 2007年12月
    • 2007年11月
  • カテゴリー

    • Mac
    • Webサーバー
    • Windowsプログラミング
    • サーバー管理
    • ソーラー発電
    • プログラミング
    • 写真
    • 日記
    • 未分類
    • 雑記
    • 電子工作
  • メタ情報

    • ログイン
    • 投稿の RSS
    • コメントの RSS
    • WordPress.org
© chibiegg日誌. Proudly Powered by WordPress | Nest Theme by YChong