芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
留胡子的钢笔
STM32开发板学习记录(12):点亮LCD9648屏

    积分兑换的STM32开发板不包含屏幕,手头正好有块吃灰的液晶屏,于是尝试给利用起来。

一、硬件介绍:

 1. 开发板:

正点原子的MiniSTM32开发板板载的OLED&TFTLCD模块接口是2*18P排座,间距2.54mm,兼容多种屏幕。

 

2. 液晶屏

手头的液晶屏模块是普中51开发板配的,单排8P,无法与正点原子开发板完美匹配,只能将就。

液晶屏驱动IC是UC1701x,具有超低功耗,适合电池供电的手持设备;支持65×132图形STN LCD面板;支持按行排序和按列排序的显示缓冲区RAM访问;支持行业标准的8位并行总线(8080模式或6800模式),和4线串行总线(S8)接口;片上上电复位和软件复位命令,使RST引脚可选。

 

这是SPI数据传输的时序图。

 

二、软件设计

1.工程搭建:

打开STM32CubeMX,选择芯片,新建工程,配置时钟系统,配置GPIO外设即可,生成工程源码。

由于液晶屏模块与开发板不能完美契合,又不愿意连杜邦线,所以采用的是软件模拟SPI,根据实际情况,简单的配置GPIO引脚,不需要配置SPI。根据数据手册,RST引脚为低电平有效,当RST被拉低时,LCD进入复位状态;当RST恢复高电平时,控制器退出复位,开始正常工作;所以RST初始值为高电平,避免意外复位,导致初始化失败。CS引脚为低电平有效,当CS被拉低时,允许数据传输;当CS高电平时,CS处于空闲状态;所以CS初始值也为高电平,避免总线冲突。

 

2.编写代码:

正点原子官方代码是SSD1306,且分辨率是12864的;普中虽然也有该屏的代码,但是51的,非stm32的,都不能直接拿来用;而本人C语言实在是太菜,经过无数遍的修改、调试,终于成功了。

 

引脚定义和函数声明:

// 引脚定义
#define RST_PIN    GPIO_PIN_6
#define RST_PORT   GPIOB
#define CS_PIN     GPIO_PIN_8
#define CS_PORT    GPIOB
#define RS_PIN     GPIO_PIN_10
#define RS_PORT    GPIOB
#define SDA_PIN    GPIO_PIN_12
#define SDA_PORT   GPIOB
#define SCL_PIN    GPIO_PIN_14
#define SCL_PORT   GPIOB

// LCD 屏幕参数
#define LCD_WIDTH  96
#define LCD_HEIGHT 48

// 函数声明
/*SPI和LCD驱动函数*/
void lcd9648_spi_write_byte(uint8_t dat);
void lcd9648_write_cmd(uint8_t cmd);
void lcd9648_write_dat(uint8_t dat);
void lcd9648_init(void);
void lcd9648_clear(void);
void lcd_reflash_gram(void);


/*字符显示函数*/
void lcd_draw_dot(uint8_t x, uint8_t y, uint8_t sta);
void lcd_show_char(uint8_t x, uint8_t y, uint8_t num, uint8_t size, uint8_t mode);
void lcd_show_num(uint8_t x, uint8_t y, uint32_t num, uint8_t len, uint8_t size, uint8_t mode);
void lcd_show_string(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t size, uint8_t *p);
void lcd_show_fontHZ(uint8_t x, uint8_t y, uint8_t *cn);
void LCD_Show_Chinese(uint8_t x, uint8_t y, const uint8_t *font);

uint32_t lcd_pow(uint8_t m, uint8_t n);

主函数:

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    lcd9648_Init();
    lcd9648_clear();
    

    lcd_show_fontHZ(0, 4, (uint8_t *)"芯查查");
    lcd_show_fontHZ(0, 30, (uint8_t *)"四周年庆");
    lcd_reflash_gram();
    
    while (1) {
    }
}

由于篇幅所限,以上具体函数和字符库就不在此列出,以打包放在附件中。

 

三、实验现象:

 

工程附件
STM32_LCD9648.zip
驱动IC-UC1701x数据手册.pdf
开源社区 申请原创奖励
版块: 单片机/MCU论坛
2025/04/13 22:38
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
最新帖子
树莓派pico 2测评 - 初体验【工程师经验】+ 飞线【开源】zvs142857 2.1A,3A快充 充电宝迷你UC3842 开关电源优化全解析:攻克常见难题,提升性能飞腾CPU × DeepSeek大模型,双芯加持全系列稳跑
热门版块
查看更多
维修技术
电子元器件
萤火工场
电子DIY
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目

29

收藏

分享

微信扫码
分享给好友

评论