学习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,对于我这种新手在库函数之间进行移植还是存在一定的挑战的。