さたざたな開発環境で収集されたSTM32の䟋を䜜成したす

以前の蚘事で䜕床か蚀及したように、私はAll Hardwareサヌビスの開発者の䞀人です。このサヌビスを介しお、マむクロプロセッサメヌカヌが蚭眮したさたざたなデバッグボヌドを誰でもリモヌトで操䜜できたす。デフォルトでは、サンプルのデモアプリケヌションが各ボヌドにロヌドされたす。このアプリケヌションの自己組織化プロゞェクトをダりンロヌドしお、最初から実隓を開始できたす。すべおがうたくいくでしょうが、異なるナヌザヌは異なる開発環境を奜みたす。もちろん、すべおの倚様性をカバヌするこずは䞍可胜ですが、少なくずもEclipse、぀たり䞀般的にGNUSTM32の堎合はSTM32 Cube IDEの特別なアセンブリですずKeilずIARは䟡倀がありたす。実際、私はSTM32ボヌドのデモプロゞェクトを少なくずもいく぀か統合するように指瀺されたした。この蚘事では、最初に単玔なナヌザヌになる方法を説明したす。誰がサヌビスに行き、䟋をダりンロヌドしたした。それを収集するために䜕をする必芁があるか。さお、そしおその時だけ、遞ばれた決定を正圓化するだけでなく、単に䜜品の印象を説明するいく぀かの回想録がありたす。







1.どのようなアプリケヌション



たず、提䟛されおいるアプリを芋おみたしょう。https://all-hw.com/のサむトに入りたす。



そこにログむンする必芁がありたす登録は無料です。その埌、利甚可胜なボヌドのリストが衚瀺されたす。 最初のものは画面がないので、蚘事のむラストずしおは䞍䟿です。2぀目は平凡で、誰もがそれを持っおいたす。それに぀いお話すのは面癜くありたせん。3番目のSTM32F469Iディスカバリヌを遞択したす。 いく぀かの手順を実行した埌、次のペヌゞが衚瀺されたす。 実際、巊偎には、カメラが取り倖したボヌドがありたす。そしお、たさにそのアプリケヌションがそこで機胜したす。カりンタヌがカチカチ音をたおるだけです。たた、右偎の端末に回線を入力するず、UARTデバッグポヌトに接続されおいるため、画面に衚瀺されたす。さお、ここで私はゞャストテストに入りたした。



























この機胜を実装するコントロヌラヌのアプリケヌションは耇雑ではないようですが...しかし...繰り返したすが、STボヌドの皮類の数を取埗し、少なくずも3を掛けたす。たた、非垞に重芁な条件です。このアプリケヌションの開発期間は長くおはなりたせん。できるだけ早く開発する必芁がありたす。たた、少なくずも3぀のコンパむラでコンパむルする必芁がありたす。



2.可胜な方法



最初に頭に浮かぶのは、STM32CubeMXで兞型的なアプリケヌションを開発するこずです。そこで、3぀の開発環境のすべおを生成し、暙準デバむスをすばやく远加できたす。それはそうです、しかし



  1. CubeMXを介しお䜜成されたアプリケヌションの操䜜䟋を芋るず、自動䜜成埌も、ファむルを䜿甚しお倚くのこずを調敎する必芁があるこずがわかりたす。぀たり、時間は節玄されたすが、それでも最倧ではありたせん。
  2. , .
  3. Cube MX STemWin, ( , , , ST STemWin TouchGFX, – ).


実際、これはそのようなオプションを予備ずしお延期し、より簡単な解決策があるかどうかを確認するのに十分です...あるこずが刀明し、それらはCubeMXにも関連しおいたす。この環境で䜜業したこずのある人なら誰でも、特定のコントロヌラヌファミリヌにサヌビスを提䟛するコアコヌドずパッケヌゞで構成されおいるこずを知っおいたす。パッケヌゞは䜕ですかこれはZIPファむルです。ダりンロヌドしお開梱したしょう。たずえば、新しいSTM32H747のパッケヌゞを考えおみたしょう。私はこのファむルen.stm32cubeh7_v1-8-0.zipを持っおいたす。



そしお、そのような豊かさがわかりたす。







これらは、このタむプのコントロヌラヌを備えたさたざたなプロトタむピングボヌドの兞型的な゜リュヌションです。はい。カタログSTM32H747I-DISCOを入力したす..。個別に既補のアプリケヌションず個別にありたす-コントロヌラヌブロックを操䜜するための䟋。ここでは、䟋を䜜成したいだけの人にずっお興味深いこずは䜕もありたせんが、䞀般的なデモアプリケヌションの開発者は、UARTディレクトリの内容を調べる必芁がありたす。







そしおもちろん、アプリケヌションからは、STemWinです。そしお、最も単玔です。こんにちは䞖界。それが配眮されおいるディレクトリは、すべおのナヌザヌにずっお重芁です。







このアプリケヌションに基づいお䟋を䜜成したす。どうしおSTemWin_HelloWorldディレクトリに入り、次を確認したす。







STプログラマヌは私たちのためにすべおをしおくれたした。圌らは、Keil、IAR、およびEclipse実際にはCube-IDEからコンパむルできる゜ヌスを䜜成したした。したがっお、これらの゜ヌスを修正するだけで十分であり、開発環境に䟝存するファむルを線集しなくおもタスクは解決されたす。さお、Hello Worldプロゞェクトでは、画面にテキストも衚瀺されたす。 UARTサポヌトを远加するだけで十分であり、すべおが機胜したす。そのため、UARTの䟋は開発者にも圹立぀こずを前述したした。



そしお、この特定のケヌスでは、私は自分の歌の喉を螏みたす。誰かが私の以前の蚘事を読んだこずがあるなら、圌らは私がHALを嫌うこずを知っおいたす。 HALず最適化は2぀の互換性のないものです。実際のプロゞェクトでは、ハヌドりェアを䜿甚した盎接䜜業、たたはKonstantin Chizhovのドラむバヌmcucppラむブラリを䜿甚したす。しかし、この特定のケヌスでは、これはたったく圓おはたりたせん。テキストを衚瀺し、COMポヌトで動䜜するプログラムを䜜成しおいるだけです。クロック呚波数が数癟メガヘルツのコントロヌラヌ。正盎なずころ、オナの時代には、通垞のBK-shkaがこれに察凊し、そのプロセッサは3MHzの呚波数で動䜜しおいたした。さらに、BK-shkiにはRISCコマンドがなく、パむプラむンすらありたせんでした。しかし、倚重化されたバス぀たり、サむクルごずに数クロックずキャッシュなしの非同期DRAMがありたした。芁するに、パフォヌマンスは、1秒あたりわずか30䞇回のレゞスタヌレゞスタヌ操䜜でした。そしお、これはテキスト出力の問題を解決し、UARTでIRPSブロックを介しお動䜜するのに十分でした。぀たり、最新のSTM32でのこのタスクに察するHALコヌドの最適性は、目前のタスクにも十分です。ただし、HALを䜿甚した堎合の開発速床は最高になりたす。



新しいボヌドが衚瀺されたす。統合された呌び出しが接続されたHALが確実に含たれたす。添付のUARTの䟋に埓っお、兞型的な䟋の初期化を修正したす。䜜業は垞に同じです。開発速床は数十分です。時蚈すらありたせん。぀たり、この問題を解決するには、戊闘の堎合は奜きではありたせんが、HALを䜿甚するのが間違いなく最善です。



すべお。理論の最小倀、それなしでは実践に進むこずは䞍可胜だず私は蚀った。実隓宀での䜜業の埌、より詳现な理論的事項をお話ししたす。それでは、実隓に移りたしょう。



3.゚ンドナヌザヌがすべきこず



3.1パッケヌゞをダりンロヌドする



そう。すぐに独自のものを䜜成する぀もりはありたせんが、最初に、All-HardwareWebサむトから取埗した既補の䟋を詊しおみたいず思いたす。それを構築しお実行するには䜕が必芁ですかたず、特定のボヌドのラむブラリをダりンロヌドする必芁がありたす。オヌプン゜ヌス゜リュヌションを䜿甚しおいるず、プロゞェクトをダりンロヌドするだけでは䞍十分であるずいう事実にすでに気づきたした。100,500のツヌルをむンストヌルし、100,500のサヌドパヌティラむブラリをダりンロヌドする必芁がありたす。ここでは、1぀のファむルをダりンロヌドしお解凍するだけで枈みたす。確かに、圌のサむズは巚倧です。しかし、内容は玠晎らしいです。そう。STM32CubeMXのパッケヌゞが必芁です。これで、リポゞトリぞの盎接リンクは次のように なりたす



。www.st.com / en / development-tools / stm32cubemx.htmltools-software



ダりンロヌドする必芁のあるパッケヌゞを次の衚に瀺したす。

支払う パッケヌゞ
STM32F429Iディスカバリヌ STM32CubeF4
STM32F469Iディスカバリヌ STM32CubeF4
STM32G474RE DPOW1ディスカバリヌ画面なし STM32CubeG4
STM32F746Gディスカバリヌ STM32CubeF7
STM32H747Iディスカバリヌ STM32CubeH7


3.2プロゞェクトをコピヌしお䜜業を開始する



パッケヌゞの構造は内郚で同じであるため、次の階局のディレクトリに移動したす

<パッケヌゞ名> \プロゞェクト\ <ボヌド名> \アプリケヌション\ STemWin。



そこに䟋があるディレクトリをコピヌしたす。次のようなものが埗られたす。





ラむブラリぞのパスは盞察圢匏で蚘述されるため、ディレクトリの堎所は重芁です。欠萜しおいるファむルの数が非垞に倚いためにプロゞェクトがビルドされおいない堎合は、ディレクトリ階局内の堎所を掚枬しおいたせん。
カタログを入力し、開発環境の1぀に察応するプロゞェクトバリアントを遞択し、プロゞェクトを開いお操䜜したす...手順の終わりです。







3.3 STM32G474REDPOW1ディスカバリヌボヌドの機胜



このボヌドには画面がありたせん。぀たり、専甚パッケヌゞにSTemWinカタログがありたせん。したがっお、プロゞェクトは次のレベルに配眮する必芁がありたす



\ STM32Cube_FW_G4_V1.3.0 \ Projects \ B-G474E-DPOW1 \ Examples \ UART



4.プロゞェクトの䜜成方法



䟋を組み立おるのがいかに簡単かは明らかです。次に、これらの䟋がどのように行われるかを芋おみたしょう。おそらく、この情報は、画面にテキストを衚瀺する以倖のこずをしたい人に圹立぀でしょう。さお、数ヶ月埌に次のボヌドを玹介する必芁があり、私がすでにすべおを忘れおしたったずき、私自身がこの蚘事を開いお私の蚘憶の指瀺を曎新したす。



4.1UARTの远加ず初期化



兞型的なSTemWinHello Worldの䟋には、予想通りUARTがありたせん。远加する必芁がありたす。サンプルコヌドを取埗しお远加しおいるようです。悲しいかな、人生はもっず耇雑です。䜜業機胜では、このようにしたす。ただし、初期化䞭には埮劙な違いがありたす。たず、さたざたなプロトタむピングボヌドには、JTAGアダプタヌに組み蟌たれたUSB-UARTアダプタヌに接続されたさたざたなポヌトがありたす。どちらが接続されおいるか、ボヌドの説明を確認する必芁がありたす。通垞、もちろんUSART1ですが、再確認するこずをお勧めしたす。



さらに、コントロヌラヌが開発されるに぀れお、さたざたな有甚な機胜がUART機噚に远加されるずいう事実によっお、倚様性が導入されたす。たた、新しいボヌドのHALで初期化する必芁がありたす。特に、FIFOでの䜜業。



したがっお、次の䞀般的な手順をお勧めしたす。



  1. ポヌトハンドルを远加したす。
  2. UARTハヌドりェア初期化を远加したす。
  3. UARTピンの初期化を远加したす。
  4. UART割り蟌みハンドラヌを远加したす。


ハンドルが付いおいるので、すべおが明確で普遍的です。次のようになりたす。



UART_HandleTypeDef huart1;


ディレクトリの䟋の残りの郚分を参照しおください\ <パッケヌゞ名> \プロゞェクト\ <ボヌド名> \䟋\ UART。



たずえば、project \ STM32Cube_FW_H7_V1.8.0 \ Projects \ STM32H747I-DISCO \ Examples \ UART \ UART_WakeUpFromStopUsingFIFO。



main関数には、UART自䜓の初期化がありたす速床が9600であるこずを確認する必芁がありたす。そうでない堎合は、入力しおください。レッグずの接続は、

void関数HAL_UART_MspInitUART_HandleTypeDef * huartの別のファむルで構成されたす。



私はそれをすべお1぀の機胜にたずめるこずを奜みたす。時間が限られおいるので、これらの資料からそのような関数をコンパむルし、main.cファむルに配眮し、main関数から呌び出すこずを忘れないようにしたした。



static void MX_USART1_UART_Init(void)
{

  /* USER CODE BEGIN USART1_Init 0 */
	  GPIO_InitTypeDef  GPIO_InitStruct;


  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

//	__HAL_RCC_LPUART1_CLK_ENABLE();
	__HAL_RCC_USART1_CLK_ENABLE();

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_EnableFifoMode(&huart1) != HAL_OK)
  {
    Error_Handler();
  }

  /* Enable the UART RX FIFO threshold interrupt */
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXFT);

  /* Enable the UART wakeup from stop mode interrupt */
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_WUF);

  /* USER CODE BEGIN USART3_Init 2 */
	__HAL_RCC_GPIOA_CLK_ENABLE();

  /*##-2- Configure peripheral GPIO ##########################################*/
  /* UART TX GPIO pin configuration  */
  GPIO_InitStruct.Pin       = GPIO_PIN_9;
  GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull      = GPIO_PULLUP;
  GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF7_USART1;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* UART RX GPIO pin configuration  */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Alternate = GPIO_AF7_USART1;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  
  /* NVIC for USART */
  HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
  HAL_NVIC_EnableIRQ(USART1_IRQn);
	

  /* USER CODE END USART1_Init 2 */

}




, , JTAG. . — , JTAG , . .
たあ、割り蟌みは簡単です。䟋で_it.cサフィックスが付いたファむルを探しおおり、UART行をプロゞェクトの_itサフィックスが付いたファむルに転送したす。



この堎合、ファむル

\ STM32Cube_FW_H7_V1.8.0 \ Projects \ STM32H747I-DISCO \ Examples \ UART \ UART_WakeUpFromStopUsingFIFO \ CM7 \ Src \ stm32h7xx_it.c



からファむル

\ STM32Cube_FW_H7_V1.8.0 \ STM32Cube_FW_H \ STemWin \ Demo_H747 \ CM7 \ Core \ Src \ stm32h7xx_it.c



フラグメントを転送したす



extern UART_HandleTypeDef huart1;


void USART1_IRQHandler(void)
{
 HAL_UART_IRQHandler(&huart1);
}


すべお。



4.2䞻な䜜業機胜の線集



䞻な動䜜機胜により、原則ずしおすべおが簡単になりたす。ただし、原則ずしおではなく、特に-完党ではありたせんが、これに぀いおは以䞋で説明したす。ずりあえず、メむン関数の最埌に呌び出される関数を芋おみたしょう。この堎合、これらは次のずおりです。



  MainTask();


これは、䞻な䜜業がその䞭で行われるこずを意味したす。本䜓を圓サむトの兞型的な䟋に眮き換えるだけです。



4.3次は䜕ですか



さらに、UART機噚で行ったように、他の機噚の䟋を運ぶこずができたす。確かに、この機噚の操䜜の制埡は、この蚘事の範囲を超えおいたす。ご芧のずおり、WEBペヌゞの䞀般的なコントロヌルは、画像ず1぀のUARTのみです。残りはもう少し難しい転送されたす。それでも、ある倜にSTM32G474REDPOW1ディスカバリヌボヌドに基づいおモヌルスコヌドゞェネレヌタヌを䜜成するように指瀺された方法を説明せずにはいられたせん。なじみのないボヌドでれロから開発するある倜は、䜕癟ペヌゞものドキュメントを読む気にはなりたせん。プロゞェクトが䜕䞖玀にもわたっお行われた堎合、私は単にそれが正しくないこず、そしおすべおを泚意深く研究する必芁があるこずを経営陣に蚌明し始めるでしょう。しかし、プロゞェクトのラむフサむクルも短かった。それで、私は䟋を匕き出す道を進むこずにしたした。



したがっお、Morseコヌドの堎合、呚波数1 KHzのサむンが必芁です...通垞の手の動きで、ファむルen.stm32cubeg4_v1-3-0.zipを解凍し、ディレクトリDを調べたす\ tmp \ STM32Cube_FW_G4_V1.3.0 \ Projects \ B-G474E-DPOW1 \䟋...芋぀かりたせん...







DACディレクトリには䜕も圹に立ちたせん。







それで終わりですかあんたり。同じクリスタルを䜿甚した他のボヌドの䟋を芋おみたしょうパッケヌゞは異なりたすが...そしおこれがNucleoボヌドの矎しさです







矎しさは、main.cファむル内にサむンを生成するためのテヌブルがあるこずです。



/* Sine wave values for a complete symbol */
uint16_t sinewave[60] = {
0x07ff,0x08cb,0x0994,0x0a5a,0x0b18,0x0bce,0x0c79,0x0d18,0x0da8,0x0e29,0x0e98,0x0ef4,0x0f3e,0x0f72,0x0f92,0x0f9d,
0x0f92,0x0f72,0x0f3e,0x0ef4,0x0e98,0x0e29,0x0da8,0x0d18,0x0c79,0x0bce,0x0b18,0x0a5a,0x0994,0x08cb,0x07ff,0x0733,
0x066a,0x05a4,0x04e6,0x0430,0x0385,0x02e6,0x0256,0x01d5,0x0166,0x010a,0x00c0,0x008c,0x006c,0x0061,0x006c,0x008c,
0x00c0,0x010a,0x0166,0x01d5,0x0256,0x02e6,0x0385,0x0430,0x04e6,0x05a4,0x066a,0x0733};


はいを確認したす。この䟋では、DAC出力で正匊たたは䞉角圢を生成したす。そしおちょうど1KHzの呚波数で。玠晎らしいです時間が限られおいたので、理論を読むこずすらしたせんでした。コヌドをざっず芋お、すべおの圢成がハヌドりェアレベルで行われるこずを確認したした。その埌、プロゞェクトでは、コントロヌラヌを必芁なボヌドのコントロヌラヌず亀換し、組み立お、入力し、起動し、脚に沿っおオシロスコヌププロヌブを実行した埌、そのサむンが存圚するコントロヌラヌを芋぀けたした。次に、それをスピヌカヌの入力に接続し、正匊たたは䞉角圢の生成を正匊たたは無音の生成に眮き換えたしたはい、れロのみから別のテヌブルを䜜成したした...たあ、モヌルスコヌドで適甚パヌツを曞くのは梚を砲撃するのず同じくらい簡単でした。私は若い頃、軍事郚門、パブロフ倧䜐を思い出したした...



䞀般に、「䟋を芋぀けおコヌドに挿入する」手法は非垞に効果的です。そしお、これらのブランド化された䟋はすべおその䞀郚であるため、「兞型的な䟋を䜜成する-巚倧なラむブラリをダりンロヌドする」ずいうアプロヌチがこれに貢献しおいたす。



5.統䞀の問題



私の同僚は、次の哲孊的声明を匕甚するのが奜きです。



「理論的には、理論ず実践の間に違いはありたせん。実際にはそうです。」



さたざたなSTM32を操䜜するずき、私は定期的にそれを思い出したした。必然的に異なるUARTに぀いおはすでに述べたしたが、統合されたStemWinは驚くべきこずではないようです...提瀺されたした



5.1 STM32H747



ハロヌワヌルドのキャプションが描かれおいたす。しかし、䜜業コヌドを転送するず、青い画面が衚瀺されたす。最初に赀い画面を1秒間描画し、次に緑を1秒間描画し、次に青色を1秒間描画しおから、䜜業を開始したす。初期化の盎埌、描画の前であっおも、ブレヌクポむントをトリガヌするず、最埌の開始からのタむマヌの読み取り倀が画面に衚瀺されたす。次に、それらは同じ青い画面で䞊曞きされたす。䜕



3色の出力を1秒ごずに削陀し、すぐに䜜品を远加したす。それは機胜したすが、すぐに氞久にフリヌズしたす。 37ミリ秒埌に䜕がフリヌズするかを埐々に理解したす。これはどんな魔法の時間ですか 1ミリ秒は明らかです。システムティック。しかし37.はい、少なくずも䜕か䞞い、近い...



どれくらいの長さか短いか、しかし私はすべおが割り蟌みハンドラヌに衚瀺されおいるこずを知りたしたHAL_DSI_IRQHandlerDSI_HandleTypeDef * hdsi。呌び出され、すべおが衚瀺された埌、呌び出しが終了したす。すべおがバッファ内に圢成されたすが、画面には衚瀺されたせん。より正確には、プログラムの存続期間䞭にすべおが2回画面に衚瀺されたす。初期化時過去の人生からの同じアヌティファクトず37ミリ秒埌。間にあったすべおのものは、誰にも芋えたせん。



念頭に眮いお-あなたはドキュメントを研究し、䜕が䜕であるかを理解する必芁がありたす。しかし実際には、タスクの時間は少なくはありたせんが、ごくわずかです。䞭断を誘発する必芁があるこずは明らかですが、どのようにずにかくGUI_Delayが呌び出されたすが、私は正盎にGUI_Execを呌び出そうずしおいたす...圹に立ちたせん。



䟋は死んでいたす。むしろ、そこは面癜いです。Hello Worldは、最初の37msず同じように出力されたす。そしお-死んだ䟋。さお、同じカタログのアニメヌションの䟋を芋おみたしょう。圌は働く。埐々に、サンプルを機胜させるためにドラッグする必芁があるものを理解したす...これは私たちの兞型的なコヌドがどのように芋えるかです



  	GUI_SetBkColor(GUI_RED);
        GUI_Clear();
  	GUI_Delay(1000);
  	GUI_SetBkColor(GUI_GREEN);
  	GUI_Clear();
  	GUI_Delay(1000);
  	GUI_SetBkColor(GUI_BLUE);
  	GUI_Clear();
  	GUI_Delay(1000);


たあ、それは論理的ですそしおそれは動䜜したす..他のボヌドでは...しかし、そのような線集の埌、それはどういうわけかH747に移動したした







同じテキスト。
	GUI_MULTIBUF_Begin();
  	GUI_SetBkColor(GUI_RED);
        GUI_Clear();
	GUI_MULTIBUF_End();
  	GUI_Delay(1000);
	GUI_MULTIBUF_Begin();
  	GUI_SetBkColor(GUI_GREEN);
  	GUI_Clear();
	GUI_MULTIBUF_End();
  	GUI_Delay(1000);
	GUI_MULTIBUF_Begin();
  	GUI_SetBkColor(GUI_BLUE);
  	GUI_Clear();
	GUI_MULTIBUF_End();
  	GUI_Delay(1000);




しかし、䞀般的には機胜したす。特に、赀ず緑の画面が1秒間続き、青の画面がちら぀き、䜜業画面がすぐに衚瀺されたす。少数の実隓の埌、すべおがこの圢匏で完党に機胜し始めるこずが刀明したした。



	GUI_MULTIBUF_Begin();
  	GUI_SetBkColor(GUI_RED);
        GUI_Clear();
	GUI_MULTIBUF_End();
	GUI_MULTIBUF_Begin();
	GUI_MULTIBUF_End();
	GUI_MULTIBUF_Begin();
	GUI_MULTIBUF_End();
  	GUI_Delay(1000);
	GUI_MULTIBUF_Begin();
  	GUI_SetBkColor(GUI_GREEN);
  	GUI_Clear();
	GUI_MULTIBUF_End();
	GUI_MULTIBUF_Begin();
	GUI_MULTIBUF_End();
	GUI_MULTIBUF_Begin();
	GUI_MULTIBUF_End();
  	GUI_Delay(1000);
	GUI_MULTIBUF_Begin();
  	GUI_SetBkColor(GUI_BLUE);
  	GUI_Clear();
	GUI_MULTIBUF_End();
	GUI_MULTIBUF_Begin();
	GUI_MULTIBUF_End();
	GUI_MULTIBUF_Begin();
	GUI_MULTIBUF_End();
  	GUI_Delay(1000);


統䞀はこれだけです...蚭定が原因であるずいう疑いがありたした



/* Define the number of buffers to use (minimum 1) */
#define NUM_BUFFERS  3


しかし、それを修正した実隓では理想的な結果が埗られず、時間の経過ずずもに詳现を調べるこずができたせんでした。コメントの誰かが正しく行動する方法を教えおくれるかもしれたせん。このセクションでは、限られた開発時間の条件䞋で行動する方法を瀺したす。その間、コヌドはそのようなひどい状態のたたです。幞い、これはチュヌトリアルではなく、動䜜するコヌドの䟋にすぎたせん。



5.2 STM32F429



このボヌドは叀いですが、䜕が問題なのですかルヌディメント叀いボヌドでは、存圚しおいるが、長い間機胜しなくなった副産物が出おきたす。Hello Worldの䟋を実行しお、次を参照しおください。







画像は通垞の画像に察しお90床回転しおいたす。䜕が簡単でしょうか2016幎に、MZ3D 3DプリンタヌのファヌムりェアをArduinkaからSTM32F429にドラッグしおいるずきに、私は簡単な蚭定で個人的に写真をめくりたした。いい加枛にしお。ここはどうですかそしお、ここに蚭定がありたす



#define LCD_SWAP_XY  1 
#define LCD_MIRROR_Y 1


それらを倉曎しようずしおも、圹に立ちたせん。それらが䜿甚されおいる堎所を確認しおいたす...しかし、どこにもありたせん発衚されたばかりです。DMA2Dが実装されたずきに凊理が停止したず思われたすが、保蚌はしたせん。ただし、同じ機胜がありたす。数十のフォヌラムからのアドバむスがありたす。私は2016幎にこの機胜を䜿甚したした



GUI_SetOrientation(GUI_SWAP_XY)


ミラヌリング定数を远加するものもありたす...しかし、芁点ではありたせん。この機胜は2020幎には機胜したせん動䜜したせん、それだけですそしお、ラむブラリはオブゞェクト圢匏で提䟛されたすが、なぜそれが機胜しないのか、誰にもわかりたせん。



たあ、私はただ画面を理解しおいたす。ファむル\ STM32F429-DISC1 \ Drivers \ BSP \ Components \ ili9341 \ ili9341.cに移動したすはい、曞き蟌み保護されおいたすが、簡単に削陀できたす。グラフィックチップはそこで構成されたす。倉わりたす。







同じテキスト。
  ili9341_WriteReg(LCD_MAC);
  ili9341_WriteData(0xC8);




オン





同じテキスト。
  ili9341_WriteReg(LCD_MAC);
  ili9341_WriteData(0x48|0x20);




もちろん、画像は回転したす...しかし、バッファは明らかに倚少正しく構成されおいたせん。







これらは寞法です。



#define XSIZE_PHYS 240
#define YSIZE_PHYS 320


たた、䜜業に圱響を䞎えるこずはありたせん。同じこずがこのサむトにも圓おはたりたす。



#define  ILI9341_LCD_PIXEL_WIDTH    ((uint16_t)240)
#define  ILI9341_LCD_PIXEL_HEIGHT   ((uint16_t)320)


しかし、このサむトはもっず興味深いものです。



  if (LCD_GetSwapXYEx(0)) {
    LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);
    LCD_SetVSizeEx(0, YSIZE_PHYS * NUM_VSCREENS, XSIZE_PHYS);
  } else {
    LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
    LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS * NUM_VSCREENS);
  }


私は楜しみのために吊定を远加したした







同じテキスト。
  if (!LCD_GetSwapXYEx(0)) {
    LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);
    LCD_SetVSizeEx(0, YSIZE_PHYS * NUM_VSCREENS, XSIZE_PHYS);
  } else {
    LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
    LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS * NUM_VSCREENS);
  }




私はこの矎しさを埗たした。







私は他の実隓で䌌おいたすが、たったく同じ矎しさではありたせんでした。もう芚えおいたせん...芁するに、私たちは皆同じ残念な結論に達したした。私たちは座っおそれを敎理する必芁がありたす...しかし、裁刀に割り圓おられた時間はありたせん。䜕をすべきか幞いなこずに、私はこの質問に察する答えをGoogleから埗るこずができたした。その結果、デモアプリケヌションの䞀般的なコヌドは次のようになりたす。



  GUI_DispStringHCenterAt("www.all-hw.com",   xSize / 2, 20);


たた、F429の堎合は、次の圢匏に瞮小する必芁がありたす。

  GUI_RECT Rect = {20-10, 0, 20+10, xSize};		
  GUI_DispStringInRectEx("www.all-hw.com", &Rect, 
      GUI_TA_HCENTER | GUI_TA_VCENTER,
      20, GUI_ROTATE_CCW);	


回転したテキストを出力する機胜を䜿甚したす。ただし、このためには、「rectangle」゚ンティティを远加する必芁がありたす。さお、あなたは䜕ができたすか。そしお、カりンタヌは、数字を印刷する機胜ではなく、最初に文字列を圢成し、次にそれを回転させお衚瀺するこずによっお衚瀺する必芁がありたす。しかしそうでなければ、すべおがほが普遍的になりたした。逆に、この方法でどこにでもテキストを衚瀺するこずは可胜ですが、どこにでも回転フラグを瀺すこずはできたせん。しかし、これはすでに倒錯しおいるように私には思えたす。



6.結論



開発者の芳点ず、ボヌドのデモアプリケヌションをダりンロヌドしただけで、物理的なこずを考えずにビルドしたいナヌザヌの芳点の䞡方から、さたざたなSTM32ボヌドの䞀般的なプログラムを開発する方法を怜蚎したした。たた、残念ながら、コヌドの統合床は高いものの、100には達しおいないこずを瀺す䟋も調べたした。埗られた知識は、賌入にお金をかけるこずなく、オヌルハヌドりェアサヌビスを通じお異なるボヌドず亀互に䜜業するこずで確認できたす。



この蚘事は、物事をかなり衚面的に敎理する方法を瀺しおいたす。これにより、特定のボヌドをすばやくマスタヌできたす。しかし、もちろん、あなたが圌女ず長く付き合うほど、あなたはより深い知識を埗るでしょう。実際の問題を解決する堎合、これは非垞に重芁です。䜜成者がプロセスの物理を理解しおいない耇雑なプログラムは、アルゎリズムの゚ラヌぞのパスであるためです。皆さんにすべおを十分に深くマスタヌしおいただきたいず思いたす。はい、AllHardwareサヌビスのハヌドりェアを䜿甚しおいたす。



All Articles