ddllxxrr 发表于 2020-12-27 14:48

【NUCLEO-L452RE测评】+管脚驱动1.3寸OLED并用任务显示次数

<div class='showpostmsg'><p>每当我想搞个屏显示的时候我就会找一个管脚少且容易驱动的屏,本来想用真的SPI驱动。但没有管脚来得快。</p>

<p>我想分两步走吧,以后再搞硬件的。。。。。。也不知何时,反正,大约在冬季。</p>

<p>先说说我的屏吧。</p>

<p>SPI的规格书传一下:</p>

<p>怎么加不进来应在附件里边吧。</p>

<p>然后就加上要用的几个管脚:我用的是PA11、PA12、 PB11、PB12,电源和地不算,只要插上就行</p>

<p></p>

<p>然后,反整个OLED文件作为一个OLED子目录的东东,考到本程序根目录下</p>

<p>在oled.h文件中,改管脚的定义,初始化在STM32CUBEMX中自动完成</p>

<pre>
<code>//-----------------OLED端口定义----------------                                          
#define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_12)//CLK
#define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_12)

#define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_13)//DIN
#define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_13)

#define OLED_RST_Clr() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_14)//RES
#define OLED_RST_Set() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_14)

#define OLED_DC_Clr() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_15)//DC
#define OLED_DC_Set() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_15)</code></pre>

<p>然后在主函数中包含这个头文件,在初始化时一定要注意,就是各管脚初始化完了后,一下要接高。这个让我费了半天的时间。</p>

<pre>
<code>//OLED_CS_Clr();//打开片选使能
        OLED_SCLK_Set()
        OLED_SDIN_Set()
        OLED_RST_Set();
        HAL_Delay(1);
       OLED_RST_Clr();
        HAL_Delay(20);
        OLED_RST_Set();
        HAL_Delay(20);
        //OLED_BLK_Set();
       
//************* Start Initial Sequence **********//
LCD_WR_REG(0x36);
LCD_WR_DATA8(0x00);

LCD_WR_REG(0x3A);
LCD_WR_DATA8(0x05);

LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x33);
LCD_WR_DATA8(0x33);

LCD_WR_REG(0xB7);
LCD_WR_DATA8(0x35);

LCD_WR_REG(0xBB);
LCD_WR_DATA8(0x19);

LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x2C);

LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x01);

LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x12);   

LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x20);

LCD_WR_REG(0xC6);
LCD_WR_DATA8(0x0F);   

LCD_WR_REG(0xD0);
LCD_WR_DATA8(0xA4);
LCD_WR_DATA8(0xA1);

LCD_WR_REG(0xE0);
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2B);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x54);
LCD_WR_DATA8(0x4C);
LCD_WR_DATA8(0x18);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0B);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x23);

LCD_WR_REG(0xE1);
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2C);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x44);
LCD_WR_DATA8(0x51);
LCD_WR_DATA8(0x2F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x20);
LCD_WR_DATA8(0x23);

LCD_WR_REG(0x21);

LCD_WR_REG(0x11);
//Delay (120);

LCD_WR_REG(0x29);
</code></pre>

<p>开始,没有给个管脚的初始值置位,这样就驱动不起来。我搞了半天也没有搞明白,我从管脚定义都改了,把时钟也改成除4后的时钟还是不行。</p>

<p>最后加了个初始值搞定了。</p>

<p>在默认任务里加个变量,然后显示。没有什么意义,就是显示。</p>

<p>再有STM32CUBEMX 有一点不好,一复位以前定义的就没有了。</p>

<p>现在我想要以前的任务还得对照以前的贴子,慢慢建立。</p>

<p>以下是照片:</p>

<p></p>

<p>&nbsp;</p>

<p>怎么说呢,以后的贴子就用显示部的的FREERTOS了。这次OLED打包传了,省得下次找不到。</p>

<p></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

okhxyyo 发表于 2020-12-28 11:01

<p><strong><a href="https://bbs.eeworld.com.cn/elecplay/content/148" target="_blank">ST NUCLEO-L452RE测评</a></strong></p>

<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1151850-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1151850-1-1.html&nbsp;</a>、</p>

freebsder 发表于 2020-12-29 22:37

<p>谢谢大佬分享,期待后续!</p>
页: [1]
查看完整版本: 【NUCLEO-L452RE测评】+管脚驱动1.3寸OLED并用任务显示次数