問題タブ [stm8]
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.
c - STM8 ASM は安全に WFE を実行します
低電力実行モードでRAMからcコードを実行しています(したがって、割り込みは処理されません)。このモードは、コード シーケンスによって有効になります。
- RAMにジャンプ
- SIM
- 内部フラッシュと電源レギュレータをオフにし、低速クロック ソース (LSE) に切り替えます。
- WFEモード(低電力待機モード)でいくつかの作業を行います
- 電源レギュレーターとフラッシュをオンにし、クロックソースを復元します
- リム
- ジャンプしてフラッシュ
したがって、正誤表に記載されている WFE 命令は問題ありません。この構成に問題があり、低電力待機モードで CPU ロックが永久に発生する可能性があります。
つまり、次のように分解されます。
タイマーからのイベントには確率的な性質があり、このコードは WFE 命令が実行された後に発生することを保証しません。
- BTJT 命令は 2 サイクルで実行され、長さは 5 です。
- 「フェッチ」状態が数サイクルで実行を一時停止するため、RAM から実行されるコードは連続していない可能性があります
私はマニュアル PM0044 を使用しており、26 ページにはかなりのテーブルが含まれています。
コードの実行が 3 サイクルで停止するケースが 2 つあります。したがって、非同期ウェイクアップ イベントが BTJT 命令と WFE 命令の間で発生しないかどうかはわかりません。
厳密な論理シーケンス (チェック条件 > wfe > ウェイクアップ イベント) を確保する方法はありますか?
can-bus - インターフェイス経由で接続された STM8 ボードを Vector CANOE に認識させるにはどうすればよいですか?
Vector CANoe を使用して表示できる CAN メッセージを送信するように STM8 ボードをプログラムしようとしました。しかし、メッセージは保留状態で、Vector CANoe にハードウェア インターフェイス経由で接続された stm8 ボードを認識させることができません。マイクロコントローラ ボードから送信されたメッセージを CANoe トレース ウィンドウで表示するにはどうすればよいですか? ありがとう。
c - math.h を使用する場合、float を double に型キャストする必要がありますか?
私は STM8 マイクロ コントローラー用の Cosmic C コンパイラーを使用し、float 変数を使用しています。現在使用されているプラットフォームでは、コンパイラは double 型を提供しません。とにかく、double を使用すると float として扱われます。
fabs() などを使用する場合、float を double に型キャストする必要があるのでしょうか? 次のように宣言されていますdouble fabs(double x);
これに関するコンパイラのドキュメントには何も見つかりませんでした。
ただし、型キャストがなくても、警告なしでコンパイルされます。ちなみに、double と float を混同すると、GCC も警告なしでコンパイルされます。
iar - IAR 組み込みワークベンチ。__iar_program_start はどこにありますか?
STM8 アプリケーションのコードには次の行があります。
今、私は検索しましたが、この機能はどこにも見つかりません。これは何ですか、どこにありますか??
ありがとう
debugging - IAR Embedded Workshop のデバッグの問題
維持しなければならないコードを受け取りました。これを行うには、IAR 組み込みワークベンチを使用します。初めてなので、 Getting Started with IAR Embedded Workbenchのようなチュートリアルを見ています。
4.32 分を見ると、緑色の線が2 本あることがわかります。コード領域に 1 つ、逆アセンブリ領域に 1 つ。あなたは一方と他方の間を行くことができます
私の場合は1つしかありません!緑色の線 (逆アセンブル エリア) で、何をしてもコード エリアに移動できません。ブレークポイントも設定できません (設定できますが、プログラムを実行すると無効になります)
これは入門ガイドには記載されていないと思いますので、IAR の経験者に助けを求めています。
なぜこれが起こるのでしょうか?また、プログラムをデバッグするにはどうすればよいでしょうか?
コメントの助けやアイデアをありがとう
c - STM8割り込みシリアル受信
私は STM8 を初めて使用し、IAR Embedded Workbench を使用して STM8S103F3 を使用しようとしています。C を使用して、レジスタを直接使用するのが好きです。14400 ボー、8N2 のシリアルが必要です。ネット上には優れたチュートリアルや例が数多くあるので、UART 送信を取得するのは簡単です。次に、割り込みでUARTを受信させる必要があります。他には何もしません。それが問題だ。iostm8s103f3.h (IAR) によると、0x14 ベクトル UART1_R_IDLE、UART1_R_LBDF、UART1_R_OR、UART1_R_PE、UART1_R_RXNE に 5 つの割り込みがあります。
Silverlight Developer: Registers on the STM8 によると、
ST Microelectronics STM8S.h によると
STM8S リファレンス マニュアル RM0016 によると、データがシフト レジスタから Rx バッファに転送されるときに、最後のサンプリング クロック エッジで RXNE フラグ (Rx バッファが空でない) が設定されます。これは、SPI_DR レジスタからデータを読み取る準備ができていることを示します。Rx バッファが空でない (RXNE) このフラグが設定されている場合、Rx バッファに有効な受信データがあることを示します。このフラグは、SPI_DR が読み取られるとリセットされます。それから私は書いた:
よくありません。継続的に割り込みが発生し、UART1_SR_RXNE が設定されていますが、UART1_DR は空で、UART 受信は発生していません。これにベクトルできる他のすべての割り込みを無効にしましたが、それでもうまくいきません。SPI もこのフラグを設定します。おそらく、UART と SPI を一緒に使用することはできません。このシリアル受信割り込みを有効にする必要があります。助けてください。ありがとうございました
timer - STM8 タイマーが適切なタイミングで作動しない
私はSTM8タイマー(私のコードではなく、それを維持しています)を使用しており、その中でタイマーを使用しています。どうやらクロックは 16MHz erfo 0.0625uS に設定されているようです。タイマーの設定は ARRH=0x03 ARRL=0x20 であるため (0x0320=800) 800 でリセットされます (エルゴ 50us) PSCR は 0 に設定されるため、タイマーはマイクロと同じ周波数になります。
とにかく、これをオシロスコープでチェックすると、良い読み取り値が得られません。タイマー割り込みは、56us、54uS、54uS、52uS、52uS、52us、38us(!!!)、42us(?)、50us、50us....で呼び出されます。
不思議なことに、500uS を与えるので、50uS の 10 倍としてカウントされます。
タイマー割り込みの最初の 8 回は AD 変換が行われているため、その間にも AD 割り込みが呼び出されている可能性があります。
1) これはタイマーの頻度に影響していると思いますか?
2) 38uS で割り込みを発生させることによって、それ自体を「修正」するのはなぜですか??
正確な回答にはコードを調べる必要があることを知っているので、組み込みまたはSTM8の経験に基づいたコメントをいただければ幸いです...
assembly - STM8SF103 アセンブリ - RAM レジスタに即値をロードする
マイクロコントローラ用のアセンブリ言語でプログラムを作成しようとしていstm8sf103
ます。RAM レジスタ ($0 など) に即時の 16 進数値を格納したいのですが、これが機能せず、その理由がわかりません。
エラーが発生します:
as1 : Error 54: Can't match Addressing mode ' ld $0,#5'