stm32F103VB使用uGfx驱动sh1106

stm32F103VB使用uGfx驱动sh1106,第1张

概述IAR7.4+STM32CUBEMX调试通过。 显示部分,作为麦知智能小车的一部分。显示屏是OLED 1.3寸,控制器是sh1106,但像素是128*64,价格达到惊人的45元/片。 只提供代码,而不同时说明硬件电路图,是导致情景不能复现的主要原因。 这个是委托方提供的原理图和硬件,他每条线都有上拉电阻,显然是打算用模拟SPI。 我在代码里,将cs,dc,res配置为开漏输出,或者推挽输出,都可以

IAR7.4+STM32CUBEMX调试通过。

显示部分,作为麦知智能小车的一部分。显示屏是olED 1.3寸,控制器是sh1106,但像素是128*64,价格达到惊人的45元/片。


只提供代码,而不同时说明硬件电路图,是导致情景不能复现的主要原因。


这个是委托方提供的原理图和硬件,他每条线都有上拉电阻,显然是打算用模拟SPI。


我在代码里,将cs,dc,res配置为开漏输出,或者推挽输出,都可以正常显示图像。

不知道cs,res在推挽模式下,会不会有问题,所以使用cube配置为OD,低速,而SCLK,SDA默认为PP(配置SPI的默认设置)


与ugfx接口的底层驱动

</pre><p><pre name="code" >/* * This file is subject to the terms of the GFX license. If a copy of * the license was not @R_419_3657@d 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. * * @note	This 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_PREFIX		0x40			 		// 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,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,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,GPIO_PIN_reset)#define SET_RST HAL_GPIO_WritePin(olED_RES_Port,GPIO_PIN_SET);#define CLR_RST HAL_GPIO_WritePin(olED_RES_Port,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_RST	else		SET_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_reset);                  }        olED_CS(1);}

ugfx默认支持chibios,是其一部分,使用IAR编译,会有警告,只能忽略,还没看到什么不良影响。


外设初始化代码,由CUBE生成,在此不需列出。


使用demo里面的代码,画一个矩形。

总结

以上是内存溢出为你收集整理的stm32F103VB使用uGfx驱动sh1106全部内容,希望文章能够帮你解决stm32F103VB使用uGfx驱动sh1106所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1268087.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存