問題タブ [stm32l152]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - STM32L152 で GPIO ピンを設定する方法は?
stm32l152rb マイクロプロセッサを搭載した STM32L ディスカバリ ボードを入手しました。ライブラリをまったく使用せずに、アセンブリでそのボードをプログラムしようとしています。これまでのところ、リンカー スクリプトと、.data セクションを RAM にコピーし、bss セクションをゼロにする基本的なルーチンを作成することに成功しました。しかし、それとは別に、私は少し迷っています。
GPIo の構成方法を理解するための小さな実験として、GPIO ポート B のピン 7 に接続された緑色の LED を点灯させるボードのプログラムを作成したいと思います。データシートを読んで、次の 2 つのことを行う必要があると結論付けました。
- GPIO ポート B、ピン 7 を出力ピンとして構成する
- 上記のピンを高く設定します
しかし、この場所では、比喩的に、木を見て森を見ていません。使用可能な複数の IO モードのどれを選択すればよいかわかりません。これらすべての頭字語が私を混乱させます。これを行う方法に関する詳細な情報、指示、および場合によってはアセンブリの例を提供してくれる人に本当に感謝しています。
stm32l152 - STM32L-Discovery の基本的なプログラミングに行き詰まっている
STM32L152R8 マイクロプロセッサを搭載した STM32L-Discovery Board を持っています。私は基本的なことを機能させようとしてかなり行き詰まっています。
ST が提供する例 (消費電流のタッチ センサーと温度センサー) を見てきましたが、ライブラリ、サブプロセス、割り込みが非常に多く、コードを作成するのが非常に難しく、ユーザー フレンドリーではないと思います。理解する。
青色の LED (GPIO PB6) をオンにしようとしましたが、それを行うことができません。
私のコードは正しくコンパイルされますが、ボードには何もしません。「main.c」のコードです。
何か不足していますか?どこかで本当に基本的な例を見つけることができますか?
前もって感謝します!
microcontroller - STM32Lシリーズのマイクロコントローラでフラッシュメモリを上書きする方法
既知のパターン (0xFFFFFFFF または 0x00000000) を書き込み済みのフラッシュ メモリに書き込み、プリミティブ ファイル システムの一部を無効にしようとしています。しかし、STM32FシリーズのようにSTM32Lシリーズではうまくいきません。
私は、フラッシュメモリが 0xFFFFFFFF に消去され、0 が書き込まれる STM32F ファミリのマイクロコントローラに慣れています。メモリを消去したいものは何でも書くことができます。
そして、何の上にも 0x00000000 (すべてゼロ) を書き込むことができます
今はSTM32Lファミリー(低消費電力)を使っていますが、フラッシュメモリが全然違います。0x00000000 に消去し、1 を書き込みます。しかし、すべてのものを確実に書く方法がわかりません。たとえば、消去すると、これができます
しかし、私が試してみると
最終的な答えにはBが含まれていることに注意してください。すべてのものではありません。実際、バイト 0x00 から 0xFF を消去したばかりのメモリ ページに書き込み、その上に 0xFFFFFFFFFF を書き込むと、非常にグリッチな結果が得られます。
これが私が使用している疑似コードです (FlashWrite は STM std ペリフ ライブラリのラッパーです)。毎回ビットをシフトする<<1で8回の書き込みのパターンを書き込もうとしましたが、実際に私が望んでいたもの(すべて1)が得られましたが、これが信頼できるかどうかはわかりません。
memory-management - Stm32 cortex-m3 メモリの再マップ
私は現在 stm32l152 に取り組んでいます。
0x0800 0000
私のブートアップ ベクター テーブルは、有効なリセット ハンドラー ベクターとスタック ポインターがあるflashにあります。残りの例外/割り込みベクトルは、単なる無限ループです。次に、RAM に別のベクター テーブルをセットアップします0x2000 0000
。このベクター テーブルには、必要なすべてのベクターが含まれます。
私の問題は、にマップするメモリの再マップを行った後0x0000 0000
、0x2000 0000
割り込みが発生したときに、MCU がまだ のベクトルを探しているように見えることです0x0800 0000
。フラッシュ テーブルの関連ベクトルを RAM テーブルの関連ベクトルに変更することで、これを確認しました。フラッシュ テーブルの関連ベクトルが無限ループを指している場合、プログラムは無限にループします。また、0x0000 0000
、0x0800 0000
、0x2000 0000
.
次に、mcu の VTOR を変更する別の方法を使用して、ベクトル テーブルを オフセットします0x2000 0000
。これで動作し、MCU は RAM 内のベクトルを見つけます。この方法では、上記のメモリの再マッピングは一切行っていないことに注意してください。
私の質問は: メモリの再マップを使用してベクター テーブルを再配置できますか (VTOR を変更せずに)?
メモリの再マッピングには他にどのような用途がありますか?
ランタイム中にフラッシュに書き込み0x0000 0000
(フラッシュにマッピング0x0800 0000
) してフラッシュを変更できますか?
stm32 - I2C 用の STM32 出力ポートの設定
現在、I2C 経由で通信するための stm32l152 (検出キット) のペアを取得しようとしています。(i2cを自分で実装したいので、STMが提供する標準周辺ライブラリを使用していません..)
私の構成は次のとおりです。
7 ビット アドレッシング モード (デュアル アドレスなし、OAR1 のみ)
100kHzの速度
ACK 有効 (スレーブ上)
ACK 無効 (マスターでは、常に 1 バイトのみがマスター/スレーブ間で転送されるため)
GPIOB (PB10) を SCL として、GPOB (PB11) を SDA として使用して、マスター/スレーブの両方で
ここで奇妙な部分があります。2 つの GPIOB ピンをプッシュプル (プルアップ/ダウンなし) として構成すると、マスターが開始ビット、アドレス バイトを送信するのをオシロスコープで見ることができます。
しかし、私のスレーブは確認応答を返していません。マスターがSR1でADDRビットをアサートしなかったため、これは確かです。スコープにACKが表示されず、スレーブも割り込みに移行しませんでした(スレーブでI2Cイベント割り込みを有効にしました)。
オシロスコープの波形を詳しく見てみると、信号 (SCL、SDA の両方) が完全に 0 ボルトになっていないことがわかりました。スレーブがマスターからアドレス バイトを読み取ることができず、ACK を返さなかったのは、おそらくこれが原因だと推測しています。
そこで、2 つの GPIO ピンをオープン ドレイン (プルアップ/ダウンなし) に構成します。しかし、マスターがスタート ビットを送信できなくなりました。 STARTビットを設定します..しかし、スコープのSDAおよびSCL信号に応答が見られません(両方とも3Vでハイです)。
(各ラインで 10kΩ を使用して、SCL と SDA の両方を 3v にプルしました)。
stm32 - PLL クロック設定
STM32L152RB ボードを使用しており、PLL クロックを使用するようにシステム クロックを構成しようとしていますが、RCC_FLAG_PLLRDY フラグが設定されているため、プログラムが while ループに陥っています。私が間違っていることをさせてください
stm32 - STM32 L1 Discovery ボードを実行できません
新しい STM32 L1 ディスカバリー ボードを持っていますが、壊れているようです。しかし、私は完全にはわかりません。
ボードを USB 経由で Linux マシンに接続すると、ボードは問題なく起動し、デモはベンダーの説明どおりに動作します。
しかし、実際にこのボードに接続することはできません。
ボードが接続されているようで、ST-LINKとDISCOVERYを切り替える大きなジャンパー(CN3)がDISCOVERYに設定されています。しかし、st-link ユーティリティを使用しようとすると、受信します。
また、OpenOCD はボードと通信できません。
ボード上のチップは STM32L152RCT6 です。以前は STM32F0..4 で作業していましたが、そのような問題は一度もありませんでしたが、以前は L シリーズで作業したことがなかったので、これがボードの問題なのか、ここで重要なことをスキップしているのかわかりません。
編集: OpenOCD を使用すると、予期しない動作がわかりました。最初の実行時にエラーが発生します:
2 回目の実行時:
その後、デバイスはシステムから消え、dmesg
メッセージを残します:
アダプターの速度に問題があるのではないかと思いますが、今のところわかりません。
EDIT2: Windows ST リンク ユーティリティを試してみましたが、ボードに接続できず、ボードが「検出エラー」または「接続エラー」を引き起こし、ソフトウェアが SWD 周波数またはモードの変更を提案します。文字通りすべての組み合わせで疲れましたが、どれも機能しません。
EDIT3:これが誰かを助けるなら、ボードは送り返されました、私はそれが実際に壊れているという情報を得て、私は新しいものを手に入れました. 新しいものは期待どおりに完璧に動作します。
stm32 - STM32L151 - デバッガが間違ったアドレスで起動する..時々
STM32L151 マイクロコントローラの作業を始めたところです。最初の命令 (メインではない) でブレークするようにデバッガーをセットアップしましたが、デバッグを開始すると、フラッシュの一部でさえない 0x1ff00b84 でプログラム カウンターが停止します (0x8000000 から開始 -> 0x8010000)。
デバッグセッションをリセットしようとすると(プログラムを再度ダウンロードせずに)、スタートアップファイル(startup_stm32l1xx_md.s)の最初の命令で数回停止し、次回まですべてがスムーズに実行されるため、奇妙になります。デバイスをプログラムして、デバッガを再起動する必要があります。
コンパイラ「GNU Tools ARM Embedded 4.8 2014q2」でCoIDEを使用しています。そして、到着したばかりのカスタム HW で実行しています。STM32 Discovery Board の SWD を使用してチップをプログラムします。
誰かがアイデアを持っていることを願っていますか?