/* USER CODE BEGIN I2C3_MspInit 0 */ /* USER CODE END I2C3_MspInit 0 */ /** Initializes the peripherals clocks */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C3; PeriphClkInitStruct.I2c3ClockSelection = RCC_I2C3CLKSOURCE_SYSCLK; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClk...
硬件I2C的IO管脚配置为AF_OD模式,因此使用I2C时必须外加上拉电阻,阻值可以选择4.7k。 初始化 使用cubemx配置好对应的参数,可自动生成初始代码MX_I2C1_Init(),大致流程如下 1.声明I2C的初始化结构体I2C_HandleTypeDef,并赋值 2.调用HAL_I2C_MspInit函数 3.配置好相就应的通信速度,地址模式等参数 4.如果使中断或...
assert_param(IS_I2C_NO_STRETCH(hi2c->Init.NoStretchMode)); if(hi2c->State == HAL_I2C_STATE_RESET) { /* Allocate lock resource and initialize it */ hi2c->Lock = HAL_UNLOCKED; /*配置相关硬件: GPIO, CLOCK, NVIC */ HAL_I2C_MspInit(hi2c); } hi2c->State = HAL_I2C_STATE_BUSY; ...
HAL_I2C_Master_Receive(&hi2c, 0xD1, data, 5, HAL_MAX_DELAY);*temperature = ((data[2] <...
HAL_I2C_Slave_Receive_IT(&hi2c1, I2CBuf_RxData, sizeof(I2CBuf_RxData)); // 启动中断接收 在...
2、初始化I2C引脚和中断 参考代码: 注:这个代码可以用STM32CubeMX自动生成 voidHAL_I2C_MspInit(I2C_HandleTypeDef*hi2c){GPIO_InitTypeDef GPIO_InitStruct={0};if(hi2c->Instance==I2C1){// 配置GPIO__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_6|GPIO_PIN_7;GPIO_InitStruct.Mode=GPI...
具体依据没有找到,不过在HAL的说明文档中有要求这样的初始化顺序,同时其他的模块如SPI或UART,也都是先初始化模块(SPI,UART),再初始化GPIO void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(i2cHandle->Instance==I2C1) ...
HAL_I2C_DeInit(&hi2c1); //释放IO口为GPIO,复位句柄状态标志 HAL_I2C_Init(&hi2c1); //这句重新初始化I2C控制器 } else // 。。。I2C无错误时的正常程序 } 1. 2. 3. 4. 5. 6. 7. 8. 4.2 子程序的改动,加7行代码: 上面HAL_I2C_Init(&hi2c1)函数会调用HAL_I2C_MspInit(hi2c)函数,这个...
I2C总线的速度配置函数是HAL_I2C_MspInit()。该函数用于配置I2C总线的时钟频率和占空比等参数。函数声明如下: void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c); 在该函数中,我们需要根据具体的硬件平台和需求来配置I2C总线的时钟源和分频系数等参数。 3. I2C发送开始信号函数 I2C发送开始信号函数是HAL_I2C_Master_Tr...
此外,HAL_I2C_MspInit()函数作为I2C接口的MSP函数,在HAL_I2C_Init()函数中被调用。它的主要任务是对I2C1接口的复用引脚PB8和PB9进行GPIO初始化,并使能I2C1外设时钟。最后,为了实现项目的具体功能,还需要编写用户程序,这些程序主要位于main.c文件中。由于篇幅限制,此处省略了与以往章节中相同功能的代码。