CH579硬件SPI+DMA刷新OLED屏幕

CH579是自带BLE蓝牙的芯片,由于蓝牙连接传输对时间的要求比较高,所以在实现功能时并不能阻塞或执行代码段时间过长,会导致蓝牙连接不稳定或者蓝牙传输数据失败

由于我本次使用的是128*64大小的单色OLED屏幕,
屏幕大小为128*64共 8129bit(1KByte)数据
如果使用硬件spi 8M频率
传输完成一屏幕数据仅需要
8192bit / 8Mbps = 1.024ms
而IIC,即使使用400K频率传输也需要
8192bit / 400Kbp = 20.48ms

而且ch579也没有硬件iic,软件IIC更是达不到400kbps,这样的差距无论是系统稳定性还是从低功耗考虑,都是前者更优,所以采用硬件spi+dma方式

本篇文章主要针对ch579的硬件spi和DMA,涉及到OLED屏幕的请自行根据实际硬件调整

总体思路:
屏幕大小128*64,先在内存开设缓冲区 uint8_t OLED_GRAM[128][8];
然后在主循环将想要显示的内容填充到缓冲区
然后使用配置硬件SPI和DMA,将整个缓冲区传输到屏幕
当DMA传输完成,设置标志位OLED_DMA_IS_OK_Flag = 1;
主循环判断该标志位去准备下一屏数据

硬件连接说明:
由于屏幕只需要传输数据,因此只需要使用spi的SCL和MOSI即可
同时由于我的SPI上只挂在了一个屏幕.因此CS也不需要连接IO,屏幕的CS片选连接GND即可

CLK:PA13
MOSI:PA14

  1. 初始化IO口
void spi0_OLED_IO_Init(void)
{
   
	GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_20mA);	//CLK
	GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_20mA);	//MOSI
	GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_20mA);	//C/D# //屏幕所需命令数据控制脚
	GPIOA_SetBits( GPIO_Pin_13 );
	GPIOA_SetBits( GPIO_Pin_14 );
	GPIOA_SetBits( GPIO_Pin_15 );
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值