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

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

3
2つのピンが同じ代替機能を持つように構成されている場合、STM32はどうなりますか?
STM32F051のマニュアルを読むと、2つのピンで同じ代替機能を構成できるように見えます。たとえば、同時に複数のUSART1_TXピンを持つことができます。または、たとえば、2つのUSART_RXピンの問題の多いケースです。この場合、マニュアルには何も書かれていません。これは合法/安全ですか?これは役に立ちましたか?
10 stm32  gpio 


1
STM32F103C8T6ボードから始める方法は?
私はここ数年、8ビットAVR MCUを使用して、生徒と一緒にラインフォロワーロボットを構築しています。オドメトリやセンサーフュージョンなど、CPUを多用する機能を追加したいので、ARM Cortex-M3にステップアップしたいと思います。 要件は次のとおりです。 8つのアナログ入力、 4つのPWM出力、 I 2 C、 2つの直交エンコーダ入力、 シリアルI / O、 ロボットに物理的にアクセスせずにワイヤレスで自己プログラミング。 マルチプラットフォームツールチェーン+ IDE(OS X、Linux、Windows)。 これまでに行った手順は次のとおりです。 このSTM32F103C8ベースのボードを使用しています。このMCUには、ソフトウェアで実装する予定の2 x QEIを含め、必要なものがすべて含まれていると思いますが、これはたまたまハードウェアに実装されているので、非常に優れています。 ボードhttp://eud.dx.com/product/high-quality-cortex-m3-stm32-stm32f103c8t6-development-board-w-swd-interface-844380789 プログラマーhttp://eud.dx.com/product/st-link-v2-programmer-emulator-mini-stlink-downloader-for-stm8-stm32-mcu-development-board-844380733 私はこれに従って私のツールチェーン+ IDEを設定しました: http://www.davidrojas.co.uk/stm32f3discovery-on-mac-os-x-using-eclipse-gcc-arm-and-openocd/ このチップのドキュメントは、私がダウンロードしたいくつかのPDFに散在していることがわかりました。 STM32F103x8データシートhttp://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00161566.pdf リファレンスマニュアルhttp://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf AN2606(メモリブートモード)、PM0075(フラッシュプログラミングマニュアル)、AN3155(シリアルブートローダープロトコル)のような他のいくつかのドキュメント。これはおそらく将来必要になるでしょう。 私はSTM32F10x標準周辺機器ライブラリもダウンロードしましたが、それにより、新しいSTM32CubeF1を入手するよう勧められました。 http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1939/PF257890 http://www.st.com/web/en/catalog/tools/PF260820 最後に、Joseph Yiuによる「The ARM Cortex-M3の決定的なガイド」も入手しました。これは、ボードが到着するのを待っているときに読んでいます。 私の質問は: 控えめに言っても、私はドキュメントに少し圧倒されており、すべてを手に入れたかどうかさえわかりません。たとえば、データシートとリファレンスマニュアルには、直交エンコードされた入力が可能な3つのタイマーがチップにあると記載されています。しかし、タイマーを制御するレジスターのドキュメントが上記のPDFのどこにも見つかりません。何が欠けていますか? (古い?)標準ペリフェラルライブラリ、または(新しい?)キューブのものを使用する必要がありますか?違いは何ですか?どちらのライブラリでも、レジスタを直接操作する必要がなく、推奨される方法であることを理解しています。私は正しいですか? ライブラリのドキュメントはどこにありますか(埋め込まれたdoxygenのコメントに加えて、これはすばらしいのですが、検索可能なhtml / pdfが必要です)。 私はツールチェーンとしてEclipse + GCC ARM + OpenOCDを選択しました。これは、コードサイズやその他の制限なしに3つのメインOSで実行できる唯一のオプションだと考えているためです。他にオプションはありますか?

4
Cortex M3 .bss領域の初期化用のベアメタルスタートアップコード
ここから着想を得て、腕皮質M3のベアメタルスタートアップコードを開発しました。ただし、次の問題が発生します。main.cでunsigned char型など、初期化されていないグローバル変数を宣言するとします。 #include ... unsigned char var; ... int main() { ... } これにより、STM32 f103の.bss領域は、_BSS_START = 0x20000000で始まり、_BSS_END = 0x20000001で終わります。さて、スタートアップコード unsigned int * bss_start_p = &_BSS_START; unsigned int * bss_end_p = &_BSS_END; while(bss_start_p != bss_end_p) { *bss_start_p = 0; bss_start_p++; } .bss領域全体をゼロに初期化しようとします。ただし、そのwhileループ内では、ポインターは4バイトで増加します。したがって、1ステップ後にbss_start_p = 0x20000004なので、無限ループなどにつながるbss_end_pとは常に異なります。 これに対する標準的な解決策はありますか?どういうわけか、.bss領域の次元を4の倍数に「強制」すると思いますか?または、unsigned charへのポインターを使用して.bss領域をウォークスルーする必要がありますか?おそらく次のようなものです: unsigned char * bss_start_p = …

3
ソフトウェア割り込みと機能
MCUを使用して約3年経った後も、ソフトウェア割り込みの使用方法がわかりません。私はSTM32でいくつかのジョブを実行しましたが、ソフトウェア割り込みを使用したことがありません。実際、これは私にとって大きな問題です。 単純な関数を使用してタスクを実行できるのに、ソフトウェア割り込みを使用する必要があるのはなぜですか?ソフトウェア割り込みと関数の違いは何ですか? いつでも好きなときに、関数(ジョブ用に作成したもの)を呼び出すことができます。単純な関数の代わりにソフトウェア割り込みを使用することにはいくつかの利点があるはずです。よくわかりませんが、ソフトウェア割り込みにはメリットがあると思います。ソフトウェア割り込みに優先度を割り当ててから、ソフトウェア割り込みに高い優先度を与えて、ハードウェア割り込みがタスクを壊すのを防ぐことができます。
10 arm  stm32  interrupts 

2
クワッドSPI PCBレイアウト
STM32 MCUでQuad SPI NORフラッシュメモリMT25QL256ABA1EW9-0SITのレイアウトを改善しようとしています。私の問題は、メモリチップのピン配置が非常に不便であることです。信号が隣り合うようにMCU側でピンを交換することに成功しましたが、それでも難しいです。Micron Quad spiレイアウトガイドに従って、私はなんとかしました: 下にあるグランドプレーンを分割しないでください(これは2層PCBです)。 クロック信号を短くし、おそらく最小の曲げで、 信号ルーティングにVIASを使用しない しかし、私はどうにかしてうまくいきませんでした: ストリップラインを計算して、適切なインピーダンスを維持します(実際にはスペースや信号は多くありません) 信号の長さを同じに保ちます。 ここにレイアウトがあります: 画像を拡大すると、メモリチップパッドのネット名を確認できます。このデザインは最大80 Mhzのクロック転送に十分であるとあなたの意見で尋ねたいと思います。比較のために、チップの内側にあるピンクの形状は18 x 8 mmです。GNDポリゴンは、見やすくするために棚に置かれています。何卒よろしくお願いいたします。
10 pcb  stm32  spi  layout  high-speed 

4
HALを使用したSTM32 ADC変換
stm32から「新しい」HALライブラリを使用する方法を学習しようとしています。 単純なADC変換を行おうとすると、1回だけ機能しますが、変換が停止します。変換終了フラグが設定されていないと思います。STM32f429I Discoveryボードを使用していますが、これにはボードにSTM32f429ZIが搭載されています。 私はsprintfが悪い習慣であることを知っており、割り込みでADCを作成する方が良いことを知っています。指摘しないでください。これは質問には関係ありません。ここではHALをテストしています。 では、問題はなぜEOCフラグが設定されていないのか、それを機能させるために何ができるのかということです。HALに関する優れた資料が非常に少ないため、グーグル検索はあまり役に立ちません。 これがコードです: __IO uint16_t ADCValue=0; void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc); int main(void) { char str[15]; /* Various initializations */ HAL_ADC_Start(&hadc1); while (1) { if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK) { ADCValue = HAL_ADC_GetValue(&hadc1); sprintf(str, "%d", ADCValue); BSP_LCD_DisplayStringAt(130,30, (uint8_t*)str, LEFT_MODE); } } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { ADCValue = HAL_ADC_GetValue(&hadc1); } …

4
STM32:タイマー割り込みはすぐに機能します
これは、STM32F429での私のプロジェクトのタイマーのコードです。 //timer initialization void timerInit() { uwPrescalerValue2 = (uint32_t) ((SystemCoreClock / 2) / 100000) - 1; RS485Timer.Instance = TIM5; RS485Timer.Init.Period = 67400000; // high value to notice interrupt even without debugging RS485Timer.Init.Prescaler = 400000; RS485Timer.Init.ClockDivision = 0; RS485Timer.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_Base_Init(&RS485Timer); } void timerReset() { HAL_TIM_Base_Stop_IT(&RS485Timer); HAL_TIM_Base_DeInit(&RS485Timer); HAL_TIM_Base_Init(&RS485Timer); HAL_TIM_Base_Start_IT(&RS485Timer); printf("%d …

1
STM32「USBデバイス」と「USB OTG HS」の違いは何ですか?
最近、MCU検索用にstm32アプリをダウンロードし、たとえばSTM32F429の「USBデバイス」周辺機器に「NO」があり、「USB OTG FS」および「USB OTG HS」に「YES」と表示されていることを発見しました。これは、STM32F429がUSBデバイスとして完全に機能するため、つまり、すべてのライブラリとUSBクラスをサポートするため、驚くべきことです。 他のいくつかのMCUには、「USBデバイス」と記載されています。STM32L052 次に、CubeMXをチェックしてみたところ、USB_Device周辺機器が検索に含まれていることがわかりました(STM32F429にはUSB_Device周辺機器が含まれておらず、USBに関するものはOTGを介して行われます)。 USBデバイスは単にOTGをサポートしていないデバイスを意味するのではないかと思うので、それは非常に簡単な質問かもしれませんが、通常、MCUはOTGを使用します(さらに、ライブラリが1つしかないため、USBで「NO」と表示する理由は不明です)周辺)。googleやCubeMXのドキュメントでそれに関する情報を見つけることができませんでした。 USB OTG HSはライブラリで問題なく動作するようなので、あまり心配していませんが、用語については疑問に思っています。 この質問にはおそらくSTフォーラムの方が適していると思いますが、そこにあるトピックの多くは、2年経っても回答がない、または回答がないのです。:) ありがとう。

3
ST-LINKユーティリティを使用してRTCを現在の時刻に構成する
私がやっていたこと 私はSTM32マイクロコントローラーを使用しています。私のプロジェクトでは、1日の特定の時間(たとえば、午前11時と午後2時)にデータを送信できるようにする必要があります。マイクロコントローラは、これを実現する前に何時かを知る必要があります。残念ながら、私は一方向の通信しか持っていないため、ネットワークに現在の時刻を要求することはできません。 したがって、プログラミングが完了した直後に現在の時刻を設定したいと思います。次のコマンドを使用して、ST-LINKユーティリティのコマンドラインインターフェイス(ST-LINK_CLI)を使用してフラッシュにデータを書き込むことができることを知っていました。 ST-LINK_CLI.exe -w32 <Address> <data> -Rst 私は、現在コードで使用されていないアドレスにUnixタイムスタンプを書き込む簡単なテストスクリプトを作成しました。 タイムスタンプを読み取る関数を記述し、それを使用してRTC時間を設定しようとしていました。ST-LINKユーティリティユーザーマニュアルで以下を読むまで: -w32は、フラッシュメモリ、OTP、SRAMおよびR / Wレジスタへの書き込みをサポートします。 マニュアルにR / Wレジスタへの書き込みがサポートされていると記載されている場合、これはRTCレジスタに直接アクセスして設定できることを意味しますか?試しましたが、これらのレジスタに書き込むことができません。 マイクロコントローラーで処理するために特定の関数を記述する必要がなくなるため、この方法を使用することをお勧めします。これは、コードを更新する必要がなく、現在使用しているすべてのマイクロコントローラーのRTC時間を設定できることを意味します。 私がやろうとしていたこと RTCレジスタを設定するために、STMリファレンスマニュアルで説明されているように、次の手順を実行しようとしました。 PWR_CRレジスタのDPBビットを設定する RTC_WPRレジスタに0xCAを書き込む RTC_WPRレジスタに0x53を書き込む RTC_ISRレジスタのINITビットを設定してRTCを停止する RTC_PRERレジスタに書き込んで1Hzクロックを選択します RTC_TRレジスタに書き込むことで現在時刻をロードする RTC_DRレジスタに書き込むことで現在の日付をロードする RTC_ISRレジスタのINITビットをリセットしてRTCを開始する レジスターにアクセスするために、以下のアドレスを使用しました。 PWR_CR:0x4000 7000 RTC_WPR:0x4000 2824 RTC_ISR:0x4000 280C RTC_PRER:0x4000 2810 RTC_TR:0x4000 2800 RTC_DR:0x4000 2804 何が悪かったのか これらのレジスタのいずれにも書き込むことができません。ST-LINKユーティリティを使用すると、次のメッセージが表示されます。 メモリの書き込み中にエラーが発生しました! ST-LINK_CLIの使用: 0x40007000に0x00000100を書き込んでいます...エラー! これらのレジスタを読み取ることは問題ありませんが、ST-LINKユーティリティまたはそのコマンドラインインターフェイスを使用してそれらに書き込むことはできません。 質問 ST-LINKユーティリティを使用してR / Wレジスタに書き込む方法を教えてください。 …
9 stm32  rtc 

4
rand()関数とRNG(乱数ジェネレータ)ペリフェラルの違いは何ですか?
STM32F4XXXX MCUのRNG(Random Number Generator)ペリフェラルに不思議です。見て、このリファレンスマニュアル(ページ748)。一方、stdlibライブラリには、同じタスクを実行するrand()関数があります。今私は2つの質問があります: rand()関数とRNG(乱数ジェネレータ)ペリフェラルの違い(利点と欠点)は何ですか? この部分を見てください: これら両方のオプション(特に2番目のオプション)について説明してください。

3
STM32:ソフトウェアリセットの実行
STM32F2のソフトウェアリセットを実行しようとしています。(リファレンスマニュアルはこちらから入手できます。)リファレンスマニュアルの関連ページ(80ページ)には、ほとんど情報がありません。基本的に、のSYSRESETREQビットをApplication Interrupt and Reset Control Register設定する必要があります。 今、このページではそれが変更できるように説明しSYSRESETREQ、具体的な「キー」がに書き込む必要VECTKEYビット。 どちらのドキュメントも、これApplication Interrupt and Reset Control Registerがどこにあるかを説明していません。そのアドレスは何ですか、またどのようにアクセスできますか?
9 stm32  reset 

2
MCUレジスタの論理的に関連するビットフィールドが、しばしば別々の場所にあるのはなぜですか?
この質問にすでに回答している場合はご容赦ください。しかし、このページでも、より広いインターネットでも、回答を見つけることができませんでした。 私は経験豊富な開発者であり、低レベルのプログラミングに関してある程度の知識がありますが、組み込み開発は比較的新しいです。私は、STM32F746ZG MCUを特徴とするST-NUCLEO144ボードを使用して、組み込みシステムの開発を教えてきました。私には自明ではないように見える1つの質問は、レジスタ内の論理的に関連するビットフィールドが異なる場所にある可能性があるということです。 1つの例は、USART_CR1STM32746ZG のレジスタです。M0そしてM1ビットフィールド一緒にUSART TX / RXの合成2ビット値の語長制御0b00、指定する8ビットの0b01こと以外はこれは、すべての非常に簡単であるなど、指定9ビットのM0ビット12にあり、M1ビットであります28 ...これはなぜですか? これは、以前に予約されていたスペースに新機能が挿入されたなど、レガシーデザインの理由によるものですか?それは私が考慮していないのは、チップ設計に関連する理由のためですか、それとも私には見られないより大きな目的がありますか? 明らかに、これはビットマスキングで克服するのはかなり簡単ですが、私は興味があります。

1
カスタムSTM32ボードをプログラムできない
シンプルなSTM32ボードを設計しました。以下は、回路図とPCBレイアウトの写真です。 回路図: PCBレイアウト: VDDが強調表示されたPCBレイアウト: GNDが強調表示されたPCBレイアウト: 私の質問に関連するこのデザインの部分だけが上の写真に示されています。 私の問題は、次のとおりです。STM32ディスカバリーボードの組み込みST-Linkを使用してこのカスタムボードをプログラミングしようとしましたが、まだ成功していません。PC上のST-Linkユーティリティアプリケーションはプログラマを認識できますが、ターゲットMCUを検出できません。表示されたエラーメッセージは、「ターゲットが接続されていません」と「ST-Link USB通信エラー」でした。 ここに私の問題に関するいくつかの関連する事実があります: STM32 Discovery Boardは正常に動作します。組み込みのST-Linkを使用して、オンボードのSTM32 MCUをプログラムできます。これで結構です。 STM32 MCUは、カスタムボードに正しい向きではんだ付けされています。これを2回確認しました。 VDDとSWDのトレースを確認しました。それらはよく接続されます(はんだ付けの問題はありません)。Boot0ピンは0Vです。NRSTピンは3.3Vです。 SWDケーブルは短く、長さはわずか7〜8 cmです。 カスタムボードのSTM32は、ディスカバリーボードのSTM32と同じタイプです。 Discoveryボードを使用して外部STM32 MCUをプログラムする方法について、STM32 Discovery Boardのマニュアルの指示に従いました。具体的には、2つのCN3ジャンパーを取り外し、次の表のようにボードを接続しました。 また、ディスカバリーボードのはんだブリッジSB11を取り外しました(これにより、ピンNRSTが正しく機能するようになりました)。 ST-LinkユーティリティアプリとKeilの両方を試しました。私が受け取ったエラーメッセージは同じです。 最初は上の表(SWO)のピン6を接続しませんでした。私の知る限り、それは必要ないからです。しかしその後も接続しましたが、うまくいきませんでした。 また、NRSTピンからGNDに100nFのキャップを追加し、次にこのピンからVDDに100kのプルアップ抵抗を追加しました。問題はまだ残っています。 また、ST-Linkユーティリティプログラムの「リセットして接続」モードを使用しようとしました。運もない。 デザインに問題があるのではないかと思いますが、よくわかりません。問題の解決を手伝ってください。 どうもありがとうございました :)
9 stm32  swd  custom 

2
STM32F4キューブHAL UART。バグですか、何か不足していますか?
割り込みベースのUART IOを使用しています(DMAなし)。 HAL_UART_Transmit_IT関数はレジスタのEIEビットを設定しCR3ます。STM32F407データシート(および実際の動作)によると、これはマルチバッファーモード(DMARビットが設定されている場合)でのみ割り込みを生成します。EIEフレームエラー(FE)、オーバーランエラー(ORE)、ノイズエラー(NE)の割り込み生成を有効にします。このエラーは、私が理解しているように、受信のみを目的としています。 HAL_UART_IRQHandler機能の一部: tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE); tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR); /* UART Over-Run interrupt occurred ----------------------------------------*/ if((tmp1 != RESET) && (tmp2 != RESET)) { __HAL_UART_CLEAR_OREFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_ORE; } if(huart->ErrorCode != HAL_UART_ERROR_NONE) { /* Set the UART state ready to be able to start again the process */ …

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