STM32組み込みインタビューのナレッジポイントを要約する

1. STM32F1 と F4 の違いは何ですか?

異なるコア: F1 は Cortex-M3 コア、F4 は Cortex-M4 コア; メイン周波数が異なります: F1 メイン周波数は 72MHz、F4 メイン周波数は 168MHz; 浮動小数点演算: F1 には浮動小数点演算ユニットがありませんが、F4 には浮動小数点演算ユニットがあります。パフォーマンス: F4 GPIO フリップ レート、プルアップおよびプルダウン抵抗構成、ADC 精度など、F1 よりも豊富で強力な設計です; メモリ サイズ: F1 内部 SRAM 最大 64K、F4 は 192K (112+ 64+16)。

2. STM32 起動プロセスの紹介

ブート ピンの設定を通じて、スタック ポインターを初期化するための初期アドレスを探します。 __initial_sp はリセット プログラムを指します。 Reset_Hander は例外割り込みを設定します。 HardFault_Handler はシステム クロックを設定します。 SystemInit は C ライブラリ関数 _main を呼び出します。

3. GPIOの導入

GPIO 8 動作モード (gpio_init.GPIO_Mode):

(1) GPIO_Mode_AIN アナログ入力

(2) GPIO_Mode_IN_FLOATING フローティング入力

(3) GPIO_Mode_IPD プルダウン入力

(4) GPIO_Mode_IPU プルアップ入力

(5) GPIO_Mode_Out_OD オープンドレイン出力

(6) GPIO_Mode_Out_PP プッシュプル出力

(7) GPIO_Mode_AF_OD 多重化オープンドレイン出力

(8) GPIO_Mode_AF_PP 多重化プッシュプル出力 APB2 は、AD、I/O、高度な TIM、シリアル ポート 1 を担当します。

APB1 は DA、USB、SPI、I2C、CAN、シリアル ポート 2345、通常の TIM、PWR を担当します

4.UART

  • 質問 1: シリアル通信の概要

同期通信:I2C半二重、SPI全二重

非同期通信:RS485半二重、RS232全二重

  • 質問 2: シリアルポートの構成

シリアル ポート設定の一般的な手順は、次の手順に要約できます。

(1) シリアル ポート クロック イネーブル、GPIO クロック イネーブル (2) シリアル ポート リセット (3) GPIO ポート モード TX の GPIO 動作モードを次のように設定します: GPIO_Mode_AF_PP; //多重化プッシュプル出力 RX の GPIO 動作モードは: GPIO_Mode_IN_FLOATING ; / /浮動小数点入力

(4) シリアル ポート パラメータの初期化には、主にボー レート設定 (115200)、8 データ ビット、1 ストップ ビット、パリティ ビットなし、ハードウェア データ フロー制御なし、およびトランシーバ モードが含まれます。(5) 割り込みをオンにして、NVIC を初期化します (このステップは、割り込みをオンにする必要がある場合にのみ必要です)

(6) シリアルポートを有効にする

(7) ライト割り込み処理機能

  • 質問 3: USART の主な機能

(1) 全二重動作 (データの受信と送信は互いに独立して行われます)。

(2) 同期動作中、マスタークロックを同期させることができ、スレーブクロックも同期させることができます。

(3) タイマー/カウンターを占有しない独立した高精度ボーレートジェネレーター。

(4) 5、6、7、8、9 データ ビット、1 または 2 ストップ ビットのシリアル データ フレーム構造をサポートします。

(5) パリティの生成と検査はハードウェアによってサポートされます。

(6) データオーバーフロー検出。

(7) フレームエラー検出。

(8) 検出ノイズフィルタとフォルススタートビットを含むデジタルローパスフィルタ

(9) 3 つの完全に独立した割り込み、TX 送信完了、TX 送信データ レジスタが空、RX 受信完了。

(10) マルチマシン通信モードをサポートします。

(11) 倍速非同期通信モードをサポートします。

アプリケーションシナリオ: GPS、Bluetooth、4G モジュール

5.I2C

質問 1: データ送信プロセス中の I2C バスには 3 種類の信号があります

(1) スタート信号:SCL がハイレベルのとき、SDA はハイレベルからローレベルにジャンプし、データの送信を開始します。

(2) 終了信号:SCL がハイレベルのとき、SDA はローレベルからハイレベルにジャンプし、データ送信を終了します。

(3) 応答信号:8 ビットデータを受信した後、データを受信した IC はデータを受信したことを示す特定の Low レベルのパルスをデータを送信する IC に送信します。CPUは被制御機器に信号を送信した後、被制御機器からの応答信号を待ち、応答信号を受信した後、状況に応じて信号を送信し続けるかどうかを判断します。応答信号が受信されない場合は、制御対象機器が故障していると判断します。

質問 2: I2C ホスト モード ポートのハードウェア モードを設定する方法: マルチプレクス オープン ドレイン出力、プルアップでもプルダウンでもない。

(高速モード: 400 Kbit/s) ソフトウェアシミュレーション: プッシュプル出力、プルアップ抵抗を構成。

質問 3: I2C 調停メカニズムは? I2C 調停メカニズムは、「and」行 (Wired-AND) を理解すると、一目瞭然です。簡単に言えば、「低レベル優先」の原則に従います。つまり、最初に低レベルを送信した人がバスの制御を取得します。

ハードウェアモード:通信速度によって設定されます

/* STM32 I2C 快速模式 */
#define I2C_Speed 400000

/* 通信速率 */
I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;

ソフトウェアシミュレーション:通信速度を設定せずに計算するには?

I2C バス ビット遅延関数 i2c_Delay を介して:

static void i2c_Delay(void)
{
  uint8_t i;

  /*
     下面的时间是通过安富莱AX-Pro逻辑分析仪测试得到的。
    CPU主频72MHz时,在内部Flash运行, MDK工程不优化
    循环次数为10时,SCL频率 = 205KHz
    循环次数为7时,SCL频率 = 347KHz, SCL高电平时间1.5us,SCL低电平时间2.87us
     循环次数为5时,SCL频率 = 421KHz, SCL高电平时间1.25us,SCL低电平时间2.375us

    IAR工程编译效率高,不能设置为7
  */
  for (i = 0; i < 10; i++);
}

アプリケーションシナリオ: PMIC、加速度計、ジャイロスコープ

6、SPI

  • 質問 1: SPI には何本のワイヤが必要ですか?

SPI インターフェイスは通常、通信に 4 つのワイヤ (MISO マスター デバイス データ入力、スレーブ デバイス データ出力) を使用します。MOSI マスターデバイスのデータ出力、スレーブデバイスのデータ入力。SCLK クロック信号。マスター デバイスによって生成されます。CS スレーブデバイスのチップ選択信号。マスターデバイスによって制御されます。

  • 質問 2: SPI 通信には 4 つのモードがありますか?

SPI には 4 つの動作モードがあり、各動作モードの違いは SCLK が異なることと、具体的な動作は CPOL と CPHA によって決定されることです。

(1) CPOL: (クロック極性)、クロック極性。SPI の CPOL は、SCLK がアイドル状態のときに SCLK のレベル値がローレベル 0 であるかハイレベル 1 であるかを示します。

CPOL=0、クロックがアイドル状態のときのレベルはローレベルなので、SCLKが有効なときはハイレベル、いわゆるアクティブハイになります。

CPOL=1、クロックがアイドルのときのレベルはハイレベルなので、SCLKが有効なときはローレベル、いわゆるアクティブローです。

(2) CPHA: (クロック位相)、クロック位相。

位相はデータサンプリングが第1エッジか第2エッジのどちらのエッジ(エッジ)にあるかに対応しており、0が第1エッジ、1が第2エッジに対応します。

CPHA=0、最初のエッジを意味します。

CPOL=0 の場合、アイドルがロー レベルの場合、最初のエッジはローからハイになるため、立ち上がりエッジになります。

CPOL=1 の場合、アイドルがハイ レベルの場合、最初のエッジはハイからローになるため、立ち下がりエッジになります。

CPHA=1、2 番目のエッジを示します。

CPOL=0 の場合、アイドルがロー レベルの場合、2 番目のエッジはハイからローになるため、立ち下がりエッジになります。CPOL=1 の場合、アイドルがハイ レベルの場合、最初のエッジはローからロー、ハイになります。それは立ち上がりエッジです。

  • 質問 3: どのモードを使用するかを決定するにはどうすればよいですか?

(1) まずスレーブが要求する SCLK の極性、非動作時に低電位か高電位かを確認し、CPOL が 0 か 1 であることを確認します。回路図を見ると、シリアル同期クロックのアイドル状態が High に設定されているため、SPI_CPOL_High を選択します。つまり、CPOL は 1 です。

(2) スレーブ チップのデータシートのタイミング図から、スレーブ チップが SCLK の立ち下がりエッジでデータを収集するか、SCLK の立ち上がりエッジでデータを収集するかを確認します。

変換: W25Q32JV は、シリアル クロック (CLK)、チップ セレクト (/CS)、シリアル データ入力 (DI)、およびシリアル データ出力 (DO) の 4 つの信号を含む SPI 互換バスを通じてアクセスされます。

標準の SPI 命令は、DI 入力ピンを使用して、CLK の立ち上がりエッジで命令、アドレス、またはデータをデバイスにシリアルに書き込みます。DO 出力ピンは、CLK の立ち下がりエッジでデバイスからデータまたはステータスを読み取るために使用されます。モード 0 (0,0) および 3 (1,1) での SPI バス動作がサポートされています。

モード 0 とモード 3 は、SPI バスのマスター側がスタンバイ状態にあり、データがシリアル フラッシュに送信されないときの CLK 信号の通常の状態に焦点を当てています。モード 0 の場合、CLK 信号は通常 /CS の立ち下がりエッジと立ち上がりエッジで Low になります。モード 3 の場合、CLK 信号は通常 /CS の立ち下がりエッジと立ち上がりエッジで High になります。

シリアル同期クロックのアイドル状態は High なので、ここでは 2 番目の遷移エッジを選択するため、SPI_CPHA_2Edge を選択します。つまりCPHAは1です。

つまり、モード 3(1,1) を選択します。

アプリケーションシナリオ: SPI フラッシュ、W25Q32 メモリ容量 32Mb (4M x 8)、つまり 4M バイト

 電車による情報: Linux カーネル ソース コード技術学習ルート + ビデオ チュートリアル カーネル ソース コード

電車で学ぶ: Linux カーネル ソース コード メモリ チューニング ファイル システム プロセス管理 デバイス ドライバー/ネットワーク プロトコル スタック

7. できる

  • 質問 1: CAN の概要 CAN_L と CAN_H 間の電位差に応じてバス レベルを判断する CAN コントローラーについて説明します。バスレベルはドミナントレベルとリセッシブレベルに分かれており、両者の比率はそのうちの一つです。送信者はバスレベルを変更することで受信者にメッセージを送信します。質問 2: CAN 初期化の設定手順は? (1) 関連するピンの多重化機能を設定し、CAN クロックを有効にする (2) CAN 動作モードとボー レートなどを設定する (CAN 初期化ループバック モード、ボー レート 500Kbps) (3) ) フィルターを設定します。 質問 3: CAN 送信データ形式

CanTxMsg TxMessage;TxMessage.StdId=0x12; //标准标识符
TxMessage.ExtId=0x12; // 设置扩展标示符
TxMessage.IDE=CAN_Id_Standard; // 标准帧
TxMessage.RTR=CAN_RTR_Data; // 数据帧
TxMessage.DLC=len; // 要发送的数据长度 发送8个字节
for(i=0;i<len;i++)
  TxMessage.Data[i]=msg[i]; //数据

8.DMA

  • 質問 1: DMA の導入について?

ダイレクト メモリ アクセス (DMA) は、周辺機器とメモリ間、またはメモリとメモリ間の高速データ転送を実現するために使用されます。データは CPU 介入なしで DMA 経由で迅速に移動できるため、CPU リソースが他の操作に解放されます。

  • 質問 2: DMA 転送モードはいくつありますか?

DMA_Mode_Circular 循環モード DMA_Mode_Normal 通常のキャッシュ モード

アプリケーション シナリオ: GPS、Bluetooth、両方とも循環取得、DMA_Mode_Circular モードを使用します。

さらに重要な機能は、現在の残りデータサイズを取得し、設定された受信バッファサイズから現在の残りデータサイズを減算して、現在の受信データサイズを取得することです。

9、中断

  • 質問 1: 割り込み処理の流れについて説明してください。(1) 割り込みを初期化し、トリガモードを立ち上がりエッジ/立ち下がりエッジ/ダブルエッジトリガに設定します。(2) 割り込みをトリガし、割り込みサービス関数に入る

  • 質問 2: STM32 割り込みコントローラは、いくつの外部割り込みをサポートしていますか?

STM32 の割り込みコントローラは、19 の外部割り込み/イベント要求をサポートします。

図から、GPIO ピン GPIOx.0 ~ GPIOx.15 (x=A、B、C、D、E、F、G) はそれぞれ割り込みライン 0 ~ 15 に対応します。

他の 4 つの EXTI ラインは次のように接続されます。 ● EXTI ライン 16 は PVD ​​出力に接続されます。 ● EXTI ライン 17 は RTC アラーム イベントに接続されます。 ● EXTI ライン 18 は USB ウェイクアップ イベントに接続されます。 ● EXTI ライン 19 は USB ウェイクアップ イベントに接続されます。イーサネット ウェイクアップ イベント (相互接続製品のみ) 割り込みサービス関数リスト: IO ポートの外部割り込みには、割り込みベクタ テーブル内の 7 つの割り込みベクトルのみが割り当てられます。つまり、7 つの割り込みサービス関数のみが使用できます。EXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerEXTI9_5_IRQHandler

EXTI15_10_IRQハンドラ

10、STM32 には複数のクロック ソースがあります

STM32 には、HSI、HSE、LSI、LSE、PLL の 5 つのクロック ソースがあります。

①、HSI は高速内部クロック、RC 発振器で、周波数は 8MHz で、精度は高くありません。

②、HSE は高速外部クロックで、水晶/セラミック発振子または外部クロック ソースに接続でき、周波数範囲は 4MHz ~ 16MHz です。

③. LSI は低速内部クロック、周波数 40kHz の RC 発振器であり、低電力クロックを提供します。

④、LSE は、周波数 32.768kHz の水晶振動子に接続された低速外部クロックです。

⑤. PLL はフェーズロックループ乗算器出力であり、そのクロック入力ソースは HSI/2、HSE、または HSE/2 として選択できます。周波数逓倍数は 2 ~ 16 倍まで選択できますが、最大出力周波数は 72MHz を超えないようにしてください。

11. RTOS のタスクはどのように書かれていますか? このタスクをどのように切り出すか?

答え:

タスクはスレッドとも呼ばれます。UCOS には、タスクの優先度に従ってスケジュールされるタスク スケジューリング メカニズムがあります。1 つはハードウェア割り込みであり、システムは現在のタスクの関連する変数をスタックにプッシュし、割り込みサービス ルーチンを実行し、実行完了後に戻ります。もう 1 つはタスク間の切り替えです。タスク方式が使用されます。スケジューリング、各タスクには独自のスタックがあり、スケジューリングもスタックにプッシュされ、別のプログラムが実行され、ポップされて返されます。

すべてのタスクが優先順位に従って順番に実行されるわけではありませんが、優先度の高いタスクは、自発的に実行を放棄しない限り、排他的に実行されます。そうでない場合、優先度の低いタスクはプリエンプトできず、優先度の高いタスクは優先度の低いタスクに解放されます。 CPU 使用率を取り戻すために。したがって、優先度の低いタスクを実行できるように ucos を切り替えることができるように、ucos タスク間に待機遅延を挿入することに注意する必要があります。

12. UCOSII のタスク間の通信方法は何ですか?

答え:

UCOSIIでは、イベントと呼ばれるセマフォ、メールボックス(メッセージメールボックス)、メッセージキューを使用してタスク間の通信やグローバル変数を実装します。セマフォは次の目的で使用されます。 1. 共有リソースの使用権を制御します (相互排他条件を満たす)。

2. 特定の時間の発生をマークします

3. 2 つのタスクの動作を同期する

応用例:相互排他セマフォ

相互排除条件として、セマフォは 1 に初期化されます。

目標を達成するには、シリアル ポートを呼び出してコマンドを送信するには、次のコマンドを送信する前に「OK」文字が返されるまで待つ必要があります。各タスクはこの送信関数を使用できます。競合は発生しません。

メッセージキュー:

コンセプト:

(1) メッセージキューは実際にはメールボックス配列です

(2) タスクと割り込みの両方がメッセージをキューに入れることができ、タスクはメッセージ キューからメッセージを取得できます。

(3) 最初にキューに入ったメッセージがタスクに渡されます(FIFO)。

(4) 各メッセージキューにはメッセージを待っているタスクの待ちリストがあり、メッセージ欄にメッセージがない場合、メッセージが到着するまでメッセージを待っているタスクは保留されます。

アプリケーションシナリオ: シリアルポート受信プログラムの受信バッファ。

外部イベントを保存します。

13. プロジェクトはカスタム プロトコルを使用していますが、その構造は何ですか?

答え:

構造は、フレームヘッダー(SDTC) + フレーム長 + コマンド + シリアル番号 + データ + CRC チェックです。

14. uCOSII と Linux の違いは何ですか?

答え:

μC/OS-II は、コンピュータ組み込みアプリケーション向けに特別に設計されており、高い実行効率、小さなフットプリント、優れたリアルタイム性能、強力な拡張性という特徴を備えており、最小カーネルは 2KB までコンパイルできます。μC/OS-II は、ほぼすべての有名な CPU に移植されています。

Linux は無料、安全、安定しており、幅広いアプリケーションがあり、組み込みシステム、サーバー、家庭用コンピュータで広く使用されています。

μC/OS-II Linuxは組み込みでの使用に適しています。ただし、μC/OS-II は組み込み用に特別に設計されているため、より効率的に実行され、使用するリソースが少なくなります。

サーバーとしてLinuxが利用でき、利用率も高い。Linux はサーバー専用に開発されたものではありませんが、ソース コードがオープンで完全に変更できるため、両者に大きな違いはなく、最も重要なディストリビューション バージョンである redhat linux はサーバーでよく使用されるシステムです。 。

15. Git コミットコード

質問: Git コミットコードプロセス?

答え:

1. 作業パス内の変更されたファイルを表示します。

$ git status

2. 変更ファイルのディレクトリを入力します。

$cd -

3. 最後に送信されたバージョン ファイルとの違いを表示します。

$ git diff

4. 現在のすべての変更を次の送信に追加します。

$ git add .

5. 関連する関数の説明を追加します (これを最初の送信に使用します)。

$ git commit -s

次の点にも注意してください。

Fuction: コードを修正する機能 Ticket: Bug 番号に相当

注: 各フォルダーを再度指定する必要があります。

6. 提出されたコードを表示する

$ tig .

7. 公開された提出記録を変更しないでください! (今後の提出にこれを使用してください)

$git commit --amend

コマンドモードの場合:

:x (ファイルに書き込んで終了)

8. サーバーにプッシュする

$ git push origin HEAD:refs/for/master

16、ucosii と ucosii と freeRTOS の比較

  • 質問 1: 3 つを比較するとどうですか?

答え:

ucosii と freeRTOS の比較:

(1) freeRTOS は TCP/IP のみをサポートしますが、uCOSii は FS、USB、GUI、CAN などの多くの拡張機能をサポートします。(tbox には CAN を使用するため、uCOSii を選択します) (2) freeRTOS は無料の商用アプリケーションです。uCOSii の商用利用には料金がかかります。(3) タスク間通信 freeRTOS はキュー、セマフォ、ミューテックスのみをサポートします。これらに加えて、uCOSii はイベント フラグ グループとメールボックスもサポートします。

(4) 理論的に言えば、freeRTOS は 64 を超えるタスクを管理できますが、uCOSii は 64 のタスクしか管理できません。

ucosii と ucosii の比較:

では、μC/OS-II とμC/OS-III の違いは何でしょうか? 何が追加されたかというと、依然として非常に大きな変更が加えられていることがわかります。

1 つは、以前は優先度が 0 ~ 63 までしかなく、優先度を繰り返すことができませんでしたが、現在は複数のタスクが同じ優先度を使用できるようになり、同じ優先度ではタイム スライス スケジューリング方式がサポートされます。

2 つ目は、ユーザーがプログラム実行中にタスク、タスク スタック、セマフォ、イベント フラグ グループ、メッセージ キュー、メッセージ番号、ミューテックス セマフォ、メモリ ブロック分割、タイマーなどのリアルタイム オペレーティング システム カーネル リソースを動的に構成できるようにすることです。プログラムの実行中に変更できます。このようにして、ユーザーはプログラムのコンパイル中にリソース割り当てが不十分になる問題を回避できます。

リソースの再利用に関しても、いくつかの改善が加えられました。μC/OS-II では、タスクの最大数は 64 ですが、バージョン 2.82 以降は 256 です。μC/OS-III では、ユーザーは任意の数のタスク、任意の数のセマフォ、相互排他フラグ、メッセージ リストを持つことができます。 、タイマー、および任意に割り当てられたメモリ ブロック サイズは、ユーザーの CPU で利用可能な RAM の量によってのみ制限されます。これも大きな拡張です。

(質問: Shao さん、この数値は起動時に固定されていますか、それとも起動後にランダムに設定されますか?) RAM が十分に大きい限り、設定中に自由に定義できます。

4つ目は、機能がたくさん追加されていることです。常に機能が増えていますので、ぜひご覧ください。これらの機能はμC/OS-IIでは利用できないことが分かりました。

十七、低消費電力モード

  • 質問 1: 低電力モードはいくつありますか? 覚醒方法とは何ですか?

答え:

18. モノのインターネットのアーキテクチャ

  • 質問 1: モノのインターネットのアーキテクチャは何層ですか? 各層はどのような機能を担当しますか?

答え:

モノのインターネットは 3 つの層に分かれており、アーキテクチャから知覚層、ネットワーク層、アプリケーション層に分けることができます。

(1) 知覚層:情報の収集と物体間の情報伝達を担当し、情報収集技術にはセンサー、バーコードや二次元コード、RFID高周波技術、音声や映像などのマルチメディア情報が含まれます。

情報伝送には、長距離データ伝送技術、自己組織化ネットワーク技術、協調情報処理技術、情報収集ミドルウェア技術などのセンサーネットワーク技術が含まれます。

認識層は、モノのインターネットの包括的な認識を実現するための中核機能であり、主要なテクノロジ、標準化、産業化、およびコストの問題におけるブレークスルーが必要なモノのインターネットの一部です。

(2) ネットワーク層:無線および有線ネットワークを利用して、収集したデータの暗号化、認証、送信を行い、広くカバーされる移動通信ネットワークはモノのインターネットを実現するためのインフラであり、3つの層の中で最も標準化され、産業化されたネットワークです。最も有能で成熟した部分の鍵は、モノのインターネットのアプリケーション特性を最適化および改善して、協調的なセンシング ネットワークを形成することです。

(3) アプリケーション層: モノのインターネットに基づくリッチなアプリケーションを提供することは、モノのインターネット開発の基本的な目標であり、モノのインターネット技術と業界の情報化のニーズを組み合わせて、幅広いインテリジェントなアプリケーション ソリューションを実現します。セットの鍵は、業界の統合、情報リソースの開発と活用、低コストで高品質のソリューション、情報セキュリティの保証、効果的なビジネスモデルの開発にあります。

19、メモリ管理

  • 質問 1: UCOS におけるメモリ管理の方法は何ですか?

答え:

システムは、メモリ パーティションに関連付けられたメモリ制御ブロックを通じてメモリ パーティションを管理します。

動的メモリ管理機能は次のとおりです。

動的メモリパーティション関数 OSMemCreate() の作成; メモリブロック関数 OSMemGet() の要求;

メモリブロック関数 OSMemPut() を解放します。

20. Ucos のタスクの状態は何ですか? タスクの状態間の関係を示すグラフですか?

答え:

5 つの状態があります。

スリープ状態、準備完了状態、実行状態、待機状態 (イベントの発生を待っている状態)、および割り込みサービス状態。

UCOSII タスクの 5 つの状態遷移関係:

21.ADC

STM32 の ADC システムの機能特性を簡単に説明します (1) 12 ビット分解能 (2) 自動キャリブレーション (3) プログラマブル データ アラインメント (変換結果は 16 ビット データ レジスタでの左揃えまたは右揃えのストレージをサポートします) (4) 単一および連続変換モード

22. システムクロック

  • システムクロックを設定する基本的なプロセスを簡単に説明します。

(1) HSE をオンにして準備完了を待ち、フラッシュを動作待機状態に設定します。(2) AHB、APB1、APB2 の分周係数を設定し、システムクロックとの関係を決定します。(3) CFGR レジスタを設定し、PLL のクロックソースと逓倍率を決定します (HSE 外部 8M*9 倍=72MHz)。

(4) PLL を有効にし、システム クロック ソースを PLL に切り替えます。

23、HardFault_Handler処理

  • 質問 1: 原因

(1) 配列範囲外操作、(2) メモリオーバーフロー、範囲外アクセス、(3) スタックオーバーフロー、プログラム暴走、(4) 割り込み処理エラー、(5) エラー、

  • 質問2: 対処方法

(1)startup_stm32f10x_cl.s 内の HardFault_Handler のアドレスリマッピングを見つけて、HardFaultHandle 関数にジャンプするように書き換えます。

(2) R0、R1、R2、R3、R12、LR、PC、PSR レジスタを印刷して確認します。

(3) フォールトステータスレジスタグループの表示 (SCB->CFSR および SCB->HFSR)

24. TTS音声合成方式

  • 質問 1: sim7600 TTS 音声はどのような方式を使用しますか

答え:

(1) Unicodeエンコードを使用して音声を合成する

AT+CTTS=1、「6B228FCE4F7F75288BED97F3540862107CFB7EDF」

内容は「音声合成システムへようこそ」で、このモジュールは中国語のテキスト メッセージを Unicode エンコードで送受信するため、テキスト メッセージを読みやすくなっています。

(2) テキストを直接入力します。一般的な文字は ASIIC コードを採用し、漢字は GBK コードを採用します。

AT+CTTS=2,"音声合成システムへようこそ"

25. タイマー

  • STM32 のシステム クロックは 72MHz であることがわかっていますが、20ms のタイミングを達成するには関連するレジスタをどのように設定すればよいでしょうか?

答え:

SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC))//1ms タイマー経由

の:

uint32_t システムコアクロック = SYSCLK_FREQ_72MHz; /*!< システム クロック周波数 (コア クロック) */ #define SYSCLK_FREQ_72MHz 72000000 #define OS_TICKS_PER_SEC 1000 /* 1 秒間のティック数を設定します

20ms が必要な場合は、グローバル変数を設定して初期値を 20 に設定できます。このようにして、各 systick が 1 回中断され、グローバル変数が 1 減って 0 になります。つまり、systick は 20 に中断されます。時間は 1ms*20 =20ms となります。したがって、20ms のタイミングが達成されます。

26、ステートマシン

  • 質問: どのようなステート マシンが使用されますか?

答え:

(英語: Finite-state machine, FSM)、有限状態オートマトンとも呼ばれ、ステートマシンとも呼ばれます。

ステート マシンの状態遷移が次の表に示されているとします。

実装: (switch ステートメントを使用)

//横着写
void event0func(void)
{
    switch(cur_state)
    {
        case State0:
             action0;
             cur_state = State1;
            break;
         case State1:
             action1;
             cur_state = State2;
            break;
         case State2:
             action1;
             cur_state = State0;
            break;
        default:break;
    }
}

void event1func(void)
{
    switch(cur_state)
    {
        case State0:
             action4;
             cur_state = State1;
             break;
        default:break;
    }
}

void event2func(void)
{
    switch(cur_state)
    {
        case State0:
             action5;
             cur_state = State2;
            break;
         case State1:
             action6;
             cur_state = State0;
            break;
        default:break;
    }
}

27、デバイスの選択

STM32F407 VS STM32F103 の主な機能とリソースの比較?

答え:

 

おすすめ

転載: blog.csdn.net/youzhangjing_/article/details/131536091