3893|3

323

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

初识Nucleo-STM32F446-驱动COG液晶屏 [复制链接]

          放假在家,正好有这么一块Nucleo-STM32F446的开发板 ,看了两三天资料了,准备初步脱离例程 ,写一下自己的程序,但手头除了这块液晶,也没有什么太合适的东西,那么,就先从这块小小的COG液晶开始玩起吧。         

呐,这就是用STM32F446驱动液晶的样子,至少,以后再用这块板的时候,我们有显示屏啦
      


        可以看到,这是一块12864点阵,串行接口的COG液晶屏,大致的时序和SPI差不多


现在,把一些关键的函数做一下简单说明
首先是STM32F446的时钟初始化部分,位于例程的void SystemClock_Config(void)函数中
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;  //选择内部RC高速时钟HSI
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;                                 //启用内部RC高速时钟
  RCC_OscInitStruct.HSICalibrationValue = 0x10;                              //我觉得应该是设置为16MHz的意思
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;                          //启用PLL
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;          //主PLL的源为内部RC高速时钟HSI
  RCC_OscInitStruct.PLL.PLLM = 16;                                                 //PLLM值设置为16
  RCC_OscInitStruct.PLL.PLLN = 360;                                               //PLLN值设置为360
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;                           //二分频
  RCC_OscInitStruct.PLL.PLLQ = 7;                                                  //PLLQ值设置为7
  RCC_OscInitStruct.PLL.PLLR = 6;                                                  //PLLR值设置为6


注意:PLLN是主PLL倍频系数
           PLLM是主PLL和I2S_PLL的分频系数(在2个PLL之前)
           PLLP是主PLL之后的分频系数
           PLLQ是用于USB、SDIO、硬件随机数的时钟在主PLL之后的分频系数
           也就是说,我们的时钟计算方法为 Fvco = HSI*(PLLN/16) = 16*(360/16) = 360MHz
                                                                Fsys = Fvco / PLLP = 360 / 2 =180MHz
                                                                Fusb = Fvco / PLLQ = 360 / 6 = 60MHz

然后是GPIO初始化部分,这里并没有使用硬件SPI,而是直接使用GPIO模拟时序。
   __HAL_RCC_GPIOA_CLK_ENABLE();       //使能GPIOA端口时钟
  GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9;    //设置GPIOA5,6,7,8,9
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;       //推挽输出
  GPIO_InitStruct.Pull = GPIO_PULLUP;                             //上拉使能
  GPIO_InitStruct.Speed = GPIO_SPEED_FAST;                //高速端口
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);                     //载入设置

另外,为了方便编程,还做了对函数语句的几个宏定义
#define COG_SCK_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET)
#define COG_SCK_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET)
#define COG_SDA_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET)
#define COG_SDA_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET)
#define COG_RS_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET)
#define COG_RS_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET)
#define COG_RST_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)
#define COG_RST_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)
#define COG_CS_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)
#define COG_CS_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)

这样,就可以直接设定端口的高低电平了,很方便。
程序正在整理,过会上传



此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报

323

帖子

2

TA的资源

一粒金砂(高级)

沙发
 
slotg 发表于 2015-9-4 14:05
这种液晶看起来不错,一片要多少钱?

呃,淘宝买的,要十五六块钱
此帖出自stm32/stm8论坛
 
 

回复

323

帖子

2

TA的资源

一粒金砂(高级)

板凳
 
强仔00001 发表于 2015-9-4 23:30
不错的也屏幕,F446性能咋样??

挺NX的啊,到180M的主频
此帖出自stm32/stm8论坛
 
 

回复

323

帖子

2

TA的资源

一粒金砂(高级)

4
 
ketose 发表于 2015-9-5 14:50
哪弄的板子。。。。

ST的试用活动
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表