当前位置: 首页 > article >正文

STM32的HAL编码流程总结(上部)

目录

  • 一、GPIO
  • 二、中断系统
  • 三、USART串口通信
  • 四、I2C通信
  • 五、定时器

一、GPIO

1.选择调试类型
在SYS中Debug选择Serial Wire模式
在这里插入图片描述

2.选择时钟源
在RCC中将HSE和LSH都选择为内部晶振
在这里插入图片描述

3.时钟树配置
在这里插入图片描述
4.GPIO配置
在芯片图上选择开启的引脚和其功能
在这里插入图片描述

配置引脚的各自属性
在这里插入图片描述

5.工程文件配置
配置工程文件的名字,位置等
Toolchain/IDE:选择用于调试的工具,生成对应的文件
在这里插入图片描述
选择“仅添加重要库”和“生成对应.c/.h文件”,最后点击GENERATE CODE生成文件
在这里插入图片描述

二、中断系统

1.选择调试类型
在SYS中Debug选择Serial Wire模式
在这里插入图片描述

2.选择时钟源
在RCC中将HSE和LSH都选择为内部晶振
在这里插入图片描述

3.时钟树配置
在这里插入图片描述
4.GPIO配置
引脚的复用选择
在这里插入图片描述

引脚属性的配置
在这里插入图片描述

5.NVIC的配置

引脚开启NVIC
在这里插入图片描述

配置中断的优先级
在这里插入图片描述

6.工程文件配置
配置工程文件的名字,位置等

在这里插入图片描述
选择“仅添加重要库”和“生成对应.c/.h文件”,最后点击GENERATE CODE生成文件
在这里插入图片描述
7.重写回调函数
重写中断服务函数中调用的回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == GPIO_PIN_10){HAL_Delay(15);// 防抖: 延迟15ms之后再次检测是否仍然是高电平,if (HAL_GPIO_ReadPin(GPIOF, GPIO_Pin) == GPIO_PIN_SET){HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);}}
}

三、USART串口通信

1.选择调试类型
在SYS中Debug选择Serial Wire模式
在这里插入图片描述

2.选择时钟源
在RCC中将HSE和LSH都选择为内部晶振
在这里插入图片描述

3.时钟树配置
在这里插入图片描述

4.USART配置

通过开启USART功能,HAL库能自动配置相应的GPIO
在这里插入图片描述

属性配置
在这里插入图片描述
开启中断
在这里插入图片描述

5.工程文件配置
配置工程文件的名字,位置等

在这里插入图片描述
选择“仅添加重要库”和“生成对应.c/.h文件”,最后点击GENERATE CODE生成文件
在这里插入图片描述

6.重写回调函数

uint8_t rxBuff[1000]; // 接收缓冲区
// Size 是实际接收的数据的长度
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) 
{if (huart1.Instance == USART1){HAL_UART_Transmit(&huart1, rxBuff, Size, HAL_MAX_DELAY);HAL_UARTEx_ReceiveToIdle_IT(&huart1, rxBuff, 1000);}
}

四、I2C通信

1.选择调试类型
在SYS中Debug选择Serial Wire模式
在这里插入图片描述

2.选择时钟源
在RCC中将HSE和LSH都选择为内部晶振
在这里插入图片描述

3.时钟树配置
在这里插入图片描述

4.I2C配置
I2C选择为I2C
在这里插入图片描述

5.I2C发送和读取

//ADDR为该外设模块的读取指令地址
#define ADDR 0xA0
uint8_t innerAddr = 0x00;
//I2C初始配置
MX_I2C2_Init();
//向0x00地址中写入
HAL_I2C_Mem_Write(&hi2c2,ADDR,innerAddr,I2C_MEMADD_SIZE_8BIT, &byte, 1, 2000);
//读取0x00地址中
HAL_I2C_Mem_Read(&hi2c2, ADDR + 1, innerAddr, I2C_MEMADD_SIZE_8BIT, &byte, 1, 2000);

五、定时器

1.选择调试类型
在SYS中Debug选择Serial Wire模式
在这里插入图片描述

2.选择时钟源
在RCC中将HSE和LSH都选择为内部晶振
在这里插入图片描述

3.时钟树配置
在这里插入图片描述

4.通用定时器配置

在这里插入图片描述
5.工程文件配置
配置工程文件的名字,位置等

在这里插入图片描述
选择“仅添加重要库”和“生成对应.c/.h文件”,最后点击GENERATE CODE生成文件
在这里插入图片描述

6.定时器运用
使用通用定时器不断改变PWM的占空比,可以实现呼吸灯等效果

//添加修改占空比的函数
void setDutyCycle(uint16_t dutyCycle)
{// 设置捕获比较寄存器的值__HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_2, dutyCycle);
}void main(){MX_TIM5_Init();HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2);uint8_t dutyCycle = 1;int8_t step = 1;while (1){if (dutyCycle <= 0 || dutyCycle >= 99){step = -step;}dutyCycle += step;setDutyCycle(dutyCycle);HAL_Delay(10);}
}

相关文章:

STM32的HAL编码流程总结(上部)

目录 一、GPIO二、中断系统三、USART串口通信四、I2C通信五、定时器 一、GPIO 1.选择调试类型 在SYS中Debug选择Serial Wire模式 2.选择时钟源 在RCC中将HSE和LSH都选择为内部晶振 3.时钟树配置 4.GPIO配置 在芯片图上选择开启的引脚和其功能 配置引脚的各自属性 5.工…...

深度学习|pytorch基本运算

【1】引言 pytorch是深度学习常用的包&#xff0c;顾名思义&#xff0c;就是python适用的torch包&#xff0c;在python里面使用时直接import torch就可以调用。 需要注意的是&#xff0c;pytorch包与电脑配置、python版本有很大关系&#xff0c;一定要仔细阅读安装要求、找到…...

(自用)Java学习-5.15(模糊搜索,收藏,购物车)

1. 模糊搜索商品功能 前端实现&#xff1a; 通过解析URL参数&#xff08;如search联想&#xff09;获取搜索关键字&#xff0c;发送AJAX GET请求到后端接口/product/searchGoodsMessage。 动态渲染搜索结果&#xff1a;若结果非空&#xff0c;循环遍历返回的商品数据&#xff…...

替代 WPS 的新思路?快速将 Word 转为图片 PDF

在这个数字化办公日益普及的时代&#xff0c;越来越多的人开始关注文档处理工具的功能与体验。当我们习惯了某些便捷操作时&#xff0c;却发现一些常用功能正逐渐变为付费项目——比如 WPS 中的一项实用功能也开始收费了。 这款工具最特别的地方在于&#xff0c;可以直接把 W…...

【K8S】K8S基础概念

一、 K8S组件 1.1 控制平面组件 kube-apiserver&#xff1a;公开 Kubernetes HTTP API 的核心组件服务器。 etcd&#xff1a;具备一致性和高可用性的键值存储&#xff0c;用于所有 API 服务器的数据存储。 kube-scheduler&#xff1a;查找尚未绑定到节点的 Pod&#xff0c;并将…...

FEMFAT许可分析的数据可视化方法

随着企业对FEMFAT软件使用的增加&#xff0c;如何有效地管理和分析许可数据成为了关键。数据可视化作为一种强大的工具&#xff0c;能够帮助企业直观地理解FEMFAT许可的使用情况&#xff0c;从而做出更明智的决策。本文将介绍FEMFAT许可分析的数据可视化方法&#xff0c;并探讨…...

打印机无法远程打印?可以本地打印,本地网络打印机设置给异地使用

很多小伙伴常有打印、远程打印的需求&#xff0c;特别是对于电商人、跨境电商、教师、产品经理、实验人员等群体来说掌握这项技能可谓是能够在很多场景下带来便捷&#xff0c;大幅提升做事效率&#xff01;打印机是家庭和企业经常用到的设备&#xff0c;很多情况下会遇到本地可…...

包含Javascript的HTML静态页面调取本机摄像头

在实际业务开发中&#xff0c;需要在带有摄像头的工作机上拍摄施工现场工作过程的图片&#xff0c;然后上传到服务器备存。 这便需要编写可以运行在浏览器上的代码&#xff0c;并在代码中实现Javascript调取摄像头、截取帧保存为图片的功能。 为了使用户更快掌握JS调取摄像头…...

PCB设计实践(三十一)PCB设计中机械孔的合理设计与应用指南

一、机械孔的基本概念与分类 机械孔是PCB设计中用于实现机械固定、结构支撑、散热及电气连接的关键结构元件&#xff0c;其分类基于功能特性、制造工艺和应用场景的差异&#xff0c;主要分为以下几类&#xff1a; 1. 金属化机械孔 通过电镀工艺在孔内壁形成导电层&#xff0c;…...

deepseek问答记录:请讲解一下torch.full_like()

torch.full_like() 是 PyTorch 中的一个张量创建函数&#xff0c;用于创建一个与输入张量形状相同但所有元素值都填充为指定标量值的新张量。下面详细讲解其用法和特性&#xff1a; 1. 函数签名 torch.full_like(input, fill_value, *, dtypeNone, layoutNone, deviceNone, r…...

【Linux篇章】Linux 进程信号2:解锁系统高效运作的 “隐藏指令”,开启性能飞跃新征程(精讲捕捉信号及OS运行机制)

本篇文章将以一个小白视角&#xff0c;通俗易懂带你了解信号在产生&#xff0c;保存之后如何进行捕捉&#xff1b;以及在信号这个话题中&#xff1b;OS扮演的角色及背后是如何进行操作的&#xff1b;如何理解用户态内核态&#xff1b;还有一些可以引出的其他知识点&#xff1b;…...

多功能秒达开源工具箱源码|完全开源的中文工具箱

源码介绍 完全开源的中文工具箱永远的自由软件轻量级运行全平台支持&#xff08;包括ARMv8&#xff09;类似GPT的智能支持高效UI高度集成提供Docker映像和便携式版本支持桌面版开源插件库 下载地址 百度网盘下载 提取码&#xff1a;p9ck ▌本文由 6v6-博客网 整理分享 ▶ 更多…...

如何在腾讯云 OpenCloudOS 上安装 Docker 和 Docker Compose

从你提供的 /etc/os-release 文件内容来看&#xff0c;你的服务器运行的是 OpenCloudOS 9.2。这是一个基于 CentOS 和 RHEL 的开源操作系统&#xff0c;因此它属于 CentOS/RHEL 系列。 关键信息总结 操作系统名称&#xff1a;OpenCloudOS版本&#xff1a;9.2ID&#xff1a;op…...

清理skywalking历史索引

import requests from datetime import datetime, timedelta import os import re# 配置参数 ES_HOST os.getenv("ES_HOST", "http://192.168.0.250:9200") # ES地址 ES_USER os.getenv("ES_USER", "") # 用户…...

用nz-tabel写一个合并表格

用nz-tabel写一个合并表格 <nz-table #basicTable [nzData]"tableSearchStatus.dataList" nzBordered><thead><tr><th>班级</th><th>姓名</th><th>年龄</th><th>电话</th></tr></thead&…...

matlab计算转子系统的固有频率、振型、不平衡响应

可以计算转子系统的固有频率、振型、不平衡响应 MatrixRiccati/code/Dichotomy_1 (2).m , 2210 MatrixRiccati/code/Dichotomy_1.m , 2210 MatrixRiccati/code/RiccatiSY_1.m , 2756 MatrixRiccati/code/Trans1x (2).m , 451 MatrixRiccati/code/Trans1x.m , 451 MatrixRiccat…...

leetcode hot100刷题日记——29.合并两个有序链表

解答&#xff1a; 方法一&#xff1a;递归 递归的边界条件是啥呢&#xff1f; 递归别想那么多具体步骤&#xff0c;考虑大步骤&#xff0c;小的递归自己会去做的 class Solution { public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {//递归比较大小//先考虑…...

【机器人】具身导航 VLN 最新论文汇总 | Vision-and-Language Navigation

本文汇总了具身导航的论文&#xff0c;供大家参考学习&#xff0c;涵盖2025、2024、2023等 覆盖的会议和期刊&#xff1a;CVPR、IROS、ICRA、RSS、arXiv等等 论文和方法会持续更新的&#xff5e; 一、&#x1f3e0; 中文标题版 2025 &#x1f606; [2025] WMNav&#xff1a…...

Windows 安装 WSL2 并运行 Ubuntu 22.04 指南

Windows 安装 WSL2 并运行 Ubuntu 22.04 指南 本文为 Windows 10 和 Windows 11 用户提供从零开始搭建 WSL2 环境的详细指南&#xff0c;涵盖安装 Ubuntu 22.04、自定义存储位置、性能优化以及常见问题排查。无论你是开发者、运维工程师还是 Linux 爱好者&#xff0c;本文将助你…...

AI情感陪伴在医疗领域的核心应用潜力

一、精准情绪监测与干预 多模态情感识别系统 通过整合语音语调分析&#xff08;降调与语速异常检测抑郁倾向&#xff09;、微表情捕捉&#xff08;面部肌肉运动追踪焦虑状态&#xff09;、生理指标监测&#xff08;心率变异幅度反映应激水平&#xff09;等技术&#xff0c;构建…...

【计算机网络】第1章:概述—分组延时、丢失和吞吐量

目录 一、分组延时、丢失 1. 节点处理延时&#xff1a; 2. 排队延时&#xff1a; 3. 传输延时: 4. 传播延时: 5. 节点延时 6. 排队延时 7. 分组丢失 二、吞吐量 三、总结 &#xff08;一&#xff09;分组延时 1. 处理延时&#xff08;Processing Delay&#xff09; …...

Python Day38

Task&#xff1a; 1.Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09; 2.Dataloader类 3.minist手写数据集的了解 1. Dataset 类的 __getitem__ 和 __len__ 方法 在 PyTorch (或类似深度学习框架) 中&#xff0c;Dataset 是一个抽象基类&a…...

DeepSeek R1 模型小版本升级,DeepSeek-R1-0528都更新了哪些新特性?

DeepSeek-R1‑0528 技术剖析&#xff1a;思维链再进化&#xff0c;推理性能飙升 目录 版本概览深度思考能力再升级基准测试成绩功能与体验更新API 变动与示例模型开源与下载结语 版本概览 DeepSeek 团队今日发布 DeepSeek‑R1‑0528 —— 基于 DeepSeek V3 Base&#xff08;2…...

线路板厂家遇到的PCB元件放置的常见问题有哪些?

印刷电路板现在无处不在。尽管大多数人认为这是理所当然的&#xff0c;但工程师和设计师们充分意识到这些电路开发和生产背后的巨大努力。传统的PCB生产涉及复杂的机械和高昂的前期成本&#xff0c;因此必须将制造外包给专业工厂。 说到交货时间&#xff0c;你可能需要几周的时…...

【C/C++】无限长有序数组中查找特定元素

在无限长有序数组中查找特定元素&#xff0c;由于数组长度未知&#xff0c;需先定位搜索范围&#xff0c;再进行二分查找。以下是C实现&#xff1a; #include <iostream> #include <vector> #include <climits> using namespace std;// 假设数组访问函数&am…...

SQL正则表达式总结

这里写目录标题 一、元字符二、正则表达函数1、 regexp_like(x,pattern[,match_option])2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]]) 3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]]) 4、 REGEXP_REPLACE(x,patter…...

力扣经典算法篇-13-接雨水(较难,动态规划,加法转减法优化,双指针法)

1、题干 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3…...

STM32 -- USB虚拟串口通信

本篇操作: 通过CubeMX Keil&#xff0c;配置STM32作为USB设备端&#xff0c;与电脑上位机进行通信&#xff08;CDC&#xff09;&#xff1b;通用带USB功能的 STM32 芯片 &#xff08;如F1、F4等&#xff0c;系统时钟配置不同&#xff0c;代码通用&#xff09;。 目录 一、 S…...

uni-app开发特殊社交APP

uni-app开发特殊社交APP 目录 1.展示APP功能 2.展示项目结构 3.关于我的GitHub 引言 博主最近自己在GitHub上面上传了一个关于社交软件的项目&#xff08;该项目早已开发完毕&#xff09;, 这个社交软件比较特殊, 被称之为blind-date&#xff0c; blind-date 是基于 uni-…...

Linux中Shell脚本的常用命令

一、设置主机名称 1、通过修改系统文件来修改主机名称 [rootsakura1 桌面]# vim /etc/hostname sakura /etc/hostname&#xff1a;Linux 系统中存储主机名的配置文件。修改完文件后&#xff0c;在当前的shell中是不生效的&#xff0c;需要关闭当前shell后重新开启才能看到效…...