久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3144|回復: 8
收起左側

STM32 cubemx生成KEIL5代碼后顯示參數重定義如何解決?

[復制鏈接]
回帖獎勵 100 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次(中獎概率 80%)
ID:694525 發表于 2020-3-17 21:53 | 顯示全部樓層 |閱讀模式
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);        //調用HAL庫中斷處理公用函數
      
        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)//一次處理完成之后,重新開啟中斷并設置RxXferCount為1
        {
         timeout++; //超時處理
         if(timeout>HAL_MAX_DELAY) break;      
        }
}

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

回復

使用道具 舉報

ID:694525 發表于 2020-3-17 21:56 | 顯示全部樓層
補充一下,兩個片段只要名字稍有差別就會出現大量編譯錯誤(原因在于項目文件比較多),所以改函數名的方法不可行,麻煩各位了。
回復

使用道具 舉報

ID:711971 發表于 2020-3-20 01:32 | 顯示全部樓層
在:HAL_UART_IRQHandler函數中去找 callback,可以找hal 的uart例程看看
HAL庫中的這些callback是weak 申明,是可以被重寫的
USART1_IRQHandler已經是hal uart庫內部實現函數了,沒必要重寫

而且你在終端函數里使用while容易阻塞,中斷函數內都是只做簡單事情,如計數等
回復

使用道具 舉報

ID:466599 發表于 2020-3-20 09:46 | 顯示全部樓層
把這個是STM32F1XX.IT.C中的函數屏蔽掉就OK了
回復

使用道具 舉報

ID:389856 發表于 2020-3-20 16:19 | 顯示全部樓層
檢查一下USART.h文件里有沒有聲明這個函數,頭文件里面已經包含這個函數了
回復

使用道具 舉報

ID:419968 發表于 2020-3-20 17:38 | 顯示全部樓層
把STM32F1XX.IT.C 定義的 void USART1_IRQHandler(void)  改成 __weak void USART1_IRQHandler(void)

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

使用道具 舉報

ID:513241 發表于 2020-3-20 20:54 | 顯示全部樓層
cubeMX生成代碼把所有中斷處理函數都生成在 stm32f1xx_it.c 里,去注釋掉就行。改函數名當然不行,中斷函數名固定這個。另外使用官方的中斷函數有問題的,長度固定、數據發多了會死掉,自己重寫中斷函數比可控。
回復

使用道具 舉報

ID:513241 發表于 2020-3-20 20:56 | 顯示全部樓層
方法二:重寫串口中斷函數 /**   * @brief        串口中斷函數,在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;//讀取接收到的數據                 //接收和幀完成判斷         }          /* USER CODE END USART1_IRQn 1 */ }
回復

使用道具 舉報

ID:513241 發表于 2020-3-20 20:58 | 顯示全部樓層
自己補充一下接收數據和結束幀處理吧,另外mian函數里要HAL_UART_Receive_IT(&huart1,&uart_Rx_Buf,1);//打開串口中斷
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久电影 | 日韩精品在线一区 | 亚洲精品1 | 久久99精品久久久久久琪琪 | 99热在线播放| aaa一区 | 久久精品亚洲一区 | 亚洲视频精品 | 毛片免费观看 | 日韩欧美第一页 | 国产www成人 | 天天操天天拍 | 亚洲精品中文在线观看 | 蜜桃在线播放 | 天天操 夜夜操 | 国产精品99久久久久久久久久久久 | 老司机精品福利视频 | 天天狠狠 | 亚洲免费在线 | 精品日韩在线观看 | 中文字幕亚洲一区二区va在线 | 日韩在线观看中文字幕 | 欧美日韩一区二区三区在线观看 | 亚洲一区久久久 | 天堂网中文 | a级毛片免费高清视频 | 久久久久久久久99 | 精品久久久久久亚洲精品 | 午夜网| 国产一级毛片视频 | 中文字幕一区二区三区不卡 | 日韩视频中文字幕 | 国产欧美精品一区二区三区 | 日韩中文字幕在线不卡 | 日韩中文字幕在线观看视频 | 久久i| 日本久久www成人免 成人久久久久 | 日本人爽p大片免费看 | 久久久久亚洲精品 | www.四虎.com | 亚洲欧美激情四射 |