打印
[活动专区]

【AT-START-F437测评】OLED显示

[复制链接]
641|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aple0807|  楼主 | 2022-12-29 21:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
手上有个SPI接口OLED屏,尺寸128x64,正好给AT32F437评估板加个显示器。OLED没太多好讲的,主要就是代码实现:

连接如下:
OLED    MCU
D/C     PB10
CS      PA8
RST     PA10
CLK     PB3
DAT     PB5

底层主要是SPI接口调试,相对比较简单,实现初始化和写函数即可:

初始化:
void ext_spi_init(void)
{
        spi_init_type cfg;
        intx_alloc();

        // 开启时钟
        intx_disable();

        crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
        crm_periph_reset(CRM_SPI1_PERIPH_RESET, TRUE);
        crm_periph_reset(CRM_SPI1_PERIPH_RESET, FALSE);

        intx_enable();

        // SPI 配置
        cfg.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;
        cfg.mclk_freq_division = SPI_MCLK_DIV_32;
        cfg.master_slave_mode = SPI_MODE_MASTER;
        cfg.frame_bit_num = SPI_FRAME_8BIT;
        cfg.first_bit_transmission = SPI_FIRST_BIT_MSB;
        cfg.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
        cfg.clock_polarity = SPI_CLOCK_POLARITY_HIGH;
        cfg.clock_phase = SPI_CLOCK_PHASE_2EDGE;

        spi_init(SPIn, &cfg);

        SPIn->ctrl1_bit.spien = 1;
}
写函数
void ext_spi_wb(uint8_t dataW)
{
        volatile uint8_t rb;

        spi_rx_reset();

        //send data
        spi_send(dataW);
        spi_read_delay();

        //wait for trans complete
        while (is_spi_busy())
                ;

        //read data
        rb = spi_read();
}
oled 数据/命令操作:
void oled1_write_cmd(uu8 Data)
{
        oled_cs.dis();
        oled_dc.dis();
       
        oled_spi_wb(Data);

        oled_cs.en();
}

void oled1_write_data(uu8 Data)
{
        oled_cs.dis();
        oled_dc.en();
       
        oled_spi_wb(Data);

        oled_cs.en();
}
oled模块初始化:
void        ssd1306_m1_init(void)
{
        //internal setting
        oled1_write_cmd(0xae);        //--turn off oled panel
        oled1_write_cmd(0x00);        //--set low column address
        oled1_write_cmd(0x10);        //--set high column address
        oled1_write_cmd(0x40);        //--set start line address
        oled1_write_cmd(0x81);        //--set contrast control register
        oled1_write_cmd(0xf0);
        oled1_write_cmd(0xa1);        //--ÁÐɨÃè˳Ðò£º´Ó×óµ½ÓÒa1        //×óÓÒ·­×ªa0
        oled1_write_cmd(0xc8);        //--ÐÐɨÃè˳Ðò£º´ÓÉϵ½ÏÂc8        //ÉÏϵߵ¹c0
        oled1_write_cmd(0xa6);        //--set normal display
        oled1_write_cmd(0xa8);        //--set multiples ratio(1to64)
        oled1_write_cmd(0x3f);        //--1/64 duty
        oled1_write_cmd(0xd3);        //--set display offset
        oled1_write_cmd(0x00);        //--not offset
        oled1_write_cmd(0xd5);        //--set display clock divide ratio/oscillator frequency
        oled1_write_cmd(0x80);        //--set divide ratio
        oled1_write_cmd(0xd9);        //--set pre-charge period
        oled1_write_cmd(0xf1);
        oled1_write_cmd(0xda);        //--set com pins hardware configuration
        oled1_write_cmd(0x12);
        oled1_write_cmd(0xdb);        //--set vcomh
        oled1_write_cmd(0x30);
        oled1_write_cmd(0x8d);        //--set chare pump enable/disable
        oled1_write_cmd(0x14);        //--set(0x10) disable

        clr_display();

        oled1_write_cmd(0xaf);
        //oled1_write_cmd(0xa7);        //--set normal display
        oled1_write_cmd(0xa6);        //--set normal display
}
显示效果如下图所示:

代码托管在GITEE,后面评测会一直用这个仓库更新。
https://gitee.com/aple_sun/atf437-start



使用特权

评论回复
沙发
forgot| | 2022-12-30 17:10 | 只看该作者
我也是准备做一个OLED液晶显示的测评

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

313

帖子

2

粉丝