标识符重命名:字库引脚宏改ROM_前缀(ROM_CLK/DI/DO/CS),屏幕只留OLED_I2C_ADDR;对应原理图OLED_SCL/OLED_SDA命名
This commit is contained in:
parent
9bf407396f
commit
ce0b1bd48a
|
|
@ -1,8 +1,9 @@
|
||||||
/* oled.c - 128x64 OLED(SSD1306, I2C) + 晶联讯 GB2312 字库 IC(SPI) 驱动
|
/* oled.c - 128x64 OLED(SSD1306, I2C) + 晶联讯 GB2312 字库 IC(SPI) 驱动
|
||||||
* 屏幕: I2C 接口, 与 EEPROM 共用软件 I2C 总线(SCL=PB5 SDA=PB4), 无 RST 脚;
|
* 屏幕: I2C 接口(原理图网络 OLED_SCL/OLED_SDA), 与 EEPROM 共用软件 I2C 总线
|
||||||
|
* (SCL=PB5 SDA=PB4, 见 iic.h), 无 RST 脚; 地址 OLED_I2C_ADDR=0x78;
|
||||||
* 与 24C02 的跨任务互斥用 storage_lock(每个完整显示事务内)
|
* 与 24C02 的跨任务互斥用 storage_lock(每个完整显示事务内)
|
||||||
* 字库: SPI, 与 W25Q64 共用三线(CLK=PB6 DI=PB7 DO=PB9), CS2=PC12 独立片选;
|
* 字库: SPI, 与 W25Q64 共用三线(ROM_CLK=PB6 ROM_DI=PB7 ROM_DO=PB9), ROM_CS=PC12 独立片选;
|
||||||
* DO(PB9) 固定为输入(W25Q64_Init 已配置), 字库读取需持 storage_lock 与 Flash 互斥 */
|
* ROM_DO(PB9) 固定为输入(W25Q64_Init 已配置), 字库读取需持 storage_lock 与 Flash 互斥 */
|
||||||
|
|
||||||
#include "oled.h"
|
#include "oled.h"
|
||||||
#include "qrcodegen.h"
|
#include "qrcodegen.h"
|
||||||
|
|
@ -10,19 +11,19 @@
|
||||||
#include "app_loop.h" /* storage_lock/unlock */
|
#include "app_loop.h" /* storage_lock/unlock */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define OLED_CLK_PORT GPIOB
|
#define ROM_CLK_PORT GPIOB
|
||||||
#define OLED_CLK_PIN GPIO_PIN_6 /* 字库 CLK, 与 W25Q64 CLK 共线 */
|
#define ROM_CLK_PIN GPIO_PIN_6 /* 字库 CLK, 与 W25Q64 CLK 共线 */
|
||||||
#define OLED_MOSI_PORT GPIOB
|
#define ROM_DI_PORT GPIOB
|
||||||
#define OLED_MOSI_PIN GPIO_PIN_7 /* 字库 DI, 与 W25Q64 DI 共线 */
|
#define ROM_DI_PIN GPIO_PIN_7 /* 字库 DI, 与 W25Q64 DI 共线 */
|
||||||
#define OLED_FSO_PORT GPIOB
|
#define ROM_DO_PORT GPIOB
|
||||||
#define OLED_FSO_PIN GPIO_PIN_9 /* 字库 DO(FSO), 与 W25Q64 DO 共线, 恒为输入 */
|
#define ROM_DO_PIN GPIO_PIN_9 /* 字库 DO(FSO), 与 W25Q64 DO 共线, 恒为输入 */
|
||||||
#define OLED_CS2_PORT GPIOC
|
#define ROM_CS_PORT GPIOC
|
||||||
#define OLED_CS2_PIN GPIO_PIN_12
|
#define ROM_CS_PIN GPIO_PIN_12
|
||||||
|
|
||||||
#define lcd_mosi(a) HAL_GPIO_WritePin(OLED_MOSI_PORT, OLED_MOSI_PIN, (GPIO_PinState)(a))
|
#define rom_di(a) HAL_GPIO_WritePin(ROM_DI_PORT, ROM_DI_PIN, (GPIO_PinState)(a))
|
||||||
#define lcd_clk(a) HAL_GPIO_WritePin(OLED_CLK_PORT, OLED_CLK_PIN, (GPIO_PinState)(a))
|
#define rom_clk(a) HAL_GPIO_WritePin(ROM_CLK_PORT, ROM_CLK_PIN, (GPIO_PinState)(a))
|
||||||
#define rom_cs2(a) HAL_GPIO_WritePin(OLED_CS2_PORT, OLED_CS2_PIN, (GPIO_PinState)(a))
|
#define rom_cs(a) HAL_GPIO_WritePin(ROM_CS_PORT, ROM_CS_PIN, (GPIO_PinState)(a))
|
||||||
#define ROM_OUT HAL_GPIO_ReadPin(OLED_FSO_PORT, OLED_FSO_PIN)
|
#define ROM_DO_READ HAL_GPIO_ReadPin(ROM_DO_PORT, ROM_DO_PIN)
|
||||||
|
|
||||||
static uint8_t s_row = 0; /* 当前页地址(16px 行 × 2) */
|
static uint8_t s_row = 0; /* 当前页地址(16px 行 × 2) */
|
||||||
static uint8_t s_col = 0; /* 当前列(像素) */
|
static uint8_t s_col = 0; /* 当前列(像素) */
|
||||||
|
|
@ -39,11 +40,11 @@ static void oled_gpio_init(void)
|
||||||
|
|
||||||
/* 屏幕 I2C 不占 GPIO; 字库 CLK(PB6)/DI(PB7) 与 W25Q64 共线(其 Init 已配为输出),
|
/* 屏幕 I2C 不占 GPIO; 字库 CLK(PB6)/DI(PB7) 与 W25Q64 共线(其 Init 已配为输出),
|
||||||
* DO(PB9) 恒为输入(其 Init 已配), 这里只配字库独立片选 CS2(PC12), 默认拉高不选中 */
|
* DO(PB9) 恒为输入(其 Init 已配), 这里只配字库独立片选 CS2(PC12), 默认拉高不选中 */
|
||||||
HAL_GPIO_WritePin(OLED_CS2_PORT, OLED_CS2_PIN, GPIO_PIN_SET);
|
HAL_GPIO_WritePin(ROM_CS_PORT, ROM_CS_PIN, GPIO_PIN_SET);
|
||||||
g.Mode = GPIO_MODE_OUTPUT_PP;
|
g.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
g.Pull = GPIO_PULLUP;
|
g.Pull = GPIO_PULLUP;
|
||||||
g.Speed = GPIO_SPEED_FREQ_LOW;
|
g.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
g.Pin = OLED_CS2_PIN; HAL_GPIO_Init(OLED_CS2_PORT, &g);
|
g.Pin = ROM_CS_PIN; HAL_GPIO_Init(ROM_CS_PORT, &g);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*==== SSD1306 I2C 传输(与 EEPROM 共用软件 I2C 总线) ====*/
|
/*==== SSD1306 I2C 传输(与 EEPROM 共用软件 I2C 总线) ====*/
|
||||||
|
|
@ -177,7 +178,7 @@ void oled_init(void)
|
||||||
{
|
{
|
||||||
HAL_Delay(400); /* 等屏幕/字库上电稳定(I2C 屏无 RST 脚, 靠上电延时) */
|
HAL_Delay(400); /* 等屏幕/字库上电稳定(I2C 屏无 RST 脚, 靠上电延时) */
|
||||||
oled_gpio_init();
|
oled_gpio_init();
|
||||||
rom_cs2(1);
|
rom_cs(1);
|
||||||
oled_write(0, 0xAE); /* display off */
|
oled_write(0, 0xAE); /* display off */
|
||||||
oled_write(0, 0x20); /* 寻址模式 */
|
oled_write(0, 0x20); /* 寻址模式 */
|
||||||
oled_write(0, 0x10); /* 水平寻址 */
|
oled_write(0, 0x10); /* 水平寻址 */
|
||||||
|
|
@ -241,10 +242,10 @@ static void display_graphic_8x16(uint8_t page, uint8_t column, const uint8_t *dp
|
||||||
static void rom_write_byte(uint8_t dat)
|
static void rom_write_byte(uint8_t dat)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
lcd_mosi(dat & 0x80);
|
rom_di(dat & 0x80);
|
||||||
dat <<= 1;
|
dat <<= 1;
|
||||||
lcd_clk(0);
|
rom_clk(0);
|
||||||
lcd_clk(1);
|
rom_clk(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -252,12 +253,12 @@ static void rom_write_byte(uint8_t dat)
|
||||||
static uint8_t rom_read_byte(void)
|
static uint8_t rom_read_byte(void)
|
||||||
{
|
{
|
||||||
uint8_t ret = 0;
|
uint8_t ret = 0;
|
||||||
lcd_clk(1);
|
rom_clk(1);
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
lcd_clk(0);
|
rom_clk(0);
|
||||||
ret <<= 1;
|
ret <<= 1;
|
||||||
if (ROM_OUT) ret |= 1;
|
if (ROM_DO_READ) ret |= 1;
|
||||||
lcd_clk(1);
|
rom_clk(1);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -266,14 +267,14 @@ static uint8_t rom_read_byte(void)
|
||||||
static void rom_read_n(uint8_t ah, uint8_t am, uint8_t al, uint8_t *buf, uint8_t len)
|
static void rom_read_n(uint8_t ah, uint8_t am, uint8_t al, uint8_t *buf, uint8_t len)
|
||||||
{
|
{
|
||||||
storage_lock(); /* 与 W25Q64 共用 SPI 三线, 与 Flash 读写互斥 */
|
storage_lock(); /* 与 W25Q64 共用 SPI 三线, 与 Flash 读写互斥 */
|
||||||
rom_cs2(0);
|
rom_cs(0);
|
||||||
lcd_clk(0);
|
rom_clk(0);
|
||||||
rom_write_byte(0x03); /* 读指令 */
|
rom_write_byte(0x03); /* 读指令 */
|
||||||
rom_write_byte(ah);
|
rom_write_byte(ah);
|
||||||
rom_write_byte(am);
|
rom_write_byte(am);
|
||||||
rom_write_byte(al);
|
rom_write_byte(al);
|
||||||
for (uint8_t i = 0; i < len; i++) buf[i] = rom_read_byte();
|
for (uint8_t i = 0; i < len; i++) buf[i] = rom_read_byte();
|
||||||
rom_cs2(1);
|
rom_cs(1);
|
||||||
storage_unlock();
|
storage_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue