[活动专区] 【N32G430开发板试用】SPI_OLED

[复制链接]
814|3
 楼主| 9999jim 发表于 2022-7-11 12:17 | 显示全部楼层 |阅读模式
@安小芯        感谢国民技术及21ic提供的开发板,收到板后,经过几天的摸索,上个OLED屏测试一下。手上的屏幕是SPI接口的,这里仅以软件的方式来实现。本程序使用GPIOB连接显示屏,测试程序占用以下管脚:
#define OLED_SCL             GPIO_PIN_11  
#define OLED_SDA            GPIO_PIN_10  
#define OLED_RES            GPIO_PIN_2
#define OLED_DC             GPIO_PIN_1  
#define OLED_CS             GPIO_PIN_0


实现高低电位控制语句如下:
#define OLED_SCL_Clr() GPIOB->PBC = OLED_SCL; SysTick_Delay_Us(2);//CLK
#define OLED_SCL_Set() GPIOB->PBSC = OLED_SCL;SysTick_Delay_Us(2);  

#define OLED_SDA_Clr() GPIOB->PBC = OLED_SDA;SysTick_Delay_Us(2);//DIN
#define OLED_SDA_Set() GPIOB->PBSC = OLED_SDA;SysTick_Delay_Us(2);

#define OLED_RES_Clr() GPIOB->PBC = OLED_RES;SysTick_Delay_Us(2);//RES
#define OLED_RES_Set() GPIOB->PBSC = OLED_RES;SysTick_Delay_Us(2);

#define OLED_DC_Clr() GPIOB->PBC = OLED_DC;SysTick_Delay_Us(2);//DC
#define OLED_DC_Set() GPIOB->PBSC = OLED_DC;SysTick_Delay_Us(2);

#define OLED_CS_Clr() GPIOB->PBC = OLED_SDA;SysTick_Delay_Us(2);//CS
#define OLED_CS_Set() GPIOB->PBSC = OLED_SDA;SysTick_Delay_Us(2);


GPIO初始化及OLED初始化函数如下:
  1. void OLED_Init(void)
  2. {         
  3.     GPIO_InitType GPIO_InitStructure;
  4.           RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOB);
  5. //                GPIO_Structure_Initialize(&GPIO_InitStructure);
  6. //    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
  7.     GPIO_InitStructure.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10|GPIO_PIN_11;
  8.     GPIO_InitStructure.GPIO_Mode  = GPIO_MODE_OUT_PP;
  9.     GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
  10. //    GPIO_InitStructure.GPIO_Current = GPIO_DS_4MA;
  11.           GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);

  12.         OLED_RES_Clr();
  13. SysTick_Delay_Ms(100);
  14.         OLED_RES_Set();        
  15. SysTick_Delay_Ms(100);

  16.     OLED_WR_Byte(0xAE,OLED_CMD);
  17.     OLED_WR_Byte(0x02,OLED_CMD);
  18.     OLED_WR_Byte(0x10,OLED_CMD);
  19.     OLED_WR_Byte(0x40,OLED_CMD);
  20.     OLED_WR_Byte(0x81,OLED_CMD);
  21.     OLED_WR_Byte(0xff,OLED_CMD);
  22.     OLED_WR_Byte(0xA1,OLED_CMD);
  23.     OLED_WR_Byte(0xC8,OLED_CMD);
  24.     OLED_WR_Byte(0xA6,OLED_CMD);
  25.     OLED_WR_Byte(0xA8,OLED_CMD);
  26.     OLED_WR_Byte(0x3f,OLED_CMD);
  27.     OLED_WR_Byte(0xD3,OLED_CMD);
  28.     OLED_WR_Byte(0x00,OLED_CMD);
  29.     OLED_WR_Byte(0xd5,OLED_CMD);
  30.     OLED_WR_Byte(0x80,OLED_CMD);
  31.     OLED_WR_Byte(0xD9,OLED_CMD);
  32.     OLED_WR_Byte(0xF1,OLED_CMD);
  33.     OLED_WR_Byte(0xDA,OLED_CMD);
  34.     OLED_WR_Byte(0x12,OLED_CMD);
  35.     OLED_WR_Byte(0xDB,OLED_CMD);
  36.     OLED_WR_Byte(0x40,OLED_CMD);
  37.     OLED_WR_Byte(0x20,OLED_CMD);
  38.     OLED_WR_Byte(0x02,OLED_CMD);
  39.     OLED_WR_Byte(0x8D,OLED_CMD);
  40.     OLED_WR_Byte(0x14,OLED_CMD);
  41.     OLED_WR_Byte(0xA4,OLED_CMD);
  42.     OLED_WR_Byte(0xA6,OLED_CMD);
  43.     OLED_WR_Byte(0xAF,OLED_CMD);
  44.     OLED_WR_Byte(0xAF,OLED_CMD);}
主程序如下:

  1. int main(void)
  2. {
  3. OLED_Init();

  4. OLED_Clear(0);

  5. OLED_ShowString(0,0,"n32g430",16);

  6. OLED_ShowString(0,2,"OLED TEST",16);
  7.         
  8. OLED_ShowString(0,4,"21.COM",16);

  9. }
实际运行如图:
N32_SPI_OLED.jpg

程序已打包,感谢各位观看~ spi_oled.zip (1.74 MB, 下载次数: 11)







yangxiaor520 发表于 2022-7-13 08:37 来自手机 | 显示全部楼层
模拟SPI
huquanz711 发表于 2022-7-14 18:38 来自手机 | 显示全部楼层
这个尺寸的OLED也是常用
abner_ma 发表于 2022-7-15 08:58 | 显示全部楼层
模拟SPI  不整个硬件SPI+DMA
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

234

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部