以sh1108为主控的OLED每次只能刷新一行或一列,目前的刷新方式是使用硬件SPI每次发送一字节,现在想使用DMA刷新全屏,想法是使用DMA刷新一行后再在中断里换行,直到刷新完全屏,弄了几次没成功,有没有代码可以参考一下,希望大佬指点一下
[C] 纯文本查看 复制代码 uint8_t OLED_GRAM[128][20];
void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
{
uint8_t i;
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
// SPI1_WriteByte(dat);
HAL_SPI_Transmit(&hspi1,&dat,1, 1000);
OLED_CS_Set();
OLED_DC_Set();
}
//更新显存到OLED
void OLED_Refresh(void)
{
uint8_t i,n;
for(i=0;i<20;i++)
{
OLED_WR_Byte(0xb0,OLED_CMD); //设置行起始地址
OLED_WR_Byte(i,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD); //设置低列起始地址
OLED_WR_Byte(0x11,OLED_CMD); //设置高列起始地址
for(n=0;n<128;n++)
OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);
}
}
|