【GD32L233C-START 评测】-八、普通GPIO方式驱动1.5寸OLED屏
<p>几次测试下来,一直在通过SPI和I2C方式驱动OLED,结果在I2C驱动中遇到了很多的难题,至今没点亮哈。</p><p>偶然看到一个帖子,模拟SPI方式驱动OLED,仔细研究发现,通用GPIO就能够驱动OLED,于是做了本次评测。</p>
<p>为方便连接,就用了GD32L233C左侧的A口连接到OLED屏</p>
<pre>
<code>#define RCU_OLED_PORT RCU_GPIOA
#define OLED_CS_PORT GPIOA
#define OLED_CS_PIN GPIO_PIN_5
#define OLED_RST_PORT GPIOA
#define OLED_RST_PIN GPIO_PIN_3
#define OLED_DC_PORT GPIOA
#define OLED_DC_PIN GPIO_PIN_4
#define RCU_I2C_PORT RCU_GPIOA
#define I2C1_SCL_Pin GPIO_PIN_1
#define I2C1_SCL_GPIO_Port GPIOA
#define I2C1_SDA_Pin GPIO_PIN_2
#define I2C1_SDA_GPIO_Port GPIOA</code></pre>
<p>各管脚只进行简单的GPIO初始化,代码就不写了哈</p>
<p>OLED的核心驱动代码如下</p>
<pre>
<code>void OLED_SendData(uint8_t data)
{
uint8_t i = 0;
OLED_SCL_0;
for(i = 0;i < 8;i++)
{
OLED_SCL_0;
if (data & 0x80)
{
OLED_SDA_1;
}
else
{
OLED_SDA_0;
}
OLED_SCL_1;
data <<= 1;
}
}
void OLED_WriteReg(uint8_t addr)
{
//SCK_0();
//OLED_CS_0;
OLED_DC_0; //当DC = 0时写命令
OLED_SendData(addr);
//OLED_CS_1;
OLED_DC_1;
}
void OLED_WriteData(uint8_t data)
{
//OLED_CS_0;
OLED_DC_1; //当DC = 1时写数据
OLED_SendData(data);
//OLED_CS_1;
OLED_DC_0;
}</code></pre>
<p>其他的代码都跟前面的评测一致</p>
<p>发现能够完美驱动OLED屏,甚至感觉速度不差</p>
<p> 连接线的照片</p>
<p> </p>
<p> 希望对OLED驱动无头绪的朋友有帮助。</p>
<p><a href="https://bbs.eeworld.com.cn/forum.php?mod=attachment&aid=NTkzNDU3fGI5NGZlMzM0OTM2NjMzNTU0NzMxZjA5YTg2MDdjY2RmfDE2NDc1MDUwMTk%3D&request=yes&_f=.rar" target="_blank">完整的项目文件</a></p>
<p>在I2C驱动中遇到的是什么问题</p>
Jacktang 发表于 2022-3-18 07:28
在I2C驱动中遇到的是什么问题
<p>估计是地址的问题,一直没找到合适的资料,查到有效的地址</p>
页:
[1]