HAL库 IIC写和读函数
IIC写函数:HAL_I2C_Master_Transmit ();
IIC读函数:HAL_I2C_Master_Receive ();写和读函数中的从机的地址最后一位由外部硬件电路控制。
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 */
uint8_t array[] = {0x00,0x8d,0x14,0xa5};//点亮OLED屏幕的指令
HAL_I2C_Master_Transmit (&hi2c1,0x78,array ,5,HAL_MAX_DELAY);//sizeof动态测量数组的长度
//sizeof(array)/sizeof(array[0]);替换数据长度5
//读取OLED的寄存处,OLED亮寄存器的D6变成0,不亮OLED寄存器的D6是1,参考OLED屏幕的参考手册
uint8_t dateack;
HAL_I2C_Master_Receive (&hi2c1,0x78,&dateack ,1,HAL_MAX_DELAY);
//取出数据的中的第6位,屏幕开启d6=0,板载LED亮,屏幕关闭d6=1,板载LED灭
if((dateack & (0x01<<6))==0)
{
HAL_GPIO_WritePin (GPIOC ,GPIO_PIN_13 ,GPIO_PIN_RESET );
}
else
{
HAL_GPIO_WritePin (GPIOC ,GPIO_PIN_13,GPIO_PIN_SET );
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/**
sizeof(array)/sizeof(array[0]);利用sizeof关键字计算数组中的个数。
原理
sizeof
是 C 和 C++ 中的一个运算符,用于返回一个对象或者类型所占的字节数。sizeof(array)
会返回整个数组所占用的内存字节数。sizeof(array[0])
会返回数组中单个元素所占用的内存字节数。- 将整个数组占用的字节数除以单个元素占用的字节数,就可以得到数组中元素的个数。
数组中所有的字节数(被SIZEOF返回)除以一个数组的字节数等于数组的位的个数。