我想用新唐的硬件I2C驱动OLED模块,之前在STM32上做的是可以的。现在换成相同功能的新唐的函数发现失败了,不知道是不是我哪儿没有配置正确。
- void OLED_Write_cmd(uint8_t cmd)
- {
- // HAL_I2C_Mem_Write(&hi2c2, 0x78, 0x00, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0x100);
- while(I2C_WriteByteOneReg(I2C0,OLED_ADDR,0x00,cmd));
- }
- void OLED_Write_data(uint8_t data)
- {
- // HAL_I2C_Mem_Write(&hi2c2, 0x78, 0x40, I2C_MEMADD_SIZE_8BIT, &data, 1, 0x100);
- while(I2C_WriteByteOneReg(I2C0,OLED_ADDR,0x40,data));
- }
复制代码
被注释掉的是原来STM32的库函数。下面是对应的新唐的BSP库函数。
初始化中跟I2C0时钟和管脚的配置为
- /* Enable I2C0 peripheral clock */
- CLK_EnableModuleClock(I2C0_MODULE);
- /* Set I2C0 multi-function pins */
- SYS->GPG_MFPL = SYS_GPG_MFPL_PG1MFP_I2C0_SDA | SYS_GPG_MFPL_PG0MFP_I2C0_SCL;
复制代码
不知道还要配置什么不,我看的几个例子中基本上也就配置这些。
然后在程序开始设置一下速度
- void I2C0_Init(void)
- {
- /* Open I2C module and set bus clock */
- I2C_Open(I2C0, 100000);
- /* Get I2C0 Bus Clock */
- printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0));
- }
复制代码
不知道为何没法点亮屏幕。GPIO模拟的可以,麻烦版主帮忙试试啊。
|