[STM32F429-DISCO-HAL]2.先学会点亮LED和使用LCD,看看各外设他们都是怎么被玩的

  首先就简单的一秒闪烁一次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);
}

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

时间: 2024-11-08 04:16:18

[STM32F429-DISCO-HAL]2.先学会点亮LED和使用LCD,看看各外设他们都是怎么被玩的的相关文章

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

第11章 ????GPIO输出-使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ? 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 利用库建立好的工程模板,就可以方便地使用STM32标准库编写应用程序了,可以说从这一章我们才开始迈入STM32开发的大门. LE

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

目录 点亮LED灯 硬件连接 代码 闪烁的LED灯 呼吸灯 其他 点亮LED灯 硬件连接 找一个LED灯,连接如上图,注意长短引脚,经过这些年的狂轰乱炸,大家对于这个应该不漠视,毕竟Arduino都进教材了. 代码 我们先来看图形化的版本: from gpiozero import LED led = LED(17) led.on() 是的你没有看错,树莓派点亮LED只需要3行代码.只需要像Python的turtle编程一样导入需要用到的LED类,然后生成一个表示连接在17号GPIO引脚的LED

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

这节讲一下最简单的,也是最基础的东西,CC2540的IO操作,把PORT口当做GPIO来用,废话不多说,往下看. 1.硬件电路 硬件电路时最简单的,用一根GPIO去控制LED灯,由于GPIO作为output,所以也不用管GPIO的模式. 还是挺简单的,控制左边GPIO的高低来开关LED灯. 2.相关寄存器 P0SEL      P0[7:0]功能设置寄存器,默认设置为普通I/O口 P0INP P0[7:0]作为输入口时电路模式寄存器,可以设置为输入上下拉等 P0 P0[7:0]可以位寻址的I/O

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

手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习. 我使用的是友善之臂的Mini2440开发板.韦东山的<嵌入式Linux应用开发完成手册>及其视频教程.所以,本篇文章中所涉及到的各种软件均可在以下两处找到: Mini2440开发板的配套光盘 韦东山JZ2440开发板的光盘 JZ2440是韦东山出品的开发板,作为<嵌入式Linux应用开发完全手册>的配套硬件,它和Mini2440相差无几,所以我这里用的是Mini2440. 一.目标 动手之前

嵌入式学习笔记002-点亮led

正如编写第一个程序所打印"hello world"那样,对TQ2440开发板的初次使用也是从最简单的部分入手,点亮led灯无疑是最简单的,起码只要设置几个寄存器就好,比起打印容易得多了,后续会讲到串口部分再来实现我们这句金典的对白~~~~ 板子共有4个led灯,如果能够成功点亮其中一个,那么其他几个将不是问题,故而我们的目标是先点亮第一个先,在此我们必须理清几个问题: a. led的引脚连接的相关寄存器 b. 编写的语言 c. 用什么来编译链接成可执行文件 d. 怎么download到

STM32F407第一步之点亮LED

STM32F407第一步之点亮LED. 要点亮LED,首先了解一下F4的GPIO模块.首先看一下STM32F4数据手册,GPIO模块的内部结构图 看上去有点复杂,不要怕,慢慢理解就可以了.对外引脚那里二极管就是保护的作用.通过上.下拉对应的开关配置,控制引脚默认状态的电压,开启上拉的时候引脚电压为高电平,开启下拉的时候引脚电压为低电平,这样可以消除引脚不定状态的影响.但是这个不应该用来作为外部的上拉或下拉用,如按键的拉电阻不能用这个内部来作用,如果用可能会引起按键不稳定. GPIO 具有了“推挽

arm9 点亮led程序优化导致全亮问题

如需转载请注明出处 本实验是arm9 裸板程序,主要功能是循环点亮4个led. 参考伟山东的<嵌入式linux应用开发>点亮led节. 电路图如下: 代码如下: head.s .text .global _start _start: ldr r0, =0x56000010 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内

嵌入式Linux裸机开发(一)——点亮Led

嵌入式Linux裸机开发(一)--点亮Led 开发板:友善之臂smart210 一.电路图查阅 1.底板电路图 查阅开发板底板电路图,查阅LED相关部分 LED电路工作原理: LED的正极接3.3V,负极接地时导通,LED发光. 开发板共有四颗LED,正极接3.3V,负极接开发板的LED1_LED4引脚,如果LED要点亮则需要输入低电平. 2.核心板电路图 查阅核心板电路图可知,LED1-LED4接在SoC的GPJ2_0-GPJ2_3,通过控制GPJ2_0-GPJ2_3的寄存器使对应GPIO引脚

用STC12C5A60S2的P4接口点亮LED

STC12C5A60S2管脚 使用的开发板 程序代码 /* 工程创建MCU选取,Atmel 89C55 单片机:STC12C5A60S2 晶振:12M 功能:用STC12C5A60S2的P4接口点亮LED 连接说明:LED正极接VCC,负极接到 MCU的9,29,30,31脚 */ #include <STC12C5A60S2.H>  sbit LED7=P4^7; sbit LED6=P4^6; sbit LED5=P4^5; sbit LED4=P4^4; void DELAY_MS (u