【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> 你们是怎么下载的 开发板上带有调试下载器啊。 了解一下!
页:
[1]