【STM32H5开发板】I3C总线和I2C总线设备的兼容性测试
[复制链接]
STM32H563有I3C总线支持,I3C的速度要比I2C高很多可以支持到12.5MHZ,I3C总线与传统的I2C设备仍然是兼容的,增加了软中断功能。但是我手头没有I3C的设备,而且我个人也不怎么喜欢I2C设备,主要是I2C是双向的总线,这个在隔离电路中很难实现。相比较更喜欢SPI设备。这次的测试还是使用OLED屏做测试,只是采用的是I2C总线。
首先还是接口选择,
本次选择的是
PB8 <-----> SCL
PB9 <-----> SDA
VCC<----->VCC
GND<----->GND
电源和地
主要是I2C的速度
开始我使用的是默认的100K,后来改成200K发现也可以。其它直接默认就可以。
设置完成后,生成程序。程序主要是两个ssd1306_fonts.c和ssd1306.c,这是我以前找的SSD1306的驱动,将内容修改成需要的。又原来的#define SSD1306_USE_SPI改成#define SSD1306_USE_I2C,引脚修改一下
#define STM32H5
#define SSD1306_USE_I2C
//#define SSD1306_DC_Port
//#define SSD1306_DC_Pin
//#define SSD1306_Reset_Port
//#define SSD1306_Reset_Pin
#ifndef __SSD1306_H__
#define __SSD1306_H__
主程序较为简单和SPI是一样的
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ICACHE_Init();
MX_ADC1_Init();
MX_USART3_UART_Init();
MX_SPI3_Init();
/* USER CODE BEGIN 2 */
ssd1306_Init();
ssd1306_Fill(Black);
ssd1306_UpdateScreen();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
ssd1306_SetCursor(0, 0);
ssd1306_WriteString(sayStr, Font_11x18, White);
printf("Hello,world!\n");
ssd1306_UpdateScreen();
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
先进行初始化,然后显示就可以了。
效果如图
后记:
这次测试出现了较为奇怪的现象:我的程序烧写后不能马上执行,而且按硬件复位按钮也不行,板子仍然没有反应。我把前几天的程序又烧进去都是这个现象,板子只能通过keil的debug启动,而且还需要多次按“执行”才可以启动。不知道为什么。到目前为止还没有解决。
|