因為要用到I2C和流量傳感器通信,也是第一次使用,直接使用stm32F1 HAL庫來實現初始化,在STM32F10E評估板上直接和傳感器通信,一次性成功通過。
當把調試好的流量計驅動程序往實際的板子上應用的時候發現會死等在某一處如下:
while(__HAL_I2C_GET_FLAG(hi2c, Flag) != RESET)
{
/* Check for the Timeout */
if(Timeout != HAL_MAX_DELAY).......
以上代碼是HAL庫中的
網上查閱是I2C的固有BUG,真的是這樣嗎,官方的HAL庫更新了好幾代了都。。。
嘗試
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(i2cHandle->Instance==I2C2)
{
/* USER CODE BEGIN I2C2_MspInit 0 */
/*自已加了這一句代碼,提前打開時鍾,能解決前面的問題*/
__HAL_RCC_I2C2_CLK_ENABLE();
/* USER CODE END I2C2_MspInit 0 */
/**I2C2 GPIO Configuration
PB10 ------> I2C2_SCL
PB11 ------> I2C2_SDA
*/
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Peripheral clock enable */
__HAL_RCC_I2C2_CLK_ENABLE();
非常奇怪的時,在STM32f10E評估板上不用對CUBE生成的代碼更改。
沒有深入研究,好用就行。
