ST7565驱动IC驱动12864液晶

2019-07-21 00:37发布

留着自用(未使用硬件SPI)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
45条回答
victory0702
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显示出字来



一周热门 更多>