1,前言
单片机型号:STM32F407
编程环境 :STM32CubeMX + Keil v5
硬件连接 :串口1,ADC1CH5--->PA5
注:本工程在1,STM32CubeMX工程基础(配置Debug、时钟树)基础上完成。
2,STM32CubeMX配置IIC工程
首先开启STM32的IIC接口,STM32F407一共有三个IIC接口,本文使用接口I2C1接口1。
在Connectivity(1)下方点击I2C1(2)启用IIC接口1。点击通道I2C(3)下拉选择开启该接口,此时我们会在(4)位置看到对应的引脚PB6/PB7已经设置完成。
3,STM32HAL库常用IIC函数
1,I2C写函数HAL_I2C_Mem_Write。输入量hi2c为句柄, 输入量DevAddress为设备地址, 输入量 MemAddress为写入地址, 输入量MemAddSize为存储大小, 输入量*pData为数据传输缓冲区, 输入量Size为数据字节大小, 输入量Timeout为超时时间。
/*** @brief 在阻塞模式下向特定内存地址写入一定数量的数据* @param hi2c I2C_HandleTypeDef指向包含* 指定 I2C 的配置信息。* @param DevAddress 目标设备地址:设备 7 位地址值* 在调用接口之前必须向左移动* @param MemAddress 内部存储器地址* @param MemAddSize 内存地址的大小* @param pData 指向数据缓冲区的指针* @param 大小 要发送的数据量* @param 超时超时持续时间* @retval HAL 状态*/
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
2,OLED写命令函数。
void WriteCmd(uint8_t I2C_Command)
{HAL_I2C_Mem_Write(&hi2c1,OLED_ADD,0x00,I2C_MEMADD_SIZE_8BIT,&I2C_Command,1,100);
}
3,OLED写数据函数。
void WriteDat(uint8_t I2C_Data)
{HAL_I2C_Mem_Write(&hi2c1,OLED_ADD,0x40,I2C_MEMADD_SIZE_8BIT,&I2C_Data,1,100);
}
4,编程实战(OLED显示)
首先添加两个.c/.h文件到工程中,然后修改主函数。main.c主函数如下所示,编译后0错误0警告。
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_I2C1_Init();/* USER CODE BEGIN 2 */OLED_Init();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){ OLED_ShowString(0,0,(uint8_t *)"HelloWorld!",2);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}