当前位置:首页 > 单片机 > 单片机
[导读]IAR7.4+STM32CUBEMX调试通过。显示部分,作为麦知智能小车的一部分。显示屏是OLED 1.3寸,控制器是sh1106,但像素是128*64,价格达到惊人的45元/片。只提供代码,而不同时说明硬件电路图,是导致情景不能复现的主要原

IAR7.4+STM32CUBEMX调试通过。

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


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


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


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

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


与ugfx接口的底层驱动:


/*

*ThisfileissubjecttothetermsoftheGFXLicense.Ifacopyof

*thelicensewasnotdistributedwiththisfile,youcanobtainoneat:

*

*http://ugfx.org/license.html

*file:board_SSD1306.h

*author:yu

*date:2015.12.14

*site:www.mazclub.com

*/

/**

*@fileboards/addons/gdisp/board_SSD1306_spi.h

*@briefGDISPGraphicDriversubsystemboardinterfacefortheSSD1306display.

*

*@noteThisfilecontainsamixofhardwarespecificandoperatingsystemspecific

*code.YouwillneedtochangeitforyourCPUand/oroperatingsystem.

*/

#ifndef_GDISP_LLD_BOARD_H

#define_GDISP_LLD_BOARD_H

#include"stm32f1xx_hal.h"

#include"cmsis_os.h"

//Thecommandbytetoputonthefrontofeachpageline

//#defineSSD1306_PAGE_PREFIX0x40//Co=0,D/C=1

//Foramultipledisplayconfigurationwewouldputallthisinastructureandthen

//setg->boardtothatstructure.

#defineOLED_DC_Port(GPIOC)

#defineOLED_DC_Pin(GPIO_PIN_15)

#defineOLED_CS_Port(GPIOA)

#defineOLED_CS_Pin(GPIO_PIN_8)

#defineOLED_RES_Port(GPIOC)

#defineOLED_RES_Pin(GPIO_PIN_14)

#defineOLED_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)

#defineOLED_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)

#defineOLED_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)

#defineSET_RSTHAL_GPIO_WritePin(OLED_RES_Port,OLED_RES_Pin,GPIO_PIN_SET);

#defineCLR_RSTHAL_GPIO_WritePin(OLED_RES_Port,OLED_RES_Pin,GPIO_PIN_RESET);

externSPI_HandleTypeDefhspi1;

staticvoidinit_board(GDisplay*g){

//Aswearenotusingmultipledisplayswesetg->boardtoNULLaswedon'tuseit.

g->board=0;

}

staticvoidpost_init_board(GDisplay*g){

(void)g;

}

staticvoidsetpin_reset(GDisplay*g,bool_tstate){

(void)g;

if(state)

CLR_RST

else

SET_RST

}

staticvoidacquire_bus(GDisplay*g){

(void)g;

}

staticvoidrelease_bus(GDisplay*g){

(void)g;

}

staticvoidwrite_cmd(GDisplay*g,uint8_tcmd){

(void)g;

OLED_DC(0);

OLED_CS(0);

HAL_SPI_Transmit(&hspi1,&cmd,1,1);

OLED_CS(1);

}

staticvoidwrite_data(GDisplay*g,uint8_t*data,uint16_tlength){

(void)g;

OLED_DC(1);

OLED_CS(0);

HAL_StatusTypeDefstatus=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里面的代码,画一个矩形。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为增进大家对混合集成电路的认识,本文将对混合集成电路的相关内容予以介绍。

关键字: 电路 指数 集成电路

为增进大家对集成电路的认识,本文将对集成电路的种类、应用以及芯片的种类、应用予以介绍。

关键字: 电路 指数 集成电路

为增进大家对集成电路的认识,本文将对集成电路、集成电路和芯片的主要差异予以介绍。

关键字: 电路 指数 集成电路

Mar. 28, 2024 ---- TrendForce集邦咨询表示,除了铠侠(Kioxia)和西部数据(WDC)自今年第一季起提升产能利用率外,其它供应商大致维持低投产策略。尽管第二季NAND Flash采购量较第一...

关键字: SSD NAND Flash 智能手机

为增进大家对监控摄像机的认识,本文将对监控摄像机常见机型以及监控摄像机的维修技巧予以介绍。

关键字: 摄像机 指数 监控摄像机

为增进大家对监控摄像机的认识,本文将对监控摄像机的分类、监控摄像机的维修方法予以介绍。

关键字: 摄像机 指数 监控摄像机

为增进大家对监控摄像机的认识,本文将对监控摄像机的基础配件、监控摄像机的选择方法予以介绍。

关键字: 摄像机 指数 监控摄像机

Mar. 26, 2024 ---- 目前观察DRAM供应商库存虽已降低,但尚未回到健康水位,且在亏损状况逐渐改善的情况下,进一步提高产能利用率。不过,由于今年整体需求展望不佳,加上去年第四季起供应商已大幅度涨价,预期库...

关键字: DRAM AI DDR5

为增进大家对电磁炉的认识,本文将对电磁炉的一些异常予以介绍,并介绍电磁炉的一些使注意事项。

关键字: 电磁炉 指数 温度传感器

为增进大家对电磁炉的认识,本文将介绍如果维修电磁炉,并向大家介绍一些选购电磁炉时常常陷入的误区。

关键字: 电磁炉 指数 电磁灶
关闭
关闭