STM32初识1

什么是单片机?

单片机( Single-Chip Microcomputer )是一种集成电路芯片,把具有数据处理能力的中央处
理器 CPU 、随机存储器 RAM 、只读存储器 ROM 、多种 I/O 口和中断系统、定时器 / 计数器等功
能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、 A/D 转换器等电路)集成
到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

 STM系列单片机命名规则

ST -- 意法半导体
M -- Microelectronics 微电子
32 -- 总线宽度

STM32F103C8T6单片机简介

项目
介绍
内核
Cortex-M3
Flash
64K x 8bit
SRAM
20K x 8bit
GPIO
37 GPIO ,分别为 PA0-PA15 PBO-PB15 PC13-PC15 PDO-PD1
ADC
2 12bit ADC 合计 12 路通道,外部通道 : PAO PA7+PBO PB1 内部通道 : 温度传感器通道ADC Channel 16 和内部参考电压通道 ADC Channel 17
定时器/ 计数器
4 16bit 定时器 / 计数器,分别为 TIM1 TIM2 TIM3 TIM4TM1 带死区插入,常用于产生PWM 控制电机
看门狗定时器
2 个看门狗定时器 ( 独立看门狗 IWDG 、窗口看门狗 WWDG)
滴答定时器
1 24bit 向下计数的滴答定时器 systick
工作电压、温度
2V3.6V -40°C85°C
通信串口
2 * IIC 2 * SPI 3 * USART 1 * CAN
系统时钟
内部 8MHz 时钟 HSI 最高可倍频到 64MHZ ,外部 8MHZ 时钟 HSE 最高可倍频到72MHZ

标准库与HAL库区别

1. 寄存器
  • 寄存器众多,需要经常翻阅芯片手册,费时费力;
  • 更大灵活性,可以随心所欲达到自己的目的;
  • 深入理解单片机的运行原理,知其然更知其所以然。
2. 标准库
  • 将寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的;
  • 配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能;
  • 大大降低单片机开发难度,但是在不同芯片间不方便移植。
3. HAL
  • ST公司目前主力推的开发方式,新的芯片已经不再提供标准库;
  • 为了实现在不同芯片之间移植代码;
  • 为了兼容所有芯片,导致代码量庞大,执行效率低下

 通用输入输出端口GPIO

什么是GPIO

定义
GPIO 通用输入输出 端口的简称,简单来说就是 STM32 可控制的引脚 STM32 芯片的 GPIO 引脚与
外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
简单来说我们可以控制 GPIO 引脚的电平变化,达到我们的各种目的。
命名规则

组编号+引脚编号 GPIOx

组编号: GPIOA, GPIOB, GPIOC, GPIOD .. GPIOG
引脚编号: 0 1 2 3 4...15
组合起来:
PA0, PA1, PA2 .. PA15
PB0, PB1, PB2 .. PB15
PC0, PC1, PC2 .. PC15
...
有一些特殊功能的引脚是不能用作IO的:例如,我使用的STM32F103C8T6有48个引脚,但只有37个GPIO口,而剩下的都是用作特殊功能的,比如VCC,BOOT等...
内部框架图

 推挽输出和开漏输出:

推挽输出 可以真正的输出高电平和低电平

开漏输出: 开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完 成对外驱动

什么是GPIO的推挽输出和开漏输出_gpio推挽输出-CSDN博客

点亮LED

其实点亮LED的操作在上节已经实现了,这里在深入了解一下相关函数:

1. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); 

效果是对一个GPIO口写入1或者0,第一个参数是GPIO的组第二个参数是GPIO的引脚第三个参数是引脚的状态

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{/* Check the parameters */assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if (PinState != GPIO_PIN_RESET){GPIOx->BSRR = GPIO_Pin;}else{GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u;}
}

2. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

效果是初始化GPIO口,第一个参数是GPIO的组第二个参数是一个结构体指针,可以通过跳转查看具体信息:

typedef struct
{uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.This parameter can be any value of @ref GPIO_pins_define */uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.This parameter can be a value of @ref GPIO_mode_define */uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.This parameter can be a value of @ref GPIO_pull_define */uint32_t Speed;     /*!< Specifies the speed for the selected pins.This parameter can be a value of @ref GPIO_speed_define */
} GPIO_InitTypeDef;

因此在执行GPIO的初始化之前需要自己定义一个结构体 GPIO_InitTypeDef GPIO_InitStruct = {0};

并对其中的成员进行赋值:

void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);/*Configure GPIO pins : PB8 PB9 */GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;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);}

3. void HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);

效果是反转GPIO口的状态,第一个参数是GPIO的组第二个参数是GPIO的引脚

使用轮询法实现按键点亮LED灯

由原理图可见, 如果按钮SW1,2被按下,会对应KEY1,2被拉低,所以可以通过观察A0和A1是否被拉低来判断按钮是否被按下。

那么首先要涉及到PA0,PA1的初始化,所以可以打开上节编辑到一半的CubeMX软件来配置:

由于按键是触发输入信号将PA0和PA1设计成“GPIO_Input”:

可以将PB8,9的初始值设置为高电平,这样程序烧录之后灯不会立刻亮起来

由于是在上节的工程基础上改的,所以不需要在设置Project Manager里面的内容

点击“GENERATE CODE”生成代码:

实现的是 按钮1被按下时,LED1亮,再次按下熄灭;如果按钮2被按下时,LED2亮,再次按下熄灭

#define KEY_ON 0
#define KEY_OFF 1uint8_t Key_scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == GPIO_PIN_RESET){/*按键按下*/while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == GPIO_PIN_RESET);//按键消抖,如果按键没有被按下不会触发returnreturn KEY_ON;}else{/*按键松开*/return KEY_OFF;}
}int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();while (1){//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);if(Key_scan(GPIOA ,GPIO_PIN_0) == KEY_ON)//如果A0对应的按钮按下{HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);//反转LED1的状态}if(Key_scan(GPIOA ,GPIO_PIN_1) == KEY_ON)//如果A1对应的按钮按下{HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);//反转LED2的状态}}

注意!!!HAL库有很多重定义的类型,例如uint8_t

需要根据使用查询!!

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

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

相关文章

部署快捷、使用简单、推理高效!大模型部署和推理框架 Xinference 来了!

今天为大家介绍一款大语言模型&#xff08;LLM&#xff09;部署和推理工具——Xinference[1]&#xff0c;其特点是部署快捷、使用简单、推理高效&#xff0c;并且支持多种形式的开源模型&#xff0c;还提供了 WebGUI 界面和 API 接口&#xff0c;方便用户进行模型部署和推理。 …

【iOS】ARC学习

文章目录 前言一、autorelease实现二、苹果的实现三、内存管理的思考方式__strong修饰符取得非自己生成并持有的对象__strong 修饰符的变量之间可以相互赋值类的成员变量也可以使用strong修饰 __weak修饰符循环引用 __unsafe_unretained修饰符什么时候使用__unsafe_unretained …

蓝桥杯--冶炼金属

目录 一、题目 二、解决代码 &#xff08;1&#xff09;版本一&#xff08;报错&#xff1a;超时&#xff09; 代码分析 &#xff08;2&#xff09;版本二&#xff08;不会超时&#xff09; 代码分析 &#xff08;3&#xff09;版本三&#xff08;最终精简版&#xff09;…

Python自学☞序列和索引的相关操作

一、基本概念 1、概念 序列是一个用于存储多个值的连续空间&#xff0c;每个值都对应一个整数的编号&#xff0c;称为索引 2、切片的语法结构 注&#xff1a;切片可以访问序列一定范围内的元素 序列[start&#xff1a;end&#xff1a;step] start-->切片的开始索…

Python数据分析-5

1.时间序列 2.pandas重采样 重采样&#xff1a;指的是将时间序列从一个频率转化为另一个频率进行处理的过程&#xff0c;将高频率数据转化为低频率数据为降采样&#xff0c;低频率转 化为高频率为升采样。 统计出911数据中不同月份电话次数的变化情况&#xff1a…

vue3中的文字滚动播报

vue3中的文字滚动播报 之前UI框架一直使用的elementPlus&#xff0c;有个需求&#xff0c;需要在页面上写个滚动播放新闻的功能&#xff0c;发现UI框架居然没有这个组件。花了一下午&#xff0c;在ChatGPT的帮助下&#xff0c;总算写成功了&#xff0c;先看最终展示效果 web页…

GPT-5:人工智能的下一个前沿即将到来

当我们站在人工智能新时代的门槛上时&#xff0c;GPT-5即将到来的呼声愈发高涨且迫切。作为革命性的GPT-3的继任者&#xff0c;GPT-5承诺将在人工智能领域迈出量子跃迁式的进步&#xff0c;其能力可能重新定义我们与技术的互动方式。 通往GPT-5之路 通往GPT-5的旅程已经标记着…

Unreal发布Android在刘海屏手机上不能全屏显示问题

Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题 Android设置全屏刘海屏全屏设置4.27设置刘海屏在部分手机不能显示问题 Android设置全屏 AndroidManifest.xml文件配置 ...<activity android:name"com.epicgames.ue4.GameActivity" android:label"st…

给电脑加硬件的办法 先找电脑支持的接口,再买相同接口的

需求&#xff1a;我硬盘太小&#xff0c;换或加一个大硬盘 结论&#xff1a;接口是NVMe PCIe 3.0 x4 1.找到硬盘型号 主硬盘 三星 MZALQ512HALU-000L2 (512 GB / 固态硬盘) 2.上官网查 或用bing查 非官方渠道信息&#xff0c;不确定。

CompletableFuture原理与实践-外卖商家端API的异步化

背景 随着订单量的持续上升&#xff0c;美团外卖各系统服务面临的压力也越来越大。作为外卖链路的核心环节&#xff0c;商家端提供了商家接单、配送等一系列核心功能&#xff0c;业务对系统吞吐量的要求也越来越高。而商家端API服务是流量入口&#xff0c;所有商家端流量都会由…

【深度学习笔记】9_5 多尺度目标检测

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 9.5 多尺度目标检测 在9.4节&#xff08;锚框&#xff09;中&#xff0c;我们在实验中以输入图像的每个像素为中心生成多个锚框。这些…

springboot+vue学生选课系统 java+ssm+idea+_mysql

系统包含三种角色&#xff1a;管理员、老师、学生&#xff0c;系统分为前台和后台两大模块&#xff0c;主要功能如下。 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 学生网上选课系统可以实现教室管理&#xff0c;老师管理&#xff0c;课程管理&#xff0c;教学计划管…

微服务分布式springcloud研究生志愿填报辅助系统

本文讲述了研究生志愿填报辅助系统。结合电子管理系统的特点&#xff0c;分析了研究生志愿填报辅助系统的背景&#xff0c;给出了研究生志愿填报辅助系统实现的设计方案。 本论文主要完成不同用户的权限划分&#xff0c;不同用户具有不同权限的操作功能&#xff0c;在用户模块&…

AJAX 03 XMLHttpRequest、Promise、封装简易版 axios

AJAX 学习 AJAX 3 原理01 XMLHttpRequest① XHR 定义② XHR & axios 关系③ 使用 XHR④ XHR查询参数案例&#xff1a;地区查询&#xff08;URLSearchParams&#xff09;⑤ XHR数据提交 POST 02 PromisePromise 使用Promise - 三种状态案例&#xff1a;使用Promise XHR 获取…

电商场景下 ES 搜索引擎的稳定性治理实践

继上文在完成了第一阶段 ES 搜索引擎的搭建后&#xff0c;已经能够实现对千万级别的商品索引的读写请求的支持。目前&#xff0c;单机房读流量在 500&#xff5e;1000 QPS 之间&#xff0c;写流量在 500 QPS 左右。 但随着业务的发展&#xff0c;问题也逐渐开始暴露&#xff0…

Wmware安装Linux(centerOS、Ubuntu版本)

目录 1、安装wmware 2、center版本 3、ubuntu版本 1、安装wmware 此处不做展开。 2、center版本 需要提前下载的文件&#xff1a; 无图形化界面https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso 有图形化界面https://mirrors.a…

增删卜易——八宫六十四卦

之前看倪海厦的《天纪》笔记里面提到了六十四卦世应,觉得不知道这个世应是啥意思。很长时间就没看了,偶然间看到了张文江教授写的一本书《潘雨廷先生谈话录》提到了《卜筮正宗》,“卜筮最后的判断是非理性转义,其他一切都只是形式”,“明人的著作,从京氏易出,如今天几日…

STM32 学习12 输入捕获与触摸按键

STM32 学习12 输入捕获与触摸按键 一、输入捕获介绍1. 概念2. STM32F1 资源3. 捕获原理 二、输入捕获配置步骤1. 使能时钟、设置端口模式2. 初始化定时器3. 设置捕获参数4. 开启捕获和定时器中断&#xff08;溢出中断|更新中断&#xff09;6. 编写定时器中断服务函数7. 使能定时…

针对教育行业的网络安全方案有哪些

智慧校园”是教育信息化进入高级阶段的表现形式&#xff0c;比“数字校园”更先进。集体知识共融、共生、业务应用融合创新、移动互联网物联网高速泛在是其重要特征。特别是在互联网教育的大环境下&#xff0c;为了更好的发挥智慧化教学服务和智慧化教学管理功能&#xff0c;需…

node.js入门—day02

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 什么是单线程…