stm32F103VB使用uGfx驱动sh1106
来源:互联网 发布:spring mysql 读写分离 编辑:程序博客网 时间:2024/06/03 14:23
IAR7.4+STM32CUBEMX调试通过。
显示部分,作为麦知智能小车的一部分。显示屏是OLED 1.3寸,控制器是sh1106,但像素是128*64,价格达到惊人的45元/片。
只提供代码,而不同时说明硬件电路图,是导致情景不能复现的主要原因。
这个是委托方提供的原理图和硬件,他每条线都有上拉电阻,显然是打算用模拟SPI。
我在代码里,将cs,dc,res配置为开漏输出,或者推挽输出,都可以正常显示图像。
不知道cs,dc,res在推挽模式下,会不会有问题,所以使用cube配置为OD,低速,而SCLK,SDA默认为PP(配置SPI的默认设置)
与ugfx接口的底层驱动:
</pre><p><pre name="code" class="cpp">/* * This file is subject to the terms of the GFX License. If a copy of * the license was not distributed with this file, you can obtain one at: * * http://ugfx.org/license.html * file: board_SSD1306.h * author: yu * date: 2015.12.14 * site: www.mazclub.com*//** * @file boards/addons/gdisp/board_SSD1306_spi.h * @brief GDISP Graphic Driver subsystem board interface for the SSD1306 display. * * @noteThis file contains a mix of hardware specific and operating system specific *code. You will need to change it for your CPU and/or operating system. */#ifndef _GDISP_LLD_BOARD_H#define _GDISP_LLD_BOARD_H#include "stm32f1xx_hal.h"#include "cmsis_os.h"// The command byte to put on the front of each page line//#define SSD1306_PAGE_PREFIX0x40 // Co = 0, D/C = 1// For a multiple display configuration we would put all this in a structure and then//set g->board to that structure.#define OLED_DC_Port (GPIOC)#define OLED_DC_Pin (GPIO_PIN_15)#define OLED_CS_Port (GPIOA)#define OLED_CS_Pin (GPIO_PIN_8)#define OLED_RES_Port (GPIOC)#define OLED_RES_Pin (GPIO_PIN_14)#define OLED_RES(a) if (a) \ HAL_GPIO_WritePin(OLED_RES_Port,OLED_RES_Pin, GPIO_PIN_SET);\ else \ HAL_GPIO_WritePin(OLED_RES_Port,OLED_RES_Pin, GPIO_PIN_RESET)#define OLED_DC(a) if (a) \ HAL_GPIO_WritePin(OLED_DC_Port,OLED_DC_Pin, GPIO_PIN_SET);\ else \ HAL_GPIO_WritePin(OLED_DC_Port,OLED_DC_Pin, GPIO_PIN_RESET) #define OLED_CS(a) if (a) \ HAL_GPIO_WritePin(OLED_CS_Port,OLED_CS_Pin, GPIO_PIN_SET);\ else \ HAL_GPIO_WritePin(OLED_CS_Port,OLED_CS_Pin, GPIO_PIN_RESET)#define SET_RST HAL_GPIO_WritePin(OLED_RES_Port, OLED_RES_Pin, GPIO_PIN_SET);#define CLR_RST HAL_GPIO_WritePin(OLED_RES_Port, OLED_RES_Pin, GPIO_PIN_RESET);extern SPI_HandleTypeDef hspi1;static void init_board(GDisplay *g) {// As we are not using multiple displays we set g->board to NULL as we don't use it.g->board = 0;}static void post_init_board(GDisplay *g) {(void) g;}static void setpin_reset(GDisplay *g, bool_t state) {(void) g;if(state)CLR_RSTelseSET_RST}static void acquire_bus(GDisplay *g) {(void) g;}static void release_bus(GDisplay *g) {(void) g;}static void write_cmd(GDisplay *g, uint8_t cmd) {(void)g; OLED_DC(0); OLED_CS(0); HAL_SPI_Transmit(&hspi1, &cmd, 1, 1); OLED_CS(1);}static void write_data(GDisplay *g, uint8_t* data, uint16_t length) {(void) g; OLED_DC(1); OLED_CS(0); HAL_StatusTypeDef status = HAL_SPI_Transmit(&hspi1, data, length, 20); if (status != HAL_OK) { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET); HAL_Delay(200); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET); } OLED_CS(1);}
ugfx默认支持chibios,是其一部分,使用IAR编译,会有警告,只能忽略,还没看到什么不良影响。
外设初始化代码,由CUBE生成,在此不需列出。
使用demo里面的代码,画一个矩形。
1 0
- stm32F103VB使用uGfx驱动sh1106
- 如何移植ugfx流程
- sh1106 charge pump不启动原因
- 嵌入式图形界面ugfx源码工程文件分析
- 嵌入式GUI之ugfx移植步骤之代码结构
- 嵌入式GUI之uGFX实例之基本画点画直线
- 使用DirectShow驱动摄像头
- 使用消息驱动Beans
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- 使用测试驱动
- 使用DirectShow驱动摄像头
- 使用ZwLoadDriver加载驱动
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- 使用命令操作驱动
- 深入解析开源项目之Universal-Image-Loader(二)缓存篇
- eclipse下svn切换地址
- 常见分布式文件系统
- time,list,dict
- Oracle HAVING子句
- stm32F103VB使用uGfx驱动sh1106
- Xcode7 及以上版本中使用HTTP请求
- Mysql 常用命令
- tomcat 日志配置
- 去掉 phpwind 8.7 敏感词提示
- java格式化数字DecimalFormat
- LeetCode(124) Binary Tree Maximum Path Sum解题报告
- 同步与异步
- Android中Activity“四种”启动模式+