L16物联网ARM开发--开发环境搭建及平台及GPIO口操作平台介绍(day2、3)

news2025/7/20 20:53:47

目录

一、MDK-ARM环境介绍及安装

二、STM32Cube简介及安装

  STM32CubeMX安装

加载固件库

​编辑

 三、 STM32F0存储器映射

四、STM32启动文件分析

五、GPIO的基本概念及寄存器介绍1

1、GPIO接口简介

 2、GPIO功能复用

 3、GPIO寄存器介绍

 GPIO工作原理框图:

五、点亮LED寄存器版(STM32F051K8)

1、硬件原理图分析

2、 使能GPIO的时钟

3、编程步骤分析 

六、点亮LED库函数版(STM32F051K8) 

2、CubeMX的配置

 3、初始化关键代码分析

4、控制LED关键代码分析

七、初识人机交互--按键

1、硬件原理图分析

作业:拍摄stm32流水灯视频


一、MDK-ARM环境介绍及安装

 略

二、STM32Cube简介及安装

 直观的选择STM32微控制器
 微控制器图形化配置
自动处理引脚冲突
动态设置确定的时钟树
可以动态确定参数设置的外围和中间件模式和初始化
功耗预测
 C代码工程生成器覆盖了STM32微控制器初始化编译软件,如IAR,KEIL,GCC可以独立使用,作为Eclipse插件使用

  STM32CubeMX安装

  安装JAVA运行环境,JavaSetup8u151.exe 
  解压stm32cubemx.zip,安装SetupSTM32CubeMX-4.22.0.exe,最好不要有中文路径
  解压stm32cube_fw_f0_v180.zip到STM32CubeMX的安装路径中
 

加载固件库

 三、 STM32F0存储器映射

 略

四、STM32启动文件分析

五、GPIO的基本概念及寄存器介绍1

1、GPIO接口简介

 通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。

 

 2、GPIO功能复用

 注:查看 《 STM32F0数据手册》

 3、GPIO寄存器介绍

  STM32F051-GPIO常用寄存器  

4个32位配置寄存器         GPIOx_MODER,  GPIOx_OTYPER,  GPIOx_OSPEEDR     GPIOx_PUPDR  

2个32位数据寄存器       GPIOx_IDR 、GPIOx_ODR

1 个32 位置位 / 复位寄存器       GPIOx_BSRR

2 个 32 位复用功能配置寄存器      GPIOx_AFRH 、GPIOx_AFRL

注:每一组GPIO端口都有一套上述的寄存器去配置它自己的功能

GPIO寄存器MODER:

GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..D,F)     偏移地址: 0x00     复位值:  

●  0x2800 0000 端口 A   ●  0x0000 0000 其他口

GPIO寄存器OTYPER:

GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)   偏移地址: 0x04   复位值: 0x0000 0000

 

 GPIO工作原理框图:

 GPIO寄存器OSPEEDR:

  GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)      偏移地址: 0x08      复位值: 0x0000 0000

 

 GPIO寄存器PUPDR:

  GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)      偏移地址: 0x0C      复位值:     ● 0x2400 0000 端口 A     ● 0x0000 0000 其它端口

 

 GPIO寄存器IDR:

  GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)      偏移地址: 0x10      复位值: 0x0000 XXXX (X 表明不定 )

 

 GPIO寄存器ODR: 

GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)      偏移地址: 0x14      复位值: 0x0000 0000

 

 GPIO寄存器BSRR:

  GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (x = A..D,F)      偏移地址: 0x18      复位值: 0x0000 0000

 

 GPIO寄存器AFRL:

  GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A..B)       偏移地址: 0x20       复位值: 0x0000 0000

 

GPIO寄存器AFRH:

  GPIO 复用功能低位寄存器 (GPIOx_AFRH) (x = A..B)       偏移地址: 0x24       复位值: 0x0000 0000

 

五、点亮LED寄存器版(STM32F051K8)

1、硬件原理图分析

 

2、 使能GPIO的时钟

 

  AHB 外部时钟使能寄存器 (RCC_AHBENR)    

偏移地址 : 0x14     复位值 : 0x0000 0014     访问:无等待周期,字,半字和字节访问

3、编程步骤分析 

  开启GPIOB的时钟        RCC->AHBENR  |=  1<<18;              

配置PB0 PB1 PB2接口          

GPIOB->MODER |= (1<<0)|(1<<2)|(1<<4);    //设置PB0, PB1, PB2为通用输出模式       GPIOB->OTYPER = 0x0;                                      //设置PB0, PB1, PB2为通用推挽输出       GPIOB->OSPEEDR = 0x0;                                   //设置输出速度为低速  

控制LED;                          

GPIOB->BSRR = (1<<16)|(1<<17)|(1<<18);     //复位PB0, PB1, PB2 既点亮LED        GPIOB->BSRR = (1<<0)|(1<<1)|(1<<2);            //置位PB0, PB1, PB2 既熄灭LED

六、点亮LED库函数版(STM32F051K8) 

 1、硬件原理图

2、CubeMX的配置

 

 

 3、初始化关键代码分析

 GPIOB初始化

void MX_GPIO_Init(void)
{
      GPIO_InitTypeDef GPIO_InitStruct;

    __HAL_RCC_GPIOB_CLK_ENABLE();                                                     //使能GPIOB的时钟
    
     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;       //初始化对象为0, 1, 2号管脚
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;                        //模式为推挽输出
      GPIO_InitStruct.Pull = GPIO_NOPULL;                                                //没有上拉
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;                         //低速
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);                                       //配置好后开始初始化
}

4、控制LED关键代码分析

复位PB0, PB1, PB2 既点亮LED      

HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);  

置位PB0, PB1, PB2 既熄灭LED        

HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_SET);

七、初识人机交互--按键

1、硬件原理图分析

 

 

作业:拍摄stm32流水灯视频

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

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

相关文章

android 签名打包 Invalid keystore format,配置JDK,报错javax.xml.bind.JAXBException

如果AndroidStudio版本高&#xff0c;把Gradle JDK换成更高的版本&#xff0c;就解决了。如下&#xff0c;由1.8换成11&#xff0c;解决了。 这个是全局配置 单独配置项目 File ---> Project Structure---->SDK Location ---> Gradle Srttings jdk配置 MAC 安装JD…

上海亚商投顾:沪指重返3100点 房地产板块掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪大小指数今日走势分化&#xff0c;沪指低开后震荡走高&#xff0c;重返3100点上方&#xff0c;以中字头为首的权重股…

Vue3 按需引入 Element Plus

本文记录博主亲测在 Vite 创建的 Vue3 项目框架中从0开始安装配置按需引入 Element Plus 的步骤 注&#xff1a;以下配置的示例为 Vite 构建的 Vue3 脚手架项目 Element UI 官方指南 安装所需插件 请在项目根目录打开终端分别执行如下安装指令&#xff1a; 1.安装 Element …

实时车载激光雷达感知的点云深度学习

又来卷这个了&#xff0c;此次调查了神经网络中使用的计算表示与其性能特征之间的关系&#xff0c;提出了现代深度神经网络中用于3D点云处理的LiDAR点云表示的新计算分类法。使用这种分类法&#xff0c;对不同的方法家族进行结构化分析&#xff0c;论文揭示了在计算效率、内存需…

Resnet的在指静脉识别应用与改进

一、《基于改进残差网络的指静脉识别算法》_易芮 2020.5.20 由于指静脉具有区分性的特征在于其细节特征,为了减少网络训练过程中的信息丢失,在网络中采用改进的大卷积层以及BottleNeck模块. ResNet网络模型采用残差结构和跳跃连接的方式缓解了随着网络的加深而…

web前端-javascript-相等运算符(说明,== 相等运算, != 不相等运算,=== 全等运算,!== 不全等 运算)

文章目录相等运算符1. 说明2. 相等运算2.1. 当使用来比较两个值时&#xff0c;如果值的类型不同&#xff0c;则会自动进行类型转换&#xff0c;将其转换为相同的类型然后再比较2.2. undefined 衍生自 null2.3. NaN 不和任何值相等&#xff0c;包括他本身3. ! 不相等运算4. 全…

【无百度智能云与实体经济“双向奔赴”: 一场1+1>2的双赢 标题】

实体经济&#xff0c;已经成为检验科技企业潜力的试金石。 在最近的财报季中&#xff0c;各家大厂的财报里“实体经济”都是关键字眼&#xff0c;已经成为各家心照不宣的共同目的地。 当然&#xff0c;条条大路通罗马。每一家的战略思路和打法都不一样。11月22日&#xff0c;…

数据结构题目收录(二十四)

1、在将序列(6,1,5,9,8,4,7)建成大根堆时&#xff0c;正确的序列变化过程是&#xff08;&#xff09;。 A&#xff1a;6,1,7,9,8,4,5->6,9,7,1,8,4,5->9,6,7,1,8,4,5->9,8,7,1,6,4,5B&#xff1a;6,9,5,1,8,4,7->6,9,7,1,8,4,5->9,6,7,1,8,4,5->9,8,7,1,6,4…

【TUN模式】对QQ或者微信域名相关的网站访问非常慢、图片加载不出来、网页空白的解决方案

一、问题背景 最近在电脑上登录微信时&#xff0c;或者浏览微信公众号的文章时&#xff0c;经常出现卡顿得出不来图片的情况&#xff0c;即使出来了也是排版异常。 二、研究现状&#xff08;哈哈哈哈科研人的写作习惯&#xff1f;&#xff09; 目前网上有些大咖对这个问…

qt 实现PDF阅读器

1、前言 查阅资料可发现&#xff0c;网上的几种pdf阅读器的实现&#xff0c;几乎大多依赖的第三方库&#xff0c;这里就不做介绍了。 qt 自带的关于pdf的显示&#xff1a;pdfwriter、printpreviewwidget&#xff0c;分别为创建pdf 和 打印预览pdf。由此&#xff0c;后者似乎满足…

快速上手Python命令行模块Click

关于Click&#xff1f; 说下 Click 模块是干啥的,简单说&#xff0c;它就是把我们的 Python 脚本的一些函数&#xff0c;通过 添加带有 Click 关键字的装饰器进行装饰进而将函数调用的形式转化为命令行传参的形式然后执行。听不懂也没关系&#xff0c;我们会一步一步来&#x…

【OpenGL开发】VS2017+nuget配置OpenGL开发环境

文章目录1、简介1.1 先决条件1.2 查找并安装包1.3 卸载软件包1.4 更新包1.5 管理解决方案的包1.6 “合并”选项卡2、nuget配置程序源2.1 在线源2.2 本地源3、nuget安装库3.1 nuget安装nupengl.core&#xff08;C&#xff09;3.2 nuget安装Giawa.OpenGL&#xff08;C#&#xff0…

听音乐赚钱App,每天听歌收益5美金,保姆级教学,被动收入人人可做

文章目录调研操作变现链接调研 今天分享的就是一个无门槛挂机项目。不需要科学上网,只要听歌就能赚钱。 首先我们需要先认识平台,这个平台叫做current。 是一个听音乐赚积分的平台,它这个赚钱逻辑也非常简单,在平台听歌就可以获取积分,不过最后是可以用积分兑换美金的。官方的说…

索辰科技在科创板过会:拟募资金额有所下调,上半年亏损4000万元

11月24日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;上海索辰信息科技股份有限公司&#xff08;下称“索辰科技”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;索辰科技于2022年6月29日递交招股书&#xff0c;准备在科创板上市。 据了解&#…

Word处理控件Aspose.Words功能演示:在 Python 中将 Word 文档转换为 PNG、JPEG 或 BMP

MS Word 文件到图像格式的转换让您可以将文档的页面嵌入到您的 Web 或桌面应用程序中。为了在 Python 应用程序中执行此转换&#xff0c;本文介绍了如何使用 Python 将 Word DOCX或DOC文件转换为PNG、JPEG或BMP图像。此外&#xff0c;您将学习如何使用不同的选项控制 Word 到图…

MySQL一致性读实现原理

一致性读实现原理前言MySQL中的事务事务的ACID事务的并发问题事务隔离级别InnoDB并发控制MVCC特性MVCC快照隔离级别与快照REPEATABLE READREAD COMMITTEDUndo回滚段一致性读总结前言 现在&#xff0c;主流关系型数据库产品基本都实现了MVCC的特性&#xff0c;快照在MVCC中起着…

Eureka(注册中心)

1.SpringCloud快速开发入门 1.1 搭建和配置一个服务提供者 我们知道&#xff0c;SpringCloud构建微服务是基于SpringBoot开发的。 1、 创建一个SpringBoot工程&#xff08;SpringBoot的Web工程&#xff09;&#xff0c;并且添加SpringBoot的相关依赖&#xff1b; 2、 创建服…

Linus 文件处理(二)

目录 一、前言 二、标准 I/O 库 1、fopen 2、fread 3、fwrite 4、fclose 5、 fflush 6、fseek 7、fgetc, getc, and getchar 8、fputc, putc, and putchar 9、fgets and gets 三、文件和目录维护 1、chmod 2、chown 3、unlink, link, and symlink 4、mkdir and…

Anaconda3安装与配置教程(2022.11)

&#xff08;1&#xff09;首先前往 Anaconda 官网&#xff1a;Anaconda&#xff0c;下载安装文件&#xff1a; &#xff08;2&#xff09;安装时只需要注意设置好安装路径即可&#xff0c;本文安装路径为&#xff1a;D:\Anaconda3&#xff0c;安装好后打开开始菜单能看到如下启…

Java集合框架详解(四)Map接口、HashMap类、LinkedHashMap类

一、Map接口 Map接口的特点&#xff1a; &#xff08;1&#xff09;映射键值对的形式&#xff08;key和value&#xff09;&#xff1b; &#xff08;2&#xff09;Map集合中&#xff0c;key是不能重复的&#xff0c;value是可以重复的&#xff1b; &#xff08;3&#xff09;…