首先就简单的一秒闪烁一次LED灯,进而类比推理其他外设的配置过程。然后呢我们就用上LCD吧,毕竟这块板上占地面积最大的就是这个2.4’LCD了。

  先贴出简洁的main函数。很干净,比较容易看懂。

  1. int main(void)
  2. {
  3.  
  4. /* STM32F4xx HAL library initialization:
  5. - Configure the Flash prefetch, Flash preread and Buffer caches
  6. - Systick timer is configured by default as source of time base, but user
  7. can eventually implement his proper time base source (a general purpose
  8. timer for example or other time source), keeping in mind that Time base
  9. duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
  10. handled in milliseconds basis.
  11. - Low Level Initialization
  12. */
  13. HAL_Init();
  14.  
  15. /* Configure the System clock to 180 MHz */
  16. SystemClock_Config();
  17.  
  18. /* Infinite loop ,execute per 1s */
  19. while (1)
  20. {
  21. LCD_TEXT_STRINGLINE("hello");
  22. BSP_LED_Toggle(LED3);
  23. BSP_LED_Toggle(LED4);
  24. HAL_Delay(1000);
  25. }
  26. }

先说明一下,如果有疑问,多找\STM32F429DISCO\STM32Cube_FW_F4_V1.5.0\Drivers\STM32F4xx_HAL_Driver\STM32F439xx_User_Manual.chm

-大致过程是这样的:

     HAL_Init():首先运行HAL_Init()函数。根据手册上讲的,这个函数是用来初始化HAL库的,必须在main函数中最先执行(即调用其他HAL函数之前先执行),它做了这些事情:配置Flash的预存取,配置指令数据高速缓存,将Systick配制成1ms产生一次系统中断(常用来做delay函数和OS时间基准),设置NVIC优先级4,调用HAL_MspInit()回调函数,这个函数就是我们初始化HAL底层硬件设备所用到的。

  1. //File:stm32f4xx_hal_msp.c
  2.  
  3. void HAL_MspInit(void)
  4. {
  5. /* NOTE : This function is generated automatically by MicroXplorer and eventually
  6. modified by the user
  7. */
  8. bsp_config();
  9. }
  10.  
  11. //File Config.c
  12. void bsp_config(void)
  13. {
  14. /* Initialize STM32F429I-DISCO's LEDs */
  15. BSP_LED_Init(LED3);
  16. BSP_LED_Init(LED4);
  17.  
  18. /* Initializes the SDRAM device */
  19. BSP_SDRAM_Init();
  20.  
  21. /* Initialize the Touch screen */
  22. BSP_TS_Init(240, 320);
  23.  
  24. /* Initialize the LCD Screen*/
  25. LCD_Config();
  26.  
  27. /* Enable the CRC Module */
  28. __HAL_RCC_CRC_CLK_ENABLE();
  29. }
  30.  
  31. //File stm32f429i_discovery.c
  32.  
  33. void BSP_LED_Init(Led_TypeDef Led)
  34. {
  35. GPIO_InitTypeDef GPIO_InitStruct;
  36.  
  37. /* Enable the GPIO_LED Clock */
  38. LEDx_GPIO_CLK_ENABLE(Led);
  39.  
  40. /* Configure the GPIO_LED pin */
  41. GPIO_InitStruct.Pin = GPIO_PIN[Led];
  42. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  43. GPIO_InitStruct.Pull = GPIO_PULLUP;
  44. GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
  45.  
  46. HAL_GPIO_Init(GPIO_PORT[Led], &GPIO_InitStruct);
  47.  
  48. HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
  49. }
  50.  
  51. //File Config.c
  52. void LCD_Config(void)
  53. {
  54. BSP_LCD_Init();
  55.  
  56. /* Layer1 Init */
  57. BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER, LCD_BACKGROUND_LAYER_FRAME_BUFFER);
  58. /* Set Foreground Layer */
  59. BSP_LCD_SelectLayer(LCD_BACKGROUND_LAYER);
  60. /* Layer2 Init */
  61. BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER, LCD_FOREGROUND_LAYER_FRAME_BUFFER);
  62. /* Set Foreground Layer */
  63. BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
  64. /* Clear the LCD */
  65. BSP_LCD_Clear(LCD_COLOR_LIGHTBLUE);
  66.  
  67. BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
  68. BSP_LCD_SetBackColor(LCD_COLOR_LIGHTBLUE);
  69. /* Enable The LCD */
  1. BSP_LCD_DisplayOn();
  2. }

    初衷是想在Config.c里配置外设。。但是为了演示一下,讲配置函数bsp_config在回调函数HAL_MspInit()  中调用,  我们首先初始化了两个LED指示灯,即配置相关IO口操作。SDRAM的配置和使用带我后面娓娓道来。。我们这里用到它的目的是将它做为LCD显示的Frame Buffe。Touch Screen和CRC校验的配置是留作后面用的,这里没用到。其次就是点亮LCD了,假定我们只初步实现只有文字显示界面的功能。先初始化LCD…实际上就是配置ili9341外设来驱动LCD,底层实现过程在ili9341.c文件内。然后设定两个层做为背景和前景。设置字体颜色,打开显示。OK我们就可以显示自己的文字了。

 

SystemClock_Config(); 其实么,这个函数就是配置了各个时钟,在HAL_Init()配置完成之后,并没有配置时钟,默认的使用16MHSI时钟,我们根据所使用的外设和内核速度来配置相关的时钟,180MSYSCLK,嗯429还是挺快的哈,如果觉得乱,贴个图来解释一下看看就清晰了

   关于显示文字,stm32f429i_discovery_lcd.c文件中定义好了很多关于打印文字,画基本图形等函数,我们可以简单的封装一下拿来用,

  1. volatile uint8_t Disp_Line = 0;
  2.  
  3. void LCD_TEXT_STRINGLINE(char* s)
  4. {
  5. if(Disp_Line > 12)
  6. {
  7. Disp_Line = 0;
  8. BSP_LCD_Clear(LCD_COLOR_LIGHTBLUE);
  9. }
  10.  
  11. BSP_LCD_DisplayStringAtLine(Disp_Line++,(uint8_t*)s);
  12. }

其中使用道德库函数就是这个,第一个参数是指定行号,函数将行号乘以字体高度,自动计算出显示位置。把char*转换成uint8_t*是为了不出现警告而已。。

BSP_LCD_DisplayStringAtLine(Disp_Line++ ,(uint8_t*)s);

一屏大概13行,写满了就刷屏从第一行打印。。。这样用起来就比较简单了。效果演示下。。。

[STM32F429-DISCO-HAL]2.先学会点亮LED和使用LCD。。。的更多相关文章

  1. 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  2. 第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列

    第11章     GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

  3. 树莓派点亮LED灯需要几行代码?3行。小孩子都能学会

    目录 点亮LED灯 硬件连接 代码 闪烁的LED灯 呼吸灯 其他 点亮LED灯 硬件连接 找一个LED灯,连接如上图,注意长短引脚,经过这些年的狂轰乱炸,大家对于这个应该不漠视,毕竟Arduino都进 ...

  4. 【蓝牙低功耗BLE】控制GPIO来点亮LED

    这节讲一下最简单的,也是最基础的东西.CC2540的IO操作,把PORT口当做GPIO来用,废话不多说,往下看. 1.硬件电路 硬件电路时最简单的,用一根GPIO去控制LED灯.因为GPIO作为out ...

  5. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  6. 使用寄存器点亮LED——前言基础知识

    在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...

  7. Mini2440上的第一个程序——点亮Led

    手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习. 我使用的是友善之臂的Mini2440开发板.韦东山的<嵌入式Linux应用开发完成手册>及其视频 ...

  8. Arduino 极速入门系列–1 点亮 LED

    本篇内容为,使用 Arduino 点亮 LED 的做法示范.很简单的一个入门示范.我们让 LED 闪. 本篇使用到的工具和材料 Arduino Mini Pro 1 PCS Mini USB 数据线 ...

  9. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

随机推荐

  1. Linux上网问题

    开发板运行linux下和主机Windows互ping这块,就是Windows这边已经显示本地连接上了,从Windows ping Linux 可以通 但是在CRT 上ping Windows就没反应了 ...

  2. Python如何调用新浪api接口的问题

    前言:这些天在研究如何调用新浪开放平台的api分析新浪微博用户的数据 成果:成功调用了新浪api获取了用户的一些个人信息和无数条公共微博 不足:新浪开放平台访问有限制,返回的数据着实有限,不足以分析问 ...

  3. Java基础(2)-基础类型

    java基础类型 基础类型 package knowledge.base; public class Properties { /** * 整型 * int 4字节 -2 147 483 648 ~2 ...

  4. (转载)Oracle10g 数据泵导出命令 expdp 使用总结(一)

    原文链接:http://hi.baidu.com/edeed/item/890626ef6f6d9d265b2d646f Oracle10g 数据泵导出命令 expdp 使用总结(二)Oracle10 ...

  5. linux可用更新源

    Kali 2.0更新源kali-rolling:#中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribde ...

  6. CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划)

    CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划) Description 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的 ...

  7. C#装箱拆箱

    .       装箱和拆箱是一个抽象的概念 2.       装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型        利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类 ...

  8. language-detection 语言检测工具 java版的应用demo

    本文基本借鉴大佬文章:http://www.cnblogs.com/makemelaugh/archive/2012/09/26/2704802.html 在此基础上添加一些自己的补充,方便查阅. 提 ...

  9. UglyNumber - 找“丑数”

    uglynumber的定义是只能被1,2,3,5整除的数 规定1是第一个uglynumber:以此类推,1 2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 ...

  10. JavaScript DOM编程艺术读后感(1)—— 平稳退化

    最近,在读<JavaScript DOM编程艺术(第二版)>这本书,想着将自己的读后感记录下来,作为记忆吧. 其实我并不是最近才刚开始读这本书的,我读了有一段时间了.我是一名web前端开发 ...