STM32F4キューブHAL UART。バグですか、何か不足していますか?


9

割り込みベースの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 */
  huart->State = HAL_UART_STATE_READY;

  HAL_UART_ErrorCallback(huart);
}  

HAL_UART_IRQHandler各エラーをチェックします。エラーが発生してEIEビットが設定されると、UART状態はリセットされますが、割り込み許可ビットはリセットされないため、TXE割り込みは常に生成されますが、UART_Transmit_IT関数は状態HAL_UART_STATE_READYを無効として扱い、何もしません。無限ループ。

UART_Transmit_IT機能の一部:

static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart)
  {
  uint16_t* tmp;
  uint32_t tmp1 = 0;

  tmp1 = huart->State;
  if((tmp1 == HAL_UART_STATE_BUSY_TX) || (tmp1 == HAL_UART_STATE_BUSY_TX_RX))
  {
  }
  else
  {
    return HAL_BUSY;
  }
}

Cube HALのバグですか?


3年半後、これはまだ問題です
-user8908459

回答:


4

バグです。

STフォーラムで同じ質問をしました:https : //my.st.com/d5c15f59

彼らはそれを確認した。


「my.st.com」リンクにはログインが必要です。私はこのスレッドをSTフォーラムで見つけました。これはこの問題の報告だと思います。ログインせずにアクセスできるので、読者はそれが役立つかもしれません。
SamGibson 2016年

0

MCUの最新バージョンのCube HALをダウンロードしようとしましたか?

私のHAL_UART_Transmit_IT()関数はあなたのものとは非常に異なっているようです。たぶんあなたはバグのある古いバージョンを持っています。

st.comにアクセスして、最新バージョンのCube HALを検索してください。アーカイブの中には、USARTの例があります。


HAL_UART_Transmit_ITUART_Transmit_ITは異なる機能です。最初は割り込みを設定するだけで、2番目は実際にデータを送信します
rublag

はい、しかし、2番目の関数は、ユーザーが直接ではなく、他のHAL関数によってのみ呼び出すことができることを知っていますか?そして、私は自分のHALソースファイルを開いて、UART_Transmit_ITと、上記で貼り付けた部分とは異なるファイルを見つけました。まだバグがあると思われる場合のその他のオプションは、同じ質問をstフォーラムに書き込むことです。
Gabriel Rezende Germanovix 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.