本评测使用的
开发板来自
EEWORLD
论坛,由ST提供,以下是STM产品的链接:
经过几天的时间将原来在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平台下建立的。
mybord.rar
(7.29 MB, 下载次数: 13)
此内容由EEWORLD论坛网友hujj原创,如需转载或用于商业用途需征得作者同意并注明出处