3513|0

274

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

【沁恒RISC-V内核 CH582】5-SPI驱动OLED [复制链接]

  本帖最后由 manhuami2007 于 2022-3-13 20:20 编辑

CH582提供的SPI支持模式0和模式3,可以配置为3线或者2线模式,支持主机和从机模式,支持DMA。SPI还支持FIFO,相当于有8个数据寄存器,在小数量数据收发的时候,即使是用轮询方式,也能提高CPU的效率。官方提供的SPI的库函数用起来还是挺方便的。

这次使用的OLED是用的SPI接口,引脚分别用的:

  • MOSI - PA14
  • CLK - PA13
  • CS - PA12
  • RES - PA3
  • DC - PA1

在移植OLED驱动的时候,其实只需要修改3个函数:

  1. 外设的初始化
  2. 数据字节发送
  3. 命令字节的发送

外设的初始化

void oled_spi_init()
{
  GPIOA_SetBits( GPIO_Pin_12 );
  GPIOA_ModeCfg( GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA );
  SPI0_MasterDefInit();

  GPIOA_ModeCfg(GPIO_Pin_1|GPIO_Pin_3,GPIO_ModeOut_PP_5mA);
  GPIOA_SetBits( GPIO_Pin_1 );
  GPIOA_SetBits( GPIO_Pin_3 );
}

数据和命令字节的发送

void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
{
  uint8_t i;
  if(cmd)
    GPIOA_SetBits(OLED_DC_PIN);
  else
    GPIOA_ResetBits(OLED_DC_PIN);

  GPIOA_ResetBits(OLED_CS_PIN);
  SPI0_MasterSendByte( dat );
  GPIOA_SetBits(OLED_DC_PIN);
}

void OLED_Write_Multi_Data(uint8_t* data,uint16_t len)
{
  uint16_t i;
  GPIOA_SetBits(OLED_DC_PIN);
  GPIOA_ResetBits(OLED_CS_PIN);
  SPI0_MasterTrans( data, len );
  GPIOA_SetBits(OLED_CS_PIN);
}

void OLED_Write_Multi_Cmd(uint8_t* data,uint16_t len)
{
  uint16_t i;
  GPIOA_ResetBits(OLED_DC_PIN);
  GPIOA_ResetBits(OLED_CS_PIN);
  SPI0_MasterTrans( data, len );
  GPIOA_SetBits(OLED_CS_PIN);
  GPIOA_SetBits(OLED_DC_PIN);
}

显示图片

 

oled.c

31.98 KB, 下载次数: 13

oled.h

196 Bytes, 下载次数: 9

点赞 关注(1)
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表