赞
踩
51单片机的延时(软件定时):
//由stc软件生成的51延时代码 void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); }
缺点:不精确、占用CPU资源
使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器。
通用定时器介绍:
- 16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
- 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的
任意数值。- 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
A.输入捕获
B.输出比较
C.PWM 生成(边缘或中间对齐模式)
D.单脉冲模式输出- 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)
的同步电路。- 如下事件发生时产生中断/DMA:
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
C.输入捕获
D.输出比较
E.支持针对定位的增量(正交)编码器和霍尔传感器电路
F.触发输入作为外部时钟或者按周期的电流管理
(PSC为分频系数)(ARR为重装载值)(Tout为输出时间(需要))(Tclk为时钟频率)
已知:Tclk = 72MHZ
例如,要定时1000ms,则:PSC=7199,ARR=9999,Tclk=72M
#############################################################################
PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
PWM占空比:由TIMx_CCRx寄存器决定。
//启动tim2
HAL_TIM_Base_Start_IT(&htim2);
//配置占空比
//参数:句柄,通道,值
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
int main() { // 定义变量 uint16_t pwmVal=0; //调整PWM占空比 uint8_t flag=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小 // 使能 Timer4 第3通道 PWM 输出 HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3); // while循环实现呼吸灯效果 while (1) { HAL_Delay(1); if (flag) pwmVal++; else pwmVal--; if (pwmVal > 500) flag = 0; if (pwmVal == 0) flag = 1; //修改比较值,修改占空比 __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal); } }
如果有问题,欢迎提出,共同进步。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。