タグ付けされた質問 「stm32」

STM32は、STMicroelectronicsによる3番目のARMファミリです。ARM9Eコアをベースにした以前のSTR9ファミリ、およびARM7TDMIコアをベースにしたSTR7ファミリに続きます。STM32は、ARM Cortex-Mファミリーのコアに基づいています。

2
STM32F2:商用IDEを使用しないMakefile、リンカースクリプト、起動ファイルの組み合わせ
私はSTM32F2で働いている(具体的には、開発ボード上のSTM32F217IGH6)約2ヶ月間。はるかに私の最大の問題はメイクファイル、リンカスクリプトと起動ファイルを含む「セットアップ」、としなければなりませんでした。 特に、割り込みベクターテーブルを適切に設定できず、割り込みハンドラーを呼び出すことができませんでした。STは、商用IDEに合わせた例を提供しています。代わりに、私は(JTAG経由で画像をロードし、OpenOCD)GCCツールチェーンの自由YAGARTOの再コンパイルを使用しています。 呼び出される割り込みハンドラ用に設定されている非商用のIDEに適したメイクファイル、リンカスクリプトと起動ファイルの組み合わせを含むが例の私のボードのためのプロジェクト(またはそれの近いいとこ)がありますか?
16 c  stm32  gcc 

5
独立したウォッチドッグ(IWDG)またはウィンドウウォッチドッグ(WWDG)
私はまだこの質問の答えを探しています: stm32 MCUには完全なウォッチドッグ(つまり、ウィンドウウォッチドッグ(WWDG))があるのに、単純なウォッチドッグ(独立したウォッチドッグ(IWDG))があるのはなぜですか? 私が言ったこのページを見つけました: ST Microelectronicsには、Cortex-M3デバイスのラインがあります。M3はローエンドの組み込みデバイスで非常に人気があり、STのSTM32Fはこれらの部品の代表です(ただし、WDTはSTアドオンであり、他のベンダーの実装を必ずしも反映していません)。STM32Fには2つの異なる保護メカニズムがあります。「独立したウォッチドッグ」は、使いやすさ以外の目的はほとんどない、かなりバニラなデザインです。しかし、彼らのWindow Watchdogはより強力な保護を提供します。カウントダウンタイマーの期限が切れると、リセットが生成されます。これは、タイマーをリロードすることによって妨げられる可能性があります。特別なものはありません。ただし、リロードが速すぎると、システムもリセットされます。この場合、「速すぎる」は、制御レジスタにプログラムする値によって決定されます。 別のクールな機能:リセットの直前に割り込みを生成できます。割り込みを捕捉するためのコードを少し書くと、たとえば、システムを安全な状態にしたり、デバッグ目的でデータのスナップショットを作成したりするためのアクションを実行できます。STは、ISRを使用してウォッチドッグをリロードすることを推奨しています。つまり、リセットが発生しないようにドッグをキックします。彼らのアドバイスを受け入れないでください。プログラムがクラッシュした場合、割り込みハンドラは正常に機能し続ける可能性があります。また、ISRを使用してWDTをリロードすると、ウィンドウウォッチドッグの理由全体が無効になります。 そしてこれ: STMicroelectronicsのSTM32F4 Cortex™-M4 CPUの新しいシリーズには、2つの独立したウォッチドッグがあります。独自の内部RCオシレーターから実行します。つまり、すべての種類のものがCPU内で崩壊する可能性があり、WDTは引き続き起動します。また、「ウィンドウウォッチドッグ」(WWDT)もあります。これは、コードを頻繁にくすぐる必要がありますが、あまり頻繁ではありません。これは、保護メカニズムにランダムに書き込むクラッシュコードを保証する非常に効果的な方法で、リセットがアサートされる少し前にWWDTが割り込みを生成できます。 さて、リファレンスマニュアルを見てみましょう: STM32F10xxxには、高度な安全レベル、タイミング精度、および使用の柔軟性の組み合わせを提供する2つのウォッチドッグ周辺機器が組み込まれています。両方のウォッチドッグ周辺機器(独立およびウィンドウ)は、ソフトウェア障害による誤動作を検出および解決し、カウンターが指定されたタイムアウト値に達したときにシステムリセットまたは割り込み(ウィンドウウォッチドッグのみ)をトリガーします。独立したウォッチドッグ(IWDG)は、専用の低速クロック(LSI)によってクロックが供給されるため、メインクロックに障害が発生してもアクティブのままになります。ウィンドウウォッチドッグ(WWDG)クロックは、APB1クロックから事前にスケーリングされており、異常に遅いまたは早いアプリケーション動作を検出するようにプログラムできる構成可能なタイムウィンドウを備えています。IWDGは、ウォッチドッグをメインアプリケーションの外部で完全に独立したプロセスとして実行する必要があるアプリケーションに最適です。ただし、タイミング精度の制約は低くなります。WWDGは、ウォッチドッグが正確なタイミングウィンドウ内で反応する必要があるアプリケーションに最適です。 ウィンドウウォッチドッグは、通常外部干渉または予期しない論理条件によって生成されるソフトウェア障害の発生を検出するために使用され、アプリケーションプログラムが通常のシーケンスを放棄する原因となります。ウォッチドッグ回路は、プログラムがT6ビットがクリアされる前にダウンカウンタの内容を更新しない限り、プログラムされた期間の終了時にMCUリセットを生成します。MCUリセットは、ダウンカウンタがウィンドウレジスタ値に達する前に(制御レジスタ内の)7ビットダウンカウンタ値がリフレッシュされた場合にも生成されます。これは、限られたウィンドウでカウンターを更新する必要があることを意味します。 あなたが見ることができるように、それらのいずれも、なぜ 2つの番犬がいると言っていません。両方のウォッチドッグの違いを尋ねると、上記で見ることができるすべての機能をカウントし、両方を比較したい場合は、明らかにウィンドウウォッチドッグ(WWDG)が勝者になります!次に、なぜ2つのウォッチドッグがありますか? IWDGをいつ使用し、いつWWDGを使用する必要があるかを知りたいですか? そして、なぜ彼らはこの名前で2番目の時計を呼び出すのですか?> "ウィンドウウォッチドッグ"と言う理由はありますか?

3
STM32(ARM Cortex M3)の未使用ピンのデフォルト設定に関する推奨事項-プルアップ/プルダウン?
現在、STM32マイクロコントローラファミリのさまざまなバリアントを使用しています。次のことを知りたい: 1)プルアップまたはプルダウンの両方を選択するオプションがある場合、一般的なマイクロコントローラーのピンの推奨デフォルト設定は何ですか?どちらか一方と一緒に行くことの長所と短所は何ですか?(入力としてデフォルトで設定すると仮定します) 2)特に、STM32マイクロコントローラファミリの未使用ピンをどうするか知りたいです。ピンをフロートさせたままにしないことは明らかです(データシートには、:()と書かれていますが、プルアップで入力するか、プルダウンで入力するように設定する必要がありますか?特に、 ESDの影響を受けにくい設定を選択し、可能な場合は消費電力を最小限に抑えます。 3)クリティカルなピンについては、ファームウェアを使用してピンを正しいデフォルト状態に正しく設定する必要がありますか、それとも外部ハードウェア(外部プルアップまたはプルダウンを接続する)に責任がありますか?外部抵抗に選択された値が内部プルアップまたはプルダウンよりも大きい場合、ファームウェアの設定は重要ではありません。 上記を行うために私が見ることができるプロは、マイクロが何らかの理由(障害のあるハードウェアなど)で適切に初期化されない場合、ピンを正しく設定するためにファームウェアに依存していないということです。 私が見る欠点は、これを行うにはより多くの費用がかかるということです。 上記に当てることができる光は本当にありがたいです。 ありがとう。

7
STM32およびST-LINK-プログラミングが成功した後にMCUに接続できない
STM32F7-45VGT6を使用して独自のボードを構築しました。ST-LINK v2(元のバージョンではありません)で正常にプログラムしましたが、MCUに接続することもできません。 STとSWDインターフェースからST-Linkユーティリティを使用しています。SWDピンを出力として使用していて、コードでGPIO出力として設定している場合もあります。それは本当ですか? それでも、リセットピンをGNDに接続し、ST-Linkユーティリティで[リセットで接続]オプションを設定しましたが、機能しません...どうすればよいですか? インターネットでBOOT0ピンの使用について何かを見つけましたが、正確にはわかりません...

4
内部発振器がはるかに高速であることを考えると、このMCUに外部水晶を使用する必要があるのはいつですか?
私はこのMCUを見ていて、外部の水晶を使用するのが理にかなっているのか疑問に思っていました。 データシートpg1から抽出 *クロック管理 – 4〜32 MHz水晶発振器 –キャリブレーション付きRTC用32 kHz発振器– x6 PLLオプション付き内部8 MHz RC –内部40 kHz RC発振器 – extに基づいた自動トリミングを備えた48 MHzの内部発振器。同期* 内部発振器は最大48Mhzです。外部クリスタルは4〜32 Mhzです。外部クリスタルはお金がかかり、スペースを占有するので、内部クリスタルが48Mhzより速いときに、なぜ外部クリスタルを使用するのでしょうか?いつ外部クリスタルを使用する必要がありますか?

1
I2C STM32F0 HALライブラリを使用したレジスターのアドレス指定
私はSTMのCUBEおよびHAL_librariesを使用するのが非常に初めてです。32ピンのSTM32F0マイクロコントローラを使用しています。I2Cの回路図は正しいです。ここで少し助けが必要です。 I2C通信を使用する静電容量センサー(FDC1004)があります。データを読み取るには、これらのレジスタに書き込む必要があります。 STARTリクエストフォームマスターをスレーブに正しく送信するにはどうすればよいですか(スレーブアドレスはA0)。 ポインタを0x0Cレジスタに設定する方法は? データシートでは、(レジスタ0x0C:bit [7:4])から1を参照しています。)どうすればよいですか?そして最後に、同じレジスタから読み取る方法は? さらに、DONE_xフィールド(レジスタ0x0C:bits [3:0])を読み取ってから、それを読み取る必要がありますか? しかし、私が適切なレジスタに対応しているかどうかはわかりません!センサーからデータが返されないからです! これが私のコードです: int I2Ccomm () { HAL_I2C_Master_Transmit(&hi2c1,0xA1,0x0C, 10, 100); //start bit and pointer to register HAL_Delay(50); HAL_I2C_Master_Transmit(&hi2c1,0xA1,0x054, 10, 100); // setting the register HAL_Delay(50); HAL_I2C_Master_Receive(&hi2c1, 0xA0, 0x0C, 10, 100); //read from this register HAL_Delay(50); HAL_I2C_Master_Receive(&hi2c1, 0xA0, 0x02, 10, 100); //read data from …

1
デカップリングコンデンサに関するSTM32データシートの理解
STがSTM32F030CCのキャップをデカップリングするために推奨するものを理解しようとしています。 データシートの図は、Vdd / Vssペアの「2x100 nF」キャップを示しています。これは、Vdd / Vssペアごとに2つの並列100nFキャップを意味しますか?または、必要な100nFキャップの総数を参照していますか?つまり、Vdd / Vssのペアが2つある場合、Vdd / Vssのペアごとに1100nFのキャップで、合計2100nFのキャップですか? STM32F030データシート

4
STM32 MCUから高速パフォーマンスを取得する
私はSTM32F303VC ディスカバリーキットを使用していますが、そのパフォーマンスに少し困惑しています。システムに慣れるために、このMCUのビットバンギング速度をテストするための非常に単純なプログラムを作成しました。コードは次のように分類できます。 HSIクロック(8 MHz)がオンになっています。 PLLは16のプリスケーラーで開始され、HSI / 2 * 16 = 64 MHzを達成します。 PLLはSYSCLKとして指定されています。 SYSCLKはMCOピン(PA8)で監視され、ピンの1つ(PE10)は無限ループで常にトグルされます。 このプログラムのソースコードを以下に示します。 #include "stm32f3xx.h" int main(void) { // Initialize the HSI: RCC->CR |= RCC_CR_HSION; while(!(RCC->CR&RCC_CR_HSIRDY)); // Initialize the LSI: // RCC->CSR |= RCC_CSR_LSION; // while(!(RCC->CSR & RCC_CSR_LSIRDY)); // PLL configuration: RCC->CFGR &= ~RCC_CFGR_PLLSRC; // HSI / 2 …

5
内部プルアップ/ダウン抵抗を使用する際の考慮事項
STM32マイクロコントローラーを使用しています。これらのマイクロコントローラーには、入力ピンをプルアップまたはプルダウンとして設定するオプションがあります。 以前は必要に応じて外部のプルアップまたはプルダウン抵抗を使用していましたが、今では外部コンポーネントを廃止してマイクロコントローラー自体のプルダウン機能を使用できるかどうか疑問に思っています。 それは良いことでしょうか? 特別な予防措置を講じる必要がある、またはこの機能をまったく使用しない使用事例がありますか?

4
STM32のエンディアンの問題
arm gcc(CooCox)を使用してSTM32F4discoveryをプログラムしていますが、エンディアンの問題と格闘しています。 SPIを介して24ビットADCでサンプリングしています。3バイトが入ってくるので、MSBを最初に、それらを共用体にロードして、少しでも使いやすくすることを考えました(とにかく希望!)。 typedef union { int32_t spilong; uint8_t spibytes [4]; uint16_t spihalfwords [2];} spidata; spidata analogin0; spi読み取りを使用してデータをanalogin0.spibytes [0]-[2]にロードし、[0]をMSBにしてから、USARTを介して8ビットずつメガボーで吐き出します。問題はありません。 問題は、データを12ビットDACに渡そうとしたときに始まりました。このSPI DACは、MSBで始まる4ビットのプレフィックスとそれに続く12ビットのデータで構成される16ビットワードを必要とします。 最初の試みは、ADCから与えられた2の補数を変換して、analogin0.spihalfwords [0]を0x8000とxor-ingし、結果を下位12ビットにシフトし、算術的にプレフィックスを追加することでした。 analogin0.spibytes [0] = 0xFFおよびanalogin0.spibytes [1] = 0xB5の場合、analogin0.halfwords [0]は0xFFB5ではなく0xB5FFに等しかったことに気付くまで、非常にイライラします。 これに気づいた後、算術演算とハーフワードの使用を停止し、ビット単位のロジックとバイトに固執しました uint16_t temp=0; . . . // work on top 16 bits temp= (uint16_t)(analogin0.spibytes[0])<<8|(uint16_t)(analogin0.spibytes[1]); temp=temp^0x8000; // convert twos complement …
11 c  stm32  cortex-m  gcc 

7
I2Cスレーブアドレスが確認されない(時々)
I2Cを使用して、リモート接続されたFRAM(RamtronのFM24C04)と通信しようとしています。このメモリはボードに組み込まれており、システムにいつでもシステムから着脱できます(メモリを取り外す前に通信は適切に終了します)。 問題は次のとおりです。ちょうどFRAMが含まれているカードを挿入した後、時々、それはアドレスを認識しません。 信号測定 信号を測定して何が起こっているのかを確認しましたが、タイミングはどちらの場合も(正常に機能していても機能していなくても)良いようです。 正しいI2C通信(3バイトの読み取り): I2C FRAMアドレスが確認されていません(スレーブアドレスは正しく送信されています): この問題を解決するために既に行われたアクション(成功なし) 電源シーケンスを確実に順守するために、FRAMが埋め込まれたカードが挿入された後に追加される遅延。 I2Cは、確認応答しないスレーブアドレスの検出後に生成を停止します I2Cバス構成 1つのマスター(STのSTM32F205マイクロコントローラー) 3つのスレーブ(MicrochipのEEPROM 24AA1025、Maxim ICのRTC DS1339C、およびRamtronのリモートFRAM FM24C04 1つのI2Cレベルシフター(マキシムICのMAX3373E)を使用して、マスターとFRAM間の通信が可能 バス周波数を100 kHzに設定 編集済み(2013-04-17) まず、コメントありがとうございます。 たくさんの提案があるので、これが私が行った調査の説明です。 回路図 次の図は、I2Cバスの簡略図を示しています。 I2C_SDAおよびI2C_SCL信号はマイクロコントローラーに直接接続され、FRAM_SDAおよびFRAM_SCL信号はFRAMに接続されます。FRAMに接続されたSDAおよびSCL信号は、MurataのBLM18フェライトを使用してフィルタリングされることに注意してください。 FRAMは次のように接続されます。 NC(ピン1)->未接続 A1(ピン2)-> GND A2(ピン3)-> GND VSS(ピン4)-> GND SDA(ピン5)-> FRAM_SDA SCL(ピン6)-> FRAM_SCL WP(ピン7)-> GND(書き込み保護なし) VDD(ピン8)-> + 5V FRAMカードの説明 このカードは、FRAMのみを組み込んだ「ISAのような」カードです。 調査 周波数を遅くする SCL周波数を50kHzと10kHzに設定してテストを実行しました。SCL信号をオシロスコープで測定して、期待した周波数であることを確認しました。 これらの変更は問題を解決しませんでした。タイミングを確認したところ、FRAMデータシートの仕様の範囲内でした。 電源シーケンスの確保 …

3
誰もがstm32に使用している無料のIDEは何ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 現在Atmel SAMシリーズを使用しています。選択は簡単でした。IDEはAtmel Studioであり、無料で非常に優れており、以前はAVRの開発に使用していました。私が持っているデバッガーは、AVRにも使用したAtmel ICEで、ARMシリーズもサポートしています。 STM32シリーズが興味深いのは、チップと開発ボードのコストが非常に低いことです。しかし、人々が開発に使用するIDEは何ですか?完全に無料のメインストリームで、必要なときに簡単にヘルプを見つけたり、ツールを最新の状態に保つことができるものに興味があります。GoogleまたはSTのWebサイトで決定的な答えを見つけることができるので、誰かがこのプラットフォームでの開発に既に関与している場合は、データと意見を共有していただければ幸いです。
11 arm  stm32  ide 

1
STM32 CPUがウェイクアップする原因となった瞬間的なスイッチを検出する
編集:この質問は間違っています。stm325105には、ウェイクアップピンが1つしかありません。しかし、他のSTパーツには複数のウェイクアップピンがあるため、指定された回答はそれらに対して有効です。 ウェイクアップ入力に接続された2つの一時的なボタンを持つstm32f105があります。プロセッサがスタンバイモードになります。ボタンのいずれかが押されるか、RTCタイマーが起動すると、CPUが起動します。 問題は、どのウェイクアップ入力がトリガーされたかに応じて、cpuにさまざまな処理を実行させたいことです。よると、5.3.5からST stm32f105xxリファレンスマニュアル、何のレジスタは、我々が覚めてきたことを示すステータス・レジスタを除いて保存されていません(ただし、誰による)と42個のバックアップレジスタ。 スタンバイモードでは、消費電力を最小限に抑えることができます。これは、電圧レギュレータが無効になっているCortex®-M3ディープスリープモードに基づいています。その結果、1.8 Vドメインの電源がオフになります。PLL、HSI発振器、HSE発振器もオフになります。SRAMとレジスタの内容は、バックアップドメインのレジスタとスタンバイ回路を除いて失われます。 スタンバイモードからウェイクアップした後、プログラムの実行はリセット後と同じ方法で再開します(ブートピンのサンプリング、ベクトルリセットのフェッチなど)。電力制御/ステータスレジスタ(PWR_CSR)のSBFステータスフラグは、MCUがスタンバイモードであることを示します。 このSTフォーラムの投稿、「スタンバイからのウェイクアップの起源を特定する方法」、ソフトウェアでトリガーされたウェイクアップを検出できないことを示唆しています。私はそれ以上の啓蒙を与える他の投稿をそこで見つけませんでした。 ソフトウェアまたはハードウェアを使用して、ウェイクアップした後、どのウェイクアップ入力がトリガーされたかを判断するにはどうすればよいですか?

3
Eclipse + GNU ARM + STM32-HALまたはSPL
ARM開発(2年間のAVRの後)から始めて、stm32f4マイクロプロセッサが搭載されたSTM DISCOVERYボードを入手しました。 Keilのコード制限が気に入らず、有料版を入手するお金がないため、Eclipse + ARM gccを使用することにしました。 チュートリアルに従って、gcc ARMツール+ openocd + make utilsなどとともにeclipseをインストールしました。 私の質問は「パッケージ」プラグインについてです。すべての初心者と同様に、新しいSTM HALと古いSPLのどちらを使用するかについて混乱しています。 私の理解では、HALは、Arduinoと同等のアームと呼ばれるレベルまで抽象化を実装しました。一方、SPLは、コーディングを高速化するのに十分な抽象化を提供しますが、チップレベルで処理する必要があります。 これを理解した上で、HALを使用するよりもSPLを使用して物事をよりよく理解したいと思います。 知りたいのは、STMのパッケージを使用すると、暗黙的にHALを使用する必要があるのですか?もしそうなら、私のセットアップでSPLを使用する方法について誰かが私に指摘できますか?
10 arm  stm32  gcc  cortex  hal-library 

3
SDRAM PCBレイアウトの選択
LQFP208パッケージのまったく新しいSTM32F429でプロジェクトに取り組んでいます。 低予算のため、最初のプロトタイプを自分ではんだ付けする必要があります。このパッケージを選択したのは、問題の原因がルーティング/ファームウェアなのか、はんだ付けの問題なのかを自分で確認できるようにするためです。 このプロジェクトには、LCD、カメラ、ULPI、32b SDRAMバスに加えて、その他の低速のインターフェイスが含まれています。 FMC BUSはSDRAMにのみ使用され、プロジェクトに他のメモリは必要ありません。 PCBスタックアップは、標準の4層S-GND-VCC-Sです。 SDRAM / MCUインターフェイスをルーティングするための最良の方法は何かについてアドバイスが必要です。 ここで行うことができる2つの異なるデザインがあります: 左のトレースは非常に短いトレースを使用するのに最適ですが、長さのマッチングのための余地があまり残らないため、短いトレースの伝搬遅延が非常に低いため、実際には必要ありません。LCD / ULPI / CAMERAバスが外部にルーティングされて問題が発生する可能性があります。 正しい方が良いかもしれませんが、トレースは少し長くなりますが、長さが一致する余地が多く、それでも終端処理は必要ありません。LCD / ULPI / CAMERAバスは外部にルーティングされますが、SDRAMバスに多くの点で対応するため、これらのバスのビア数が増加し、レイアウトがさらに複雑になります。 編集: 他のコンポーネントがあるため、両面アセンブリは必須です。 どれを選ぶのか、そしてその理由を説明してください。 EDIT2: PCBにデータを入力した後で左側を選択したので、右側にスペースがあまりありませんでした。 これは予備的な結果です。 レイアウトを改善するためのアドバイスは引き続き受け入れられます。 EDIT3: 追加された電源および接地ビア: ありがとうございました!
10 pcb  stm32  layout  sdram 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.