ST7565驱动IC驱动12864液晶

2019-07-21 00:37发布

留着自用(未使用硬件SPI)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
45条回答
victory0702
1楼-- · 2019-07-24 03:17
楼主用的是外部吗?时钟频率多少?
cornrn
2楼-- · 2019-07-24 05:59
回复【26楼】victory0702:
---------------------------------
8MHSE delay自己调调就知道了,官方手册有时间,然后直接根据内部频率设置延时
victory0702
3楼-- · 2019-07-24 11:49
楼主用的外部8M HSE的话,咱们来看看你在Delay.c中定义的滴答定时器的初始化代码:
void Delay_Init(u8 SYSCLK) [mw_shl_code=c,true]/**************************************************** 函数功能:延时初始化 输入参数:SYSCLK : 系统时钟(72)MHZ 输出参数:无 备 注:无 *****************************************************/ void Delay_Init(u8 SYSCLK) { SysTick->CTRL &=~BIT(2);//选择外部时钟 SysTick->CTRL &=~BIT(1);//关闭定时器减到0后的中断请求 fac_us = SYSCLK/8;//计算好SysTick加载值 fac_ms = (u16)fac_us*1000; }[/mw_shl_code] [mw_shl_code=c,true]在system_stm32f0xx.c中可以查到F0系列启动时内核时钟采用外部时钟,系统时钟经锁相环倍频到48MHZ,[/mw_shl_code] [mw_shl_code=c,true]This file configures the system clock as follows: *============================================================================= * System Clock Configuration *============================================================================= * System Clock source | PLL(HSE) *----------------------------------------------------------------------------- * SYSCLK | 48000000 Hz *----------------------------------------------------------------------------- * HCLK | 48000000 Hz[/mw_shl_code] 明显楼主也知道这点,故在main函数中初始化用的SYSCLK也是48MHZ,Delay_Init(48);
但是貌似void Delay_Init(u8 SYSCLK) 函数输入为72MHZ延时才对吧,

因为系统滴答校准值固定位9000,当系统滴答时钟设为9MHz,才产生1ms时间基准.所以楼主的延时时间不对....
再者,貌似这个本来很精确的滴答定时楼主只用来点灯用,而LCD驱动所用的延时楼主是这样定义的:
[mw_shl_code=c,true]void Delay(unsigned short tick) { unsigned char j,k; for(j=0;j<tick;j++) for(k=0;k<110;k++); }[/mw_shl_code] 用的是循环延时的方法,这个相对滴答定时器来说不大准,而且既然定义了滴答定时器却没用也有点浪费。

现在说我的问题,我现在用STM32F207来移植楼主的程序,液晶啥也不显示,我估计问题在延时时间上,207的外部时钟25M,系统启动时的SYSCLK跑到120M,我调了下DELAY函数的值也没有显示出来,我猜测Delay的延时差不多2-5ms即可,楼主的delay时长用的是:
[mw_shl_code=c,true]void WriteToLCD(unsigned char data, unsigned char flg) { unsigned char i; GPIO_ResetBits(LCD_GPIO, LCD_CS); if(flg) { GPIO_ResetBits(LCD_GPIO, LCD_RS); } else { GPIO_SetBits(LCD_GPIO, LCD_RS); } for(i=0;i<8;i++) { GPIO_ResetBits(LCD_GPIO, LCD_SCLK); if(flg)Delay(2); if(data&0x80) { GPIO_SetBits(LCD_GPIO, LCD_SDA); } else { GPIO_ResetBits(LCD_GPIO, LCD_SDA); } GPIO_SetBits(LCD_GPIO, LCD_SCLK); data <<= 1; } }[/mw_shl_code] 我的207还是没能让LCD显示出字来



cornrn
4楼-- · 2019-07-24 17:39
回复【28楼】victory0702:
---------------------------------
哎,我从来不用那个滴答时钟的,要是你费用,ucos的延时也可以啊,下面我贴一下我,基于ucosiii的LCD12864驱动。还有这个delay大致调一下延时不够加点就好了,哪里需要精确,初始化而已。
cornrn
5楼-- · 2019-07-24 20:17
 精彩回答 2  元偷偷看……
cornrn
6楼-- · 2019-07-25 00:29
 精彩回答 2  元偷偷看……

一周热门 更多>