hujj 发表于 2019-1-15 15:39

【ST NUCLEO-G071RB评测】+ 驱动LCD5110显示屏及启用systick

<div class='showpostmsg'>本评测使用的ST NUCLEO-G071RB开发板来自EEWORLD论坛,由ST提供,以下是STM产品的链接:
https://www.stmcu.com.cn/index.p ... /261/layout/product
   经过几天的时间将原来在STM32F103的LCD5110驱动移植到STM32G071,中途遇到了一些挫折,首先是原来运行正常的字符串显示函数在G071下编译正常通过,运行却出错,经过多天排查以及发帖求助,基本确定是指针运算出了问题,造成数组下标越界出错。因为时间紧迫,只好暂时绕过这个问题,用逐个显示单一字符来解决。然后是显示屏无数据,我开始使用的是PB2~PB6引脚,通过逻辑分析仪发现PB6引脚的时序不正常,后来换用了PB14引脚,成功地驱动了LCD5110,参见下图的波形。


    下面是LCD5110测试的图片:



    我用系统滴答建立了一个模拟时钟(见屏幕右下角),通过测试找到了systick的初始值。当然这个时钟的使用有局限性,不光是走时不十分准确,更重要的是断电即停,每次开机需要重新校时,在这里仅仅是作测试用,如果真正要实用还是需要添加时钟模块。
    以下是系统滴答相关的函数:
void systick_init(void)            //配置系统时钟
{
    //配置systick重载值(系统时钟64MHz,1秒)
    if(SysTick_Config(16000) == 1) //毫秒=72000
    {
      while(1);
    }
}

void TimingDelay_Decrement(void)   //每毫秒被调用一次
{
    nMs++;                         //nMs++;
    if ( Timeus != 0x00)
    {
      Timeus--;                  //TimingDelay--;
    }
}


void SysTick_Handler(void)         //系统时钟中断
{
    TimingDelay_Decrement();       //调用计数减
}


    由于开发板上仅有一个用户按键,这给校时带来了麻烦,我只好将按键设置成三种状态:点按、稍长(超过0.2秒)按、长按(半秒以上),长按用于改变调整时、分、秒及结束调整的模式,短按则将当前值加1,稍长按则将当前值加5,通过这个方法达到一键多用。下面是获取按键的代码:
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == KEY0_Pin)   //确认PC13产生下降沿脉冲
    {
                key_state = 1;
               
                delay_ms(200);
                if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == 0)   key_state++;
               
                delay_ms(300);
                if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == 0)   key_state++;
               
                LCD_write_value(1,4,1,0,key_state);
                LCD_write_value(11,4,1,0,mode);
                LCD_write_value(21,4,1,0,modebak);
                key0_handle();
    }
}


    以下是整个工程的源码,是在KEIL5平台下建立的。








此内容由EEWORLD论坛网友hujj原创,如需转载或用于商业用途需征得作者同意并注明出处



</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>

周小北 发表于 2019-3-14 11:50

你们是怎么下载的

hujj 发表于 2019-3-14 14:36

开发板上带有调试下载器啊。

零三苏九岳志 发表于 2019-3-14 15:47

了解一下!
页: [1]
查看完整版本: 【ST NUCLEO-G071RB评测】+ 驱动LCD5110显示屏及启用systick