5560|4

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm32f103c8t6最小系统开发板连接7针 spi OLED例程 [复制链接]



本人穷学生,在用stm32f103c8t6最小系统开发板做7针 spi OLED,求一个例程,表明管脚连接,谢谢各位大佬!
此内容由EEWORLD论坛网友picaj原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自stm32/stm8论坛

最新回复

是LL库的 学习了,谢谢。   详情 回复 发表于 2019-12-16 10:45
点赞 关注
 

回复
举报

295

帖子

1

TA的资源

版主

沙发
 

 

 

很多啊,但是你要自己移植一下,这样学到的才多奥

此帖出自stm32/stm8论坛
 
 

回复

4008

帖子

0

TA的资源

版主

板凳
 

#include "stm32f4xx_hal.h"
#include "main.h"
#include "OLED.h"
#include "SPI.h"

#define OLED_CS_Set()  //OLED_CS_GPIO_Port->ODR |= OLED_CS_Pin
#define OLED_CS_Clr() //OLED_CS_GPIO_Port->ODR &=~OLED_CS_Pin

void Delay_ms(uint32_t ms) {
 ms+=HAL_GetTick();
 while (HAL_GetTick()<=ms);
}
void OLED_WR_Dat(uint8_t da) {
 //spi1发送
 LL_SPI_TransmitData8(SPI1,da);
 while (!LL_SPI_IsActiveFlag_TXE(SPI1));
 while (LL_SPI_IsActiveFlag_BSY(SPI1));

}
void OLED_WR_Cmd(uint8_t da) {
 OLED_DC_GPIO_Port->ODR &= ~OLED_DC_Pin;
 OLED_WR_Dat(da);
 OLED_DC_GPIO_Port->ODR |= OLED_DC_Pin;
}

//设置行列地址
void OLED_Set_Pos(unsigned char x, unsigned char y) {
 OLED_WR_Cmd(0xb0+y);
 OLED_WR_Cmd(((x&0xf0)>>4)|0x10);
 OLED_WR_Cmd((x&0x0f)|0x01);
}
//开启OLED显示
void OLED_Display_On(void) {
 OLED_WR_Cmd(0X8D  );  //SET DCDC命令
 OLED_WR_Cmd(0X14  );  //DCDC ON
 OLED_WR_Cmd(0XAF  );  //DISPLAY ON
}
//关闭OLED显示
void OLED_Display_Off(void) {
 OLED_WR_Cmd(0X8D  );  //SET DCDC命令
 OLED_WR_Cmd(0X10  );  //DCDC OFF
 OLED_WR_Cmd(0XAE  );  //DISPLAY OFF
}
//清屏函数!
/**/void OLED_Clear(uint8_t da) {
 uint16_t n;
 for(n=0;n<128*8;n++) OLED_WR_Dat(da);
 //数据低位在上!!
}
/**************************/
//1k刷屏缓冲区
uint8_t OLED_Buffer[OLEDBUFFER_SIZE];
uint32_t OLED_BufBitAddr;
static volatile uint16_t OLED_Refresh_Cnt=0;

void clsbuf(void) {
 uint32_t i;
 for (i=0;i<1024;i++)
  OLED_Buffer[i]=0x0;
}

//初始化SSD1306
void Oled_Init(void) { 
 LL_SPI_Enable(SPI1);
 OLED_CS_Clr();
 OLED_DC_GPIO_Port->ODR |= OLED_DC_Pin;//默认数据状态 

 OLED_WR_Cmd(0xAE  );//--turn off oled panel
 OLED_WR_Cmd(0x00  );//---set low column address
 OLED_WR_Cmd(0x10  );//---set high column address
 OLED_WR_Cmd(0x40  );//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
 OLED_WR_Cmd(0x81  );//--set contrast control register
 OLED_WR_Cmd(0xCF  ); // Set SEG Output Current Brightness
 /****修改为左下起向上后右填充****/ 
 OLED_WR_Cmd(0xA1  );//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
 OLED_WR_Cmd(0xC0  );//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
 OLED_WR_Cmd(0xA6  );//--set normal display
 OLED_WR_Cmd(0xA8  );//--set multiplex ratio(1 to 64)
 OLED_WR_Cmd(0x3f  );//--1/64 duty
 OLED_WR_Cmd(0xD3  );//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
 OLED_WR_Cmd(0x00  );//-not offset
 OLED_WR_Cmd(0xd5  );//--set display clock divide ratio/oscillator frequency
 OLED_WR_Cmd(0x80  );//--set divide ratio, Set Clock as 100 Frames/Sec
 OLED_WR_Cmd(0xD9  );//--set pre-charge period
 OLED_WR_Cmd(0xF1  );//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
 OLED_WR_Cmd(0xDA  );//--set com pins hardware configuration
 OLED_WR_Cmd(0x12  );
 OLED_WR_Cmd(0xDB  );//--set vcomh
 OLED_WR_Cmd(0x40  );//Set VCOM Deselect Level
 OLED_WR_Cmd(0x20  );//-Set Page Addressing Mode (0x00/0x01/0x02)
 OLED_WR_Cmd(0x01  );//00水平地址模式//01垂直地址模式
 OLED_WR_Cmd(0x8D  );//--set Charge Pump enable/disable
 OLED_WR_Cmd(0x14  );//--set(0x10) disable
 OLED_WR_Cmd(0xA4  );// Disable Entire Display On (0xa4/0xa5)
 OLED_WR_Cmd(0xA6  );// Disable Inverse Display On (0xa6/a7)
 OLED_WR_Cmd(0xAF  );//--turn on oled panel

 OLED_Display_On();
 OLED_BufBitAddr=0x22000000+((uint32_t)OLED_Buffer-0x20000000)*32;
 clsbuf();
 OLED_Refresh();
}

void SPI1_IRQHandler(void) {
// OLED_Refresh_Cnt++;
if (SPI1->SR & LL_SPI_SR_TXE) { 
 if (OLED_Refresh_Cnt<OLEDBUFFER_SIZE) {
  //没完成
  LL_SPI_TransmitData8(SPI1,OLED_Buffer[OLED_Refresh_Cnt&1023]);
  OLED_Refresh_Cnt++;
  //提前结束
  if (OLED_Refresh_Cnt==OLEDBUFFER_SIZE) {
   OLED_Refresh_Cnt=0;
   LL_SPI_DisableIT_TXE(SPI1); 
  }
 }
}}
void OLED_Refresh(void) {
 LL_SPI_TransmitData8(SPI1,OLED_Buffer[0]);
 OLED_Refresh_Cnt++;
 LL_SPI_EnableIT_TXE(SPI1);
}

此帖出自stm32/stm8论坛

点评

是LL库的 学习了,谢谢。  详情 回复 发表于 2019-12-16 10:45
 
 

回复

4008

帖子

0

TA的资源

版主

4
 

这个是不久前弄的spi dma刷屏,60HZ都没问题

此帖出自stm32/stm8论坛
 
 
 

回复

39

帖子

1

TA的资源

一粒金砂(中级)

5
 
huo_hu 发表于 2019-12-11 13:22 #include "stm32f4xx_hal.h" #include "main.h" #include "OLED.h" #include "SPI.h" ...

是LL库的

学习了,谢谢。

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表