[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);
}
其中使用道德库函数就是这个,第一个参数是指定行号,函数将行号乘以字体高度,自动计算出显示位置。把char*转换成uint8_t*是为了不出现警告而已。。
BSP_LCD_DisplayStringAtLine(Disp_Line++ ,(uint8_t*)s);
一屏大概13行,写满了就刷屏从第一行打印。。。这样用起来就比较简单了。
效果演示下。。。
[STM32F429-DISCO-HAL]2.先学会点亮LED和使用LCD。。。的更多相关文章
- 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- 第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列
第11章 GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- 树莓派点亮LED灯需要几行代码?3行。小孩子都能学会
目录 点亮LED灯 硬件连接 代码 闪烁的LED灯 呼吸灯 其他 点亮LED灯 硬件连接 找一个LED灯,连接如上图,注意长短引脚,经过这些年的狂轰乱炸,大家对于这个应该不漠视,毕竟Arduino都进 ...
- 【蓝牙低功耗BLE】控制GPIO来点亮LED
这节讲一下最简单的,也是最基础的东西.CC2540的IO操作,把PORT口当做GPIO来用,废话不多说,往下看. 1.硬件电路 硬件电路时最简单的,用一根GPIO去控制LED灯.因为GPIO作为out ...
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- 使用寄存器点亮LED——前言基础知识
在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...
- Mini2440上的第一个程序——点亮Led
手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习. 我使用的是友善之臂的Mini2440开发板.韦东山的<嵌入式Linux应用开发完成手册>及其视频 ...
- Arduino 极速入门系列–1 点亮 LED
本篇内容为,使用 Arduino 点亮 LED 的做法示范.很简单的一个入门示范.我们让 LED 闪. 本篇使用到的工具和材料 Arduino Mini Pro 1 PCS Mini USB 数据线 ...
- STM32学习笔记——点亮LED
STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...
随机推荐
- 关于一点jeesite
最近刚接触jeesite 深深被这个功能强大的框架所折服,虽然其中有一些地方还不完善,但也不妨碍我们通过jeesite提高我们java水平的大门. 这两天在网上一直在找关于jeesite的文章,看来看 ...
- angular popover的触发问题;
popover 一般如下用法; <div uib-popover="内容" popover-animation="false" popover-appen ...
- ubuntu12.0.4安装启动后无法进入图形操作界面
在VMware10.0.4虚拟机上安装ubuntu12.0.4版本后,启动linux后,无法进入图形界面,但是可以进入字符界面.通过查阅网上资料,有人说是VMware的3D图形加速没有关闭,于是通过查 ...
- spring的applicationContext.xml配置SessionFactory抛异常
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFa ...
- Java--回调接口
回调接口: 我们都知道,一个线程在运行中,遇到一个耗时操作(方法)时,会开启另外一个线程,即所谓 -- 异步 .java中 回调接口 也必然应用与异步加载. 所谓 回调接口 ,也就是线程运行中 遇到一 ...
- Linux 下搭建www服务器
偶然的机会接触了前端开发,尽管最初的意愿是后台. 不过现在看来,前端后台数据库密不可分! 回想起来感觉自己学习的层次也还很好,因为之前有学习c语言.c++的基础,所以在学习html,js的过程中感觉还 ...
- Angular4 - Can't bind to 'ngModel' since it isn't a known property of 'input'.
用[(ngModel)]="xxx"双向绑定,如:控制台报错:Can't bind to 'ngModel' since it isn't a known property of ...
- 玩玩微信公众号Java版之一:配置微信公众平台服务器信息
在进行微信公众平台开发前,前先做好准备工作,好了以后,我们可以开始啦! 第一.准备好服务端接口 定义一个http服务接口,主要分为如下几步: 1.创建一个servlet类,用来接收请求: ...
- hdu_5868:Different Circle Permutation
似乎是比较基础的一道用到polya定理的题,为了这道题扣了半天组合数学和数论. 等价的题意:可以当成是给正n边形的顶点染色,旋转同构,两种颜色,假设是红蓝,相邻顶点不能同时为蓝. 大概思路:在不考虑旋 ...
- [vijos 1642]班长的任务 [树形dp]
背景 十八居士的毕业典礼(1) 描述 福州时代中学2009届十班同学毕业了,于是班长PRT开始筹办毕业晚会,但是由于条件有限,可能每个同学不能都去,但每个人都有一个权值,PRT希望来的同学们的权值总和 ...