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

5
CMSIS vs HAL vs標準周辺機器ライブラリ
そこで、PICからARMに切り替えて、STM32F4ディスカバリーボードを購入しました。これまでのところ、それをプログラムするには、メモリ内のすべてのレジスタに直接アクセスできること(明らかな方法)と、生活を楽にするために使用できる3つのメインライブラリがあることを理解しています。さて、私の質問は、これら3つ(CMSIS、HAL、Std Peripherals Lib)のどれが最も低レベルの1つですか?すなわち。オーバーヘッドの少ないもの。私の目標はコントローラーの内部の仕組みを学び、私の生活を楽にすることではないので(少しだけ)、アセンブリを使用せずにこれらのどれがコアに近いかを知りたいと思います。
29 arm  stm32  stm32f4  cmsis 

3
STM32F4およびHAL
だから私はSTM32F407(私はARMの初心者)でしばらく実験しており、STがStandard Peripherals Librariesを廃止したように思われるため、HALライブラリを使用して簡単なアプリを書くことにしました。私の質問は、HALのポイントは何ですか?StdPeriphは仕事をしていませんでしたか?なぜ彼らはHALのためにそれを中止するのですか?私には、HALは完全に混乱しているように見えます。 ドキュメントはAWFULです。少なくともStdPeriphについては、必要なものを簡単に見つけることができるように十分に整理された完全なリファレンスがあります(http://stm32.kosyak.info/doc/)。HALには、一見ランダムな構造の安っぽいPDF(http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf)があります。周辺機器などのセクションを読んでも、構成して適切にカスタマイズするための要件を理解できないようです。参照というより、物を忘れたくない人からの個人的なメモのように見えます。 CubeMXを使用してGPIOを初期化し、周辺機器を構成できることは知っていますが、私の目標は自分でそれを行うことです。私は何か間違っていますか?私を混乱させるのはARM初心者ですか?または利用可能なドキュメントは悪いですか?
23 arm  stm32  stm32f4 

6
STM32でprintf関数を使用するにはどうすればよいですか?
printf関数を使用してシリアルポートに印刷する方法を見つけようとしています。 私の現在のセットアップは、STM32CubeMXで生成されたコードと、STM32F407ディスカバリーボードを備えたSystemWorkbench32 です。 stdio.hでは、printfプロトタイプが次のように定義されていることがわかります。 int _EXFUN(printf, (const char *__restrict, ...) _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); どういう意味ですか?この関数定義の正確な場所はどこですか?この種の関数を使用して出力する方法を見つける一般的なポイントは何ですか?

1
Stm32イベントと割り込み
私はstm32、特にstm32f4ディスカバリーボードで割り込みの研究を始めました。ボタンを押して割り込みを開始し、もう一度押して停止する必要があるこの例を見つけました。 この行では、EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interruptで、割り込みモードまたはイベントモードを選択する必要があります。イベントモードに変更しましたが、動作しないようです。そのため、ハンドラーは割り込みのみで実行されるという結論に達しました。 イベントが発生したときにコードを実行できない場合、なぜstm32でイベントを使用するのですか? コードは次のとおりです。 #include "stm32f4xx.h" #include "stm32f4xx_syscfg.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_exti.h" #include "misc.h" EXTI_InitTypeDef EXTI_InitStructure; void EXTILine0_Config(void); void LEDInit(void); void ExtInt(void) { LEDInit(); /* Configure EXTI Line0 (connected to PA0 pin) in interrupt mode */ EXTILine0_Config(); /* Generate software interrupt: simulate a rising edge applied …


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); } …

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年経っても回答がない、または回答がないのです。:) ありがとう。

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 */ …

1
STM32F4ブートの概念とベクターテーブルの再配置
STM32F4マイクロコントローラーの起動プロセスで理解できないことがいくつかあります。 私の理解は次のとおりです。 ARMのCortex-M4のブーツは、スタックポインタの初期化値との割り込みベクタを期待0x00000000 + SCB->VTORに対し、SCB->VTORリセット時にクリアされます。 その場所にはメモリがありません。フラッシュメモリは0x08000000、SRAMはから始まり0x20000000ます。 ブートを可能にするために、µCはフラッシュまたはSRAMメモリ範囲をにマップできます0x00000000。マップされるメモリ範囲は、ブートピンの状態によって定義されます。 私の質問: STM32F4リファレンスマニュアルの69ページで デバイスがSRAMから起動する場合、アプリケーションの初期化コードで、NVIC例外テーブルとオフセットレジスタを使用して、SRAMのベクターテーブルを再配置する必要があります。 ?私の見解では、メモリ領域全体がとにかくエイリアスされているため、これは必要ありません。興味深いことに、これはフラッシュ領域が0x0スペースに再マップされる場合は必要ないようです。 SRAMからの起動の唯一の用途は、開発中のフラッシュの書き込みサイクルを減らすことだと私が考えることができます。µCをリセットから解放する前に、デバッガを使用してプログラムをSRAMに書き込み、そこから起動します。ただし、デバッガーにアクセスできるので、どこから起動するかについて制約はありません。では、なぜこの機能があるのでしょうか。 ブート位置がピンから派生していることは、(少なくとも私の意見では)この機能が開発中ではなく最終的な操作で使用されることを示しています。そして最後の操作では、SRAMは起動時にクリアされます。したがって、SRAMから起動しても意味がありません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.