欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STM32 cubemx生成KEIL5代碼后顯示參數(shù)重定義如何解決? [打印本頁]

作者: 鄉(xiāng)村男神    時間: 2020-3-17 21:53
標題: STM32 cubemx生成KEIL5代碼后顯示參數(shù)重定義如何解決?
SignalGenerator_v0.1\SignalGenerator_v0.1: Error: L6200E: Symbol USART1_IRQHandler multiply defined (by stm32f1xx_it.o and usart.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 0 warning and 1 error messages.
"SignalGenerator_v0.1\SignalGenerator_v0.1" - 1 Error(s), 0 Warning(s).
Target not created.
兩個確認都有定義USART_1IRQHandler,
這個是STM32F1XX.IT.C的定義段
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}
這個是USART.C的定義段
void USART1_IRQHandler(void)                       
{
        u32 timeout=0;
      
        HAL_UART_IRQHandler(&huart1);        //調(diào)用HAL庫中斷處理公用函數(shù)
      
        timeout=0;
    while (HAL_UART_GetState(&huart1) != HAL_UART_STATE_READY)//等待就緒
        {
         timeout++;////超時處理
     if(timeout>HAL_MAX_DELAY) break;               
      
        }

        timeout=0;
        while(HAL_UART_Receive_IT(&huart1, (u8 *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)//一次處理完成之后,重新開啟中斷并設(shè)置RxXferCount為1
        {
         timeout++; //超時處理
         if(timeout>HAL_MAX_DELAY) break;      
        }
}

請問各位高手這該如何處理?


作者: 鄉(xiāng)村男神    時間: 2020-3-17 21:56
補充一下,兩個片段只要名字稍有差別就會出現(xiàn)大量編譯錯誤(原因在于項目文件比較多),所以改函數(shù)名的方法不可行,麻煩各位了。

作者: jamiliang    時間: 2020-3-20 01:32
在:HAL_UART_IRQHandler函數(shù)中去找 callback,可以找hal 的uart例程看看
HAL庫中的這些callback是weak 申明,是可以被重寫的
USART1_IRQHandler已經(jīng)是hal uart庫內(nèi)部實現(xiàn)函數(shù)了,沒必要重寫

而且你在終端函數(shù)里使用while容易阻塞,中斷函數(shù)內(nèi)都是只做簡單事情,如計數(shù)等

作者: Kingsely    時間: 2020-3-20 09:46
把這個是STM32F1XX.IT.C中的函數(shù)屏蔽掉就OK了
作者: 墨梔    時間: 2020-3-20 16:19
檢查一下USART.h文件里有沒有聲明這個函數(shù),頭文件里面已經(jīng)包含這個函數(shù)了
作者: adject    時間: 2020-3-20 17:38
把STM32F1XX.IT.C 定義的 void USART1_IRQHandler(void)  改成 __weak void USART1_IRQHandler(void)

WEAK:弱定義,如果外部文件聲明了標號,則優(yōu)先使用外部文件定義的標號,如果外部文件沒有定義也不出錯。需要注意的是:這個不是ARM的指令,是編譯器的,放在這里是為了方便

作者: tomboy    時間: 2020-3-20 20:54
cubeMX生成代碼把所有中斷處理函數(shù)都生成在 stm32f1xx_it.c 里,去注釋掉就行。改函數(shù)名當然不行,中斷函數(shù)名固定這個。另外使用官方的中斷函數(shù)有問題的,長度固定、數(shù)據(jù)發(fā)多了會死掉,自己重寫中斷函數(shù)比可控。
作者: tomboy    時間: 2020-3-20 20:56
方法二:重寫串口中斷函數(shù) /**   * @brief        串口中斷函數(shù),在stm32f0xx_it.c中注釋同名   * @param        None   * @retval        None   */ void USART1_IRQHandler(void) {         uint8_t Res;                  if((__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET))//接收中斷         {                 Res = USART1->RDR;//讀取接收到的數(shù)據(jù)                 //接收和幀完成判斷         }          /* USER CODE END USART1_IRQn 1 */ }
作者: tomboy    時間: 2020-3-20 20:58
自己補充一下接收數(shù)據(jù)和結(jié)束幀處理吧,另外mian函數(shù)里要HAL_UART_Receive_IT(&huart1,&uart_Rx_Buf,1);//打開串口中斷




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1