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

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

int main(void)
{ /* STM32F4xx HAL library initialization:
- Configure the Flash prefetch, Flash preread and Buffer caches
- Systick timer is configured by default as source of time base, but user
can eventually implement his proper time base source (a general purpose
timer for example or other time source), keeping in mind that Time base
duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
handled in milliseconds basis.
- Low Level Initialization
*/
HAL_Init(); /* Configure the System clock to 180 MHz */
SystemClock_Config(); /* Infinite loop ,execute per 1s */
while (1)
{
LCD_TEXT_STRINGLINE("hello");
BSP_LED_Toggle(LED3);
BSP_LED_Toggle(LED4);
HAL_Delay(1000);
}
}

先说明一下,如果有疑问,多找\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底层硬件设备所用到的。

//File:stm32f4xx_hal_msp.c

void HAL_MspInit(void)
{
/* NOTE : This function is generated automatically by MicroXplorer and eventually
modified by the user
*/
bsp_config();
} //File Config.c
void bsp_config(void)
{
/* Initialize STM32F429I-DISCO's LEDs */
BSP_LED_Init(LED3);
BSP_LED_Init(LED4); /* Initializes the SDRAM device */
BSP_SDRAM_Init(); /* Initialize the Touch screen */
BSP_TS_Init(240, 320); /* Initialize the LCD Screen*/
LCD_Config(); /* Enable the CRC Module */
__HAL_RCC_CRC_CLK_ENABLE();
} //File stm32f429i_discovery.c void BSP_LED_Init(Led_TypeDef Led)
{
GPIO_InitTypeDef GPIO_InitStruct; /* Enable the GPIO_LED Clock */
LEDx_GPIO_CLK_ENABLE(Led); /* Configure the GPIO_LED pin */
GPIO_InitStruct.Pin = GPIO_PIN[Led];
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; HAL_GPIO_Init(GPIO_PORT[Led], &GPIO_InitStruct); HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
} //File Config.c
void LCD_Config(void)
{
BSP_LCD_Init(); /* Layer1 Init */
BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER, LCD_BACKGROUND_LAYER_FRAME_BUFFER);
/* Set Foreground Layer */
BSP_LCD_SelectLayer(LCD_BACKGROUND_LAYER);
/* Layer2 Init */
BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER, LCD_FOREGROUND_LAYER_FRAME_BUFFER);
/* Set Foreground Layer */
BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
/* Clear the LCD */
BSP_LCD_Clear(LCD_COLOR_LIGHTBLUE); BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
BSP_LCD_SetBackColor(LCD_COLOR_LIGHTBLUE);
/* Enable The LCD */
    BSP_LCD_DisplayOn();
}

    初衷是想在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文件中定义好了很多关于打印文字,画基本图形等函数,我们可以简单的封装一下拿来用,

volatile uint8_t Disp_Line = 0;

void LCD_TEXT_STRINGLINE(char* s)
{
if(Disp_Line > 12)
{
Disp_Line = 0;
BSP_LCD_Clear(LCD_COLOR_LIGHTBLUE);
} BSP_LCD_DisplayStringAtLine(Disp_Line++,(uint8_t*)s);
}

其中使用道德库函数就是这个,第一个参数是指定行号,函数将行号乘以字体高度,自动计算出显示位置。把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. 【LeetCode】191. Number of 1 Bits

    题目: Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also ...

  2. 伙计,给我来一杯package.json!不加糖

    前言:夜深了,我熬了一锅热气腾腾的package.json,给大家端上来,希望大家喜欢 json和JS对象的区别 package.json,顾名思义,它是一个json文件,而不能写入JS对象. 所以我 ...

  3. cygwin和ffmpeg的两三事

    cygwin和ffmpeg的下载地址: https://cygwin.com/install.html http://www.ffmpeg.org/download.html 标题看上去有些无厘头,然 ...

  4. spring +springmvc+mybatis组合applicationContext.xml文件配置

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  5. PYC#1欢乐赛第三题题解

    这里是比赛地址:http://tieba.baidu.com/p/2859693237,果然参赛神牛汇集. 第三题题目大意如下: 已知n条二次函数曲线Si(x)=aix^2+bix+ci(ai> ...

  6. HTML5 drag和drop的亲手实践

    起因 最近在公司打杂的时候,突然分到了一个锅,就是要支持一个新的功能:用户可以通过拖曳组件来改变组件的顺序.因此,这阵子就看了一下网上的一些drag和drog的文章以及W3C的介绍,然后自己亲手实践了 ...

  7. SpringWeb增删改查

    模型类: package com; public class Model { private int id; private String name; private String dtype; pr ...

  8. 字符串查找KMP算法

    如果你用过ctrl+F这个快捷键,那么你有很大的概率使用过这个算法,这就是在待查找字符串(可能有成千上万个字符)中找出模式串(比较小,可能有几个字符),可能找到大于或者等于1次的位置.例如,在abab ...

  9. 把int型非负数转换为英文

    数字转换为英文 输入为int型非负数,最大值为2^31 - 1 = 2 147 483 647 输出为String英文,最大输出为Two Billion One Hundred Forty Seven ...

  10. 20170722_php_单例模式

    <?php class myClass{ private static $obj = null; private function __construc(){ } public static f ...