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

【stm32】HAL库开发——CubeMX配置外部中断和配置PWM

目录

一、CubeMX配置外部中断

1.CubeMX配置外部中断

2.代码实现按键控制LED亮灭

3.外部中断函数常用函数

二、Cube配置PWM

1.PWM介绍

2.PWM呼吸灯


一、CubeMX配置外部中断

1.CubeMX配置外部中断

这里还是使用PA9和10引脚实现,9负责接受外部中断,10负责点亮LED:

a1067cee18354ff18b9537b56941ea65.png

详细配置(上拉):

1019bce5df254c81bd4a3533b83b5abb.png

具体GPIO Mode可以选择一下这些,下面是我用翻译软件翻译过来的了!

b68f671005274ac6ac9efe646f9af1ff.png

开启中断:

48682db99133498d82f2136affab0e98.png

2.代码实现按键控制LED亮灭

//外部中断函数回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{status ^= 1;if(status == 1)  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);if(status == 0)  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);}

这样每次进入回调函数,就会修改LED引脚的电平状态,从而控制LED亮灭!

3.外部中断函数常用函数

/* GPIO初始化 */
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);/* 在函数初始化之后的引脚恢复成默认的转态 */
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);/* 读取引脚的电平转态 */
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
/* 引脚写1或0 */
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
/* 翻转引脚电平 */
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
/* 锁住GPIO的配置、读取、写入状态等操作 */
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
/* 外部中断回调函数,清除中断标志位 */
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
/* 中断回调函数,中断函数响应动作 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

二、Cube配置PWM

1.PWM介绍

PSC(预分频系数),ARR(自动重装系数),CCR(捕获/比较系数)

PWM的频率计算公式为:Freq=时钟频率(72MHZ)/ (PSC + 1) / (ARR + 1);

PWM的工作模式:
PWM模式1(向上计数)  :计数器从0计数加到自动重装载值(TIMx_ARR),然后重新从0开始计数,并且产生一个计数器溢出事件   
PWM模式2(向下计数)  :计数器从自动重装载值(TIMx_ARR)减到0,然后重新从重装载值(TIMx_ARR)开始递减,并且产生一个计数器溢出事件   

PWM的输出模式(mode):

模式1:CNT<CCR 输出有效电平

模式2:CNT>CCR 输出有效电平

输出比较极性(有效电平):

Hight:高为有效电平

Low:    低为有效电平

PWMCubeMX配置:

207cac51ccfb476e9efe9fd02bff9f72.png

4ef8905c5886445a824278e44318e46e.png

2.PWM呼吸灯

这里选择小灯泡正极接引脚,所以有效电平为高,这里选择模式1(CNT<CCR 输出有效电平)

CubeMX配置PWM:

6408b6f0e380420faad1c9616d682884.png

eb248ca098074c34b6a832a3b1e90127.png

代码实现:

int main(void)
{/* USER CODE BEGIN 1 */int status = 0;int temp = 0;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();/* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);   //开启定时器PWM输出  /* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(status == 0){temp ++;__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, temp);HAL_Delay(1);if(temp == 500)  status = 1;			}else if(status == 1){temp --;__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, temp);HAL_Delay(1);if(temp == 0)  status = 0;		}}/* USER CODE END 3 */
}

常用函数:

__HAL_TIM_SET_PRESCALER(&htim2,72-1);//10000HZ//设置预分频
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 83);//83%设置占空比
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);   //开启定时器PWM输出  
__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, temp);//设置占空比

http://www.xdnf.cn/news/1070083.html

相关文章:

  • 多租户多会话隔离存储架构的完整实现方案
  • Linux命令:内置命令与外部命令的本质区别
  • 高中成绩可视化平台开发笔记
  • 时间同步 gptp ptp
  • 推荐一个前端基于vue3.x,vite7.x,后端基于springboot3.4.x的完全开源的前后端分离的中后台管理系统基础项目(纯净版)
  • 操作系统面试知识点(1):操作系统基础
  • 解锁AI无限潜能!景联文科技数据产品矩阵再升级:多语言题库、海量语料、垂域代码库,全面赋能大模型训练
  • Pydantic 模型
  • vscode运行c++文件和插件的方法
  • 信息化系统流程管理模块,企业高价值资产的跨省/市运输审批流程的功能
  • PHP基础2(流程控制,函数)
  • redis8.0新特性:t-digest计算数据百分位
  • 美团业务调整,但不裁员不降薪
  • 使用 Python 自动化文件获取:从 FTP 到 API 的全面指南
  • 力扣网C语言编程题:搜索插入位置
  • SpringBoot 中 @Transactional 的使用
  • lua 程序性能分析工具 Plua 推荐
  • CTF:PHP 多关卡绕过挑战
  • python 爬虫 下载视频
  • lua脚本为什么能保证原子性
  • 新手向:Anaconda3的安装与使用方法
  • 【UniApp 日期选择器实现与样式优化实践】
  • 大语言模型介绍
  • 推荐系统的视频特征-视频关键帧特征提取与向量生成
  • 七天学会SpringCloud分布式微服务——02——第一个微服务项目
  • Flink Oracle CDC 总结
  • 六个安全Agent设计模式:有效防止Prompt注入攻击
  • Milvus 资源调度系统的核心部分:「查询节点」「资源组」「数据库」
  • 黑马ReactDay02
  • gitlab https链接转为ssh链接