學習STM32已經有一段時間了,很幸運編程正式從工作之余的學習變成工作中的所需,而幸運的同時也帶來了一些壓力和困擾。一個問題卡主,就會耽誤工作進度,而對於半吊子的我而言,程序中出現問題已經變成家常便飯。
今天來記錄一下近期工作中遇到的問題。目前的項目是通過STM32F0這款MCU,與上位機(主機)(PC->labview程序)實現通信,並與下下位機(從機)(公司產品光模塊->MCU->ADcU7023)實現通信,做到上位機對模塊寄存器的R/W。試程序試了好久才把STM32和PC用HAL庫的CDC類通信虛擬串口調通,現在硬件I2C通信又除了問題,以下是問題細節:
1、使用HAL庫自帶的stm32072b_eval.c中自帶的幾個I2C讀寫函數,卻發現在主程序中顯示兩個函數Undefined Symbol。。。
這兩個函數在stm32072b_eval.c中定義了,出現error之后我在stm32072b_eval.h中也定義了一遍,還是error,后來干脆嘗試在main.c中加上extern 定義,也不行,因為這個問題,放棄使用HAL庫eval的I2C函數了。。
2、接着使用標准庫的I2C函數移植成HAL庫的,但是又發現如下問題,在標准庫中,獲取I2C flag Status的函數 I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG)在HAL庫中變成了 __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__),但是后者的第一個參數用I2C名代替卻一直報錯。后來發現第一個參數@param __HANDLE__ specifies the I2C Handle.但是替換成I2C_HandleTypeDef中的定義,還是報錯,很無奈。
目前就只能再探索,看能不能解決問題1,如果解決了,那基本上I2C的通信就不成問題,如果能解決問題2,對於我這種新手在庫函數之間進行移植還是存在一定的挑戰的。