基于STM32F469 discovery kit 开发板的开发3

news2024/12/26 23:48:17

目录

  • 基于STM32F469 discovery kit 开发板的开发3
    • 软件项目架构
      • 1. 应用层:
      • 2. Drivers层
      • 3. Middlewares层
    • 软件工作流程
      • main函数入口
      • LED等初始化
      • 配置外部中断

基于STM32F469 discovery kit 开发板的开发3

前文我们已经实现了第一个例程在discovery 开发板上的运行,下面我们来看项目的目录结构和工作流程。

软件项目架构

打开keil,project菜单打开en.stm32cubef4-v1.27下的工程,选择gpio工程,打开后,项目目录结构如下:

在这里插入图片描述根据目录结构的不同,项目文件共分为4层:

1. 应用层:

	  位于工程目录下的src目录下,主要用于非系统的用户程序,功能实现部分。

2. Drivers层

    存放系统硬件的驱动部分,细分为bsp和STM32F4xx_HAL_Driver两部分:

(1)bsp部分

	  包含了sdram、eeprom、audio音频、lcd显示、sd卡和Touch  Screen等相对复杂一些的驱动的实
	  现部分,本部分驱动需要 STM32F4xx_HAL_Driver的支持,例如sd卡就需要DMA的支持,audio音频需
	  要dma和i2s的支持等。

(2) STM32F4xx_HAL_Driver

	 为最底层、基础的驱动实现,例如gpio、flash、can,eth、dma,can,I2S、adc和dac等

3. Middlewares层

本层主要实现I2S的addons的audio库、usb device和host驱动库和touchGFX图形库等第三方集成外设驱动库部分。

当然,驱动部分是根据应用层的需要自由裁剪的,不需要的驱动部分,可以不出现在工程中。

软件工作流程

main函数入口

从main.c中,main函数的实现如下:

	int main(void)
	{
	  /* STM32F4xx HAL library initialization:外设初始化部分
	       - Configure the Flash prefetch, instruction and Data caches  flash配置
	       - 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.
	       - Set NVIC Group Priority to 4 中断
	       - Low Level Initialization: global MSP (MCU Support Package) initialization
	     */
	  HAL_Init();
	
	  /* Configure the system clock to 180 MHz   系统工作时钟配置*/
	  SystemClock_Config();
	
	  /* -1- Initialize LEDs mounted on STM32469I-DISCOVERY board */
	  BSP_LED_Init(LED1);  //指示灯初始化。
	
	  /* -2- Configure EXTI0 (connected to PA.00 pin) in interrupt mode */
	  EXTI0_IRQHandler_Config();
	
	  /* Infinite loop */
	  while (1)
	  {
	  }
	}

LED等初始化

查看开发板硬件图,led指示灯电路如下:

在这里插入图片描述LED的定义如下

	typedef enum
	{
	 LED1 = 0,
	 LED_GREEN = LED1,
	 LED2 = 1,
	 LED_ORANGE = LED2,
	 LED3 = 2,
	 LED_RED = LED3,
	 LED4 = 3,
	 LED_BLUE = LED4
	
	} Led_TypeDef;

在 BSP_LED_Init(Led_TypeDef Led)函数中,依次对LED1到4进行了初始化。

switch(Led)
{
case LED1 :
  LED1_GPIO_CLK_ENABLE();      break;
case LED2 :
  LED2_GPIO_CLK_ENABLE();      break;
case LED3 :
  LED3_GPIO_CLK_ENABLE();      break;
case LED4 :
  LED4_GPIO_CLK_ENABLE();      break;
default :      break;

HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET);

配置外部中断

通过函数EXTI0_IRQHandler_Config配置为exti0的外部中断,中断处理函数为:

	void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
	{
	  if (GPIO_Pin == GPIO_PIN_0)
	  {
	    /* Toggle LED1 */
	    BSP_LED_Toggle(LED1);
	  }
	}

至此,GPIO控制LED等颜色闪烁的的流程就结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

virtio机制简介

What is VirtIO VirtIO是virtual input & output的缩写,是在host device之上的一层抽象层,提供给虚拟机使用。VM虚机一般是通过virtio device来使用host devices设备的,所以一个VirtIO device的主要作用其实就是充当VM与host device har…

Arduino UNO 可视化GT-24工业级无线透传

Arduino UNO 可视化GT-24工业级无线透传一、前言二、硬件要求三、参数基础四、原理剖析五、透传思路六、程序概要七、arduino使用接线八、成果展示一、前言 无线透传市面上较为常见的是基于蓝牙、esp的多种透传模块,今天介绍的则是用NRF24L01芯片构成的电路。&…

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

RocketMQ5.0主备自动切换模式下消息的不丢失方案如何进行部署?下面就来看一下 1. 下载RocketMQ5.0 首先我们去官网将RocketMQ5.0的版本下载下来。 $ wget https://dlcdn.apache.org/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip 复制代码 下载完成后解压到…

Spring常用注解——@Autowired自动装配的作用和原理

一. 认识Autowired 当我们在Spring框架中配置Bean时&#xff0c;常见的有三种办法&#xff1a;①使用xml ②使用注解 ③使用javeconfig。由于第一种方法需要在application.xml配置文件中使用大量<bean>标签来进行注入&#xff0c;就衍生了注解&#xff0c;我们只要使用A…

Paper写作开头部分怎么具体分析?

Paper的组成部分包括了正文以及结尾&#xff0c;不过Paper整体印象很大程度上是由Paper开头段决定的。然而&#xff0c;写好Paper开头并不是一件不费吹灰之力的事。那么&#xff0c;Paper开头怎么写&#xff1f;接下来就让小编来给大家讲解几个写Paper开头的方法&#xff0c;希…

【python】之字典及其操作

个人主页&#xff1a;天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 特别标注&#xff1a;仅为自己的学习记录笔记&#xff0c;方便复习和加深记忆&#xff0c;仅供借鉴参考&#xff01; 目录 前言 字典的创建 格式 字典名{key1:value1,key2:value2......} 字典名di…

大前端进阶:vue

目录 1.vue概述与前端知识体系 1.vue概述 2.前端三要素 2.前端发展史 1.三端统一 2.后端技术 3.了解前后分离的演变史 1.后端为主的MVC时代 2.基于AJAX带来的SPA时代 3.前端为主的MV*时代 4.Node JS带来的全栈时代 5.总结 4.第一个Vue程序 1.什么是MVVM 2.为什么…

每天一个小细节:UDP协议特点与报文结构

在上一期的《每天应该小细节》中&#xff0c;外面介绍了协议这个概念&#xff0c;那么在我们的传输层有两个非常重要的协议&#xff0c;那便是TCP/IP和UDP协议&#xff0c;那么今天就来详细介绍一下UDP协议的主要内容。 上期每天一个小细节指路&#x1f432;&#x1f432;&…

【马里奥数据结构吃“金币”】时间复杂度和空间复杂度

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《数据结构》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 时间复杂度&#xff1a; 大O渐进表示法&#xff1a; 空间复杂度&#x…

文件操作学不会?快进来,带你深入理解->C语言文件操作

你将收获&#xff1a; 进一步理解缓冲区&#xff0c;以及引申出getchar(),scanf("%c",&c)接收数据时&#xff0c;易踩坑的地方&#xff0c;并对其解释。 w,r,a打开文件后如何正确使用读、写函数。 还有其它收获… 文件为什么存在什么是文件文件的唯一标识符缓冲文…

【FLASH存储器系列一】非易失性存储器基本原理之EPROM

1非易失性器件的存储原理 1.1最小存储单元-浮栅晶体管 我们当前使用的非易失性存储器的基本存储单元基本都是浮栅晶体管。技术在发展&#xff0c;浮栅晶体管的结构也在调整演进&#xff0c;接下来将用系列文章中的三篇分享EPROM、EEPROM、FLASH这三种非易失存储器件的基本存储…

麒麟系统开发笔记(九):在国产麒麟系统上搭建宇视摄像头SDK基础环境Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/127532255 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

链路状态路由协议 OSPF (二)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.Router ID 1.什么是Router ID 2.获得Router ID方法 二.DR和…

每日一题(day9)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录俩到经典题目一、走方格的方案数题目描述解题分析代码演示二.另类加法题目描述&#xff1a;解题分析常见的位运算代码演示总结俩到经典题目 一、走方格的方案数 题目…

【小嘟陪你刷题14】二叉树的最小深度、二叉树的所有路径、翻转二叉树

目录一、二叉树的最小深度思路一&#xff1a;深度优先搜索代码实现思路二&#xff1a;广度优先搜索代码实现二、二叉树的所有路径思路一&#xff1a;递归法代码实现思路二&#xff1a;迭代法三、翻转二叉树思路一&#xff1a;递归法代码实现思路二&#xff1a;迭代法代码实现一…

controller传输from-data数据格式的内容,取出传入数据为from-data格式的值

传输from-data数据格式的内容 postman里面的格式如下 接下来&#xff0c;便将上面的内容转换为代码 第一步&#xff1a;将File转为MultipartFile格式 首先&#xff0c;我们只能将File转为改格式才能进行网络传输&#xff0c;转换方式请看这篇博客&#xff1a;https://blog.…

推动行业数字化转型,亚马逊云科技自身就是“好把式”

&#xff08;亚马逊全球副总裁、亚马逊云科技大中华区执行董事张文翊&#xff09; 在2022年10月的亚马逊云科技中国峰会上&#xff0c;亚马逊云科技宣布了四大战略举措——“连中外、襄百业、携伙伴、促绿色“&#xff0c;进一步为中国本地客户赋能数字化探索与创新&#xff0…

顺序表实现—数据结构

文章目录一、顺序表概念及结构二、动态顺序表和静态顺序表的选择三、动态顺序表的实现逻辑&#xff08;1&#xff09;创建结构体&#xff08;2&#xff09;具体函数实现&#xff08;*&#xff09;顺序表初始化&#xff08;*&#xff09;释放顺序表&#xff08;*&#xff09;打印…

青少年python系列 21.turtle库绘制一个8

#绘制一个8import turtle#上方的小圆&#xff0c;圆心在左turtle.circle(80)#下方的大圆&#xff0c;圆心在右turtle.circle(-100)turtle.done() 青少年python教学视频ppt源码 青少年python系列目录_老程序员115的博客-CSDN博客 csdn文章推荐受影响解决办法10个字10行 csdn文…

梦开始的地方—— C语言指针入门

文章目录指针入门1.指针概念2. 指针和指针类型3. 野指针造成野指针的原因如何避免野指针4. 指针的运算指针加减整数指针的运算关系指针的关系运算5.指针和数组6. 二级指针7. 指针数组指针入门 1.指针概念 指针(Pointer) 是编程语言中的一个对象&#xff0c;利用地址&#xff…