0

青いピル ボード (stm32f103c8t6) でフラッシュ メモリを読み書きする必要があり、このチュートリアルhttps://www.youtube.com/watch?v=BKgh896Bj8Q&t=32sに従いましたが、Keil uVision 5 IDE を使用したところ、このエラーが発生しました。

" #エラー 167: 型 "uint32_t" の引数は型 "const char *" のパラメーターと互換性がありません"

これが私が使用した.cライブラリです

    static uint32_t GetPage(uint32_t Address)
{
  for (int indx=0; indx<128; indx++)
  {
      if((Address < (0x08000000 + (1024 *(indx+1))) ) && (Address >= (0x08000000 + 1024*indx)))
      {
          return (0x08000000 + 1024*indx);
      }
  }

  return -1;
}

uint32_t Flash_Write_Data (uint32_t StartPageAddress, uint32_t * DATA_32)
{

    static FLASH_EraseInitTypeDef EraseInitStruct;
    uint32_t PAGEError;
    int sofar=0;

    int numberofwords = (strlen(DATA_32)/4) + ((strlen(DATA_32) % 4) != 0);

      /* Unlock the Flash to enable the flash control register access *************/
       HAL_FLASH_Unlock();

       /* Erase the user Flash area*/

      uint32_t StartPage = GetPage(StartPageAddress);
      uint32_t EndPageAdress = StartPageAddress + numberofwords*4;
      uint32_t EndPage = GetPage(EndPageAdress);

       /* Fill EraseInit structure*/
       EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
       EraseInitStruct.PageAddress = StartPage;
       EraseInitStruct.NbPages     = ((EndPage - StartPage)/FLASH_PAGE_SIZE) +1;

       if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
       {
         /*Error occurred while page erase.*/
          return HAL_FLASH_GetError ();
       }

       /* Program the user Flash area word by word*/

       while (sofar<numberofwords)
       {
         if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, StartPageAddress, DATA_32[sofar]) == HAL_OK)
         {
             StartPageAddress += 4;  // use StartPageAddress += 2 for half word and 8 for double word
             sofar++;
         }
         else
         {
           /* Error occurred while writing data in Flash memory*/
             return HAL_FLASH_GetError ();
         }
       }

       /* Lock the Flash to disable the flash control register access (recommended
          to protect the FLASH memory against possible unwanted operation) *********/
       HAL_FLASH_Lock();

       return 0;
}


void Flash_Read_Data (uint32_t StartPageAddress, __IO uint32_t * DATA_32)
{
    while (1)
    {
        *DATA_32 = *(__IO uint32_t *)StartPageAddress;
        if (*DATA_32 == 0xffffffff)
        {
            *DATA_32 = '\0';
            break;
        }
        StartPageAddress += 4;
        DATA_32++;
    }
}

void Convert_To_Str (uint32_t *data, char *str)
{
    int numberofbytes = ((strlen(data)/4) + ((strlen(data) % 4) != 0)) *4;

    for (int i=0; i<numberofbytes; i++)
    {
        str[i] = data[i/4]>>(8*(i%4));
    }
}

main.c では、Flash_Write_Data(0x0801FC00,data); を使用しました。.c および .h ファイルからのすべてのコマンドであり、Keil IDE で CubeMX も使用しました (違いがあるかどうかはわかりません)。

キールの構成の問題かどうかはわかりません。チュートリアルで使用されている .c および .h ライブラリはそれほど複雑ではありません。インターネットで検索しましたが、これは非常に一般的なエラーですが、解決策が見つかりませんでした。PAGE MEMORY TYPEを使用したcortex M3のフラッシュメモリについては、あまり見つけられませんでした。誰かがこのエラーを解決したり、cortex M3 のフラッシュ メモリの書き込み/読み取りを手伝ってくれたりしたら、私は感謝します。

4

0 に答える 0