手机如何建立网站,腾讯云wordpress镜像,免费网站开发软件有哪些,亚圣信息科技做网站怎么样“每一次的感应#xff0c;都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】 前言预备知识1.定时器介绍11.1软件延时的优缺点1.2定时器工作原理1.3定时器的分类1.4 STM32F103C8T6定时器资源1.5通用定时器介绍 2.定时器介绍22.1定时器计数模式2.2定时器时钟源… “每一次的感应都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】 前言预备知识1.定时器介绍11.1软件延时的优缺点1.2定时器工作原理1.3定时器的分类1.4 STM32F103C8T6定时器资源1.5通用定时器介绍 2.定时器介绍22.1定时器计数模式2.2定时器时钟源2.3定时器溢出计算公式 3.使用定时器中断点亮LED灯3.1实验需求3.2配置工程3.3编程实现实验需求 4.PWM概述4.1 STM32F103C8T6 PWM资源4.2 PWM输出模式4.3 PWM周期与频率4.4 PWM占空比 5. PWM实现呼吸灯效果5.1实验需求5.2实验原理5.3配置工程5.4编程实现实验需求 结束语 前言 本篇博文介绍的是基于STM32F103C8T6单片机第二个项目《感应开关盖垃圾桶》包含定时器介绍1定时器介绍2使用定时器中断点亮LED灯PWM概述PWM实现呼吸灯效果。看到这篇博文的朋友可以先赞再看吗
预备知识 一、基本电路标识识别和接线例如VCC,GND。 二、电脑基本操作复制粘贴 三、分文件编程 四、C变量 五、基本输入输出 六、流程控制 七、函数 八、指针 如果以上知识不清楚请自行学习后再来浏览。如果我有没例出的请在评论区写一下。谢谢啦
1.定时器介绍1
1.1软件延时的优缺点
优点 简单易实现软件延时通常只需要编写一小段代码通过循环或者延时函数即可实现不需要额外的硬件资源。 对硬件要求低软件延时不需要专门的硬件支持只需要有基本的CPU运算能力即可。 灵活性高软件延时可以根据需要进行调整可以很容易地改变延时的时间长度。 节省成本由于不需要额外的硬件资源软件延时可以在很大程度上节省硬件成本。
优点 占用CPU资源在软件延时期间CPU需要一直执行延时代码无法执行其他任务这会导致CPU资源的浪费。 影响系统性能如果大量使用软件延时会导致系统实时性变差因为CPU在等待延时期间无法处理其他任务。 精度受限软件延时的精度可能受到操作系统调度、中断等因素的影响不如硬件延时精确。
void Delay500ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i);
}1.2定时器工作原理
时基的定义 **时基是一个时间显示的基本单位也可以理解为时间基准。**它在不同的领域有不同的应用。 在电子线路中时基主要用来表示数字电路中的基准时钟例如在示波器中时基表示示波器上横轴一大格波形所占据的时间。时基决定了示波器相对采样率的大小也在一定程度上决定了示波器显示波形与原波形的相符合程度。 在计算机系统中时基是用来衡量时间的基准用于同步和计时以实现各种功能。时基的类型有多种如硬件时钟、系统时钟等它们各自在计算机系统中扮演不同的角色。时基的准确性对计算机系统的稳定性和准确性至关重要它可以用来实现操作系统对不同进程的调度、对外部事件的响应等同时在信息传输、网络通信等方面也发挥重要作用。 此外时基也可以指时间词中的“年、月、日、天”等语素这些语素标明了计时的基准。
定时器工作原理 使用精准的时基通过硬件的方式实现定时器功能。定时器核心就是计数器。 1.3定时器的分类
基本定时器TIM6~TIM7STM32单片机内部数量少也用得少。通用定时器TIM2~TIM5STM32单片机内部数量多用得也多。高级定时器TIM1和TIM8STM32单片机内部数量少也用得少。 1.4 STM32F103C8T6定时器资源 1.5通用定时器介绍
16 位向上、向下、向上/向下自动装载计数器TIMx_CNT。16 位可编程(可以实时修改)预分频器(TIMx_PSC)计数器时钟频率的分频系数为 165535 之间的 任意数值。4 个独立通道TIMx_CH1~4这些通道可以用来作为 A输入捕获 B输出比较 CPWM 生成(边缘或中间对齐模式) D单脉冲模式输出可使用外部信号TIMx_ETR控制定时器和定时器互连可以用 1 个定时器控制另外一个定时器 的同步电路。如下事件发生时产生中断/DMA A更新计数器向上溢出/向下溢出计数器初始化(通过软件或者内部/外部触发) B触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) C输入捕获 D输出比较 E支持针对定位的增量(正交)编码器和霍尔传感器电路 F触发输入作为外部时钟或者按周期的电流管理
2.定时器介绍2
2.1定时器计数模式
计数模式计数溢出值计数重装值向上计数CNT ARRCNT 0向下计数CNT 0CNT ARR中心对齐计数CNT ARR - 1CNT ARRCNT 1CNT 0 2.2定时器时钟源 2.3定时器溢出计算公式 例如要定时500ms则PSC7199ARR4999Tclk72M
3.使用定时器中断点亮LED灯
3.1实验需求 使用定时器中断方法每500ms翻转一次LED1和LED2的状态
3.2配置工程
配置RCC如下步骤 配置时序框图如下图步骤。 配置GPIO口如下图步骤。 将配置PB8默认输出高电平PB9默认输出低电平。实现LED1默认关闭LED2默认打开。 定时器介绍如下图。 配置定时器2如下图步骤。 定时器溢出参数介绍。 配置定时器溢出参数如下图步骤。 打开定时器中断如下图步骤。 配置工程基本信息如下图步骤。 配置生成工程必要文件如下图步骤。 生成工程如下图步骤。 3.3编程实现实验需求
找到MX_TIM2_Init();函数体确认htim2中什么元素接收定时器模式。 找到定时器中断服务函数实现每隔0.5秒亮灭LED灯 修改定时器中断服务函数实现每隔0.5秒亮灭LED灯。 修改思路看代码注释定时器中断服务函数代码
//发生定时器中断立马进入定时器中断服务函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//一根定时器中断线上有很多中断源//检测定时器2中断源if(htim-Instance TIM2){//检测到定时器2中断源后进行LED1和LED2状态的翻转HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);}
}在主函数中调用启动定时器函数
HAL_TIM_Base_Start_IT(htim2);4.PWM概述
4.1 STM32F103C8T6 PWM资源
高级定时器TIM17路通用定时器TIM2~TIM4各4路
4.2 PWM输出模式
PWM模式1在向上计数时一旦 CNT CCRx 时输出为有效电平否则为无效电平 在向下计数时一旦 CNT CCRx 时输出为无效电平否则为有效电平。PWM模式2在向上计数时一旦 CNT CCRx 时输出为无效电平否则为有效电平 在向下计数时一旦 CNT CCRx 时输出为有效电平否则为无效电平。 4.3 PWM周期与频率 4.4 PWM占空比 由TIMx_CCRx寄存器决定。
5. PWM实现呼吸灯效果
5.1实验需求 使用PWM点亮LED1和LED2实现交叉呼吸灯效果
5.2实验原理
LED灯越来越亮和越来越暗的原理是由不同的占空比决定。使用公式计算周期和频率例如2KHz则PSC71ARR499LED1连接到定时器4的3通道LED2连接到定时器4的4通道。参考手册内容 5.3配置工程
配置SYS如下图步骤。 配置RCC如下图步骤。 配置时序框图如下图步骤。 配置LED1相应引脚输出PWM波如下图步骤。 配置LED2相应引脚输出PWM波如下图步骤。 根据公式配置定时器溢出值使产生2000Hz的PWM波。如下图步骤。 PWM输出参数理解 设置LED1和LED2相应引脚PWM输出参数有效电平为低电平如下图步骤。 配置工程基础信息如下图步骤。 配置生成工程必要文件如下图步骤。 生成工程如下图步骤。 5.4编程实现实验需求
定义LED1和LED2的占空比变量定义PWM方向变量。
uint16_t pwmVal1 0; //调整 LED1 PWM 占空比
uint16_t pwmVal2 500; //调整 LED2 PWM 占空比
uint8_t dir 1; //设置改变方向。1占空比变大0占空比变小在定时器初始化函数后面打开定时器4通道3(LED1)和通道4(LED2)的PWM
//打开定时器4通道3和通道4的PWM
HAL_TIM_PWM_Start(htim4,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(htim4,TIM_CHANNEL_4);循环实现呼吸灯效果思路请看代码注释。
while (1){/* USER CODE END WHILE *///延时1毫秒防止灯一直灭HAL_Delay(1);//检测占空比变大方向if(dir) {pwmVal1; //LED1逐渐变亮pwmVal2--; //LED2逐渐变暗}else //占空比变小方向{pwmVal1--; //LED1逐渐变暗pwmVal2; //LED2逐渐变亮}if(pwmVal1 500) //当LED1达到最亮就让LED1逐渐变暗当LED2达到最暗就让LED1逐渐变亮{dir 0;}else if(pwmVal1 0) //当LED1达到最暗就让LED1逐渐变亮当LED2达到最亮就让LED1逐渐变暗{dir 1;}//修改占空比的值修改比较值实现LED灯的呼吸效果__HAL_TIM_SetCompare(htim4,TIM_CHANNEL_3,pwmVal1);__HAL_TIM_SetCompare(htim4,TIM_CHANNEL_4,pwmVal2);/* USER CODE BEGIN 3 */}结束语 很高兴您能看到这里点个赞再走呗。谢谢您啦