当前位置: 首页 > 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);}
}
http://www.lryc.cn/news/2393678.html

相关文章:

  • 深度学习|pytorch基本运算
  • (自用)Java学习-5.15(模糊搜索,收藏,购物车)
  • 替代 WPS 的新思路?快速将 Word 转为图片 PDF
  • 【K8S】K8S基础概念
  • FEMFAT许可分析的数据可视化方法
  • 打印机无法远程打印?可以本地打印,本地网络打印机设置给异地使用
  • 包含Javascript的HTML静态页面调取本机摄像头
  • PCB设计实践(三十一)PCB设计中机械孔的合理设计与应用指南
  • deepseek问答记录:请讲解一下torch.full_like()
  • 【Linux篇章】Linux 进程信号2:解锁系统高效运作的 “隐藏指令”,开启性能飞跃新征程(精讲捕捉信号及OS运行机制)
  • 多功能秒达开源工具箱源码|完全开源的中文工具箱
  • 如何在腾讯云 OpenCloudOS 上安装 Docker 和 Docker Compose
  • 清理skywalking历史索引
  • 用nz-tabel写一个合并表格
  • matlab计算转子系统的固有频率、振型、不平衡响应
  • leetcode hot100刷题日记——29.合并两个有序链表
  • 【机器人】具身导航 VLN 最新论文汇总 | Vision-and-Language Navigation
  • Windows 安装 WSL2 并运行 Ubuntu 22.04 指南
  • AI情感陪伴在医疗领域的核心应用潜力
  • 【计算机网络】第1章:概述—分组延时、丢失和吞吐量
  • Python Day38
  • DeepSeek R1 模型小版本升级,DeepSeek-R1-0528都更新了哪些新特性?
  • 线路板厂家遇到的PCB元件放置的常见问题有哪些?
  • 【C/C++】无限长有序数组中查找特定元素
  • SQL正则表达式总结
  • 力扣经典算法篇-13-接雨水(较难,动态规划,加法转减法优化,双指针法)
  • STM32 -- USB虚拟串口通信
  • uni-app开发特殊社交APP
  • Linux中Shell脚本的常用命令
  • RabbitMQ项目实战