前一篇使用 I2C 接口点亮了 SSD1306 驱动的 OLED 屏,https://bbs.elecfans.com/jishu_2469592_1_1.html
这次更进一步,使用 SPI 接口点亮 SSD1327 驱动的 128x128 OLED 屏
SSD1327 是一款 128x128像素的 OLED 控制器,并且能够支持 16 位灰度显示,效果如图:

接口定义如下:
引脚 |
功能 |
---|
P302 |
SCK |
P207 |
MOSI |
P112 |
DC |
P113 |
RST |
GND |
CS |
使能硬件 SPI0 功能,在 RASC 上配置如下:

使能后即可使用以下函数初始化 SPI0 接口:
fsp_err_t err = R_SPI_Open(&g_spi0_ctrl, &g_spi0_cfg)
使用以下函数发送数据:
fsp_err_t err = R_SPI_Write(&g_spi1_ctrl, &dat, 1, SPI_BIT_WIDTH_8_BITS);
未使用 DMA,采用的是中断清除标志位方式进行 SPI 数据发送,代码如下:
void SPI0_Tx1B(u16 dat)
{
while (gf_SPI0_Busy);
gf_SPI0_Busy = 1;
fsp_err_t err = R_SPI_Write(&g_spi0_ctrl, &dat, 1, SPI_BIT_WIDTH_8_BITS);
assert(err == FSP_SUCCESS);
}
中断函数只会清除发送忙标志位:
void spi_callback (spi_callback_args_t * p_args)
{
if (SPI_EVENT_TRANSFER_COMPLETE == p_args->event)
{
gf_SPI0_Busy = 0;
}
}
调用以下代码,绘制出灰阶条:

|