IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32常见定时器---TIM定时及PWM输出 -> 正文阅读

[嵌入式]stm32常见定时器---TIM定时及PWM输出

STM32 常见定时器资源:

系统滴答定时器SysTick----提供时钟节拍做时间基准

看门狗定时器WatchDog----防止程序跑飞

实时时钟RTC

基本定时器:TIM7、TIM6

通用定时器:TIM2--TIM5----在通用定时器的基础的实现输出比较、输入捕获、PWM生成、单脉冲模式输出等使用最广。

高级定时器:TIM1、TIM8

这篇主讲TIM定时器的应用

高级控制定时器(TIM1和TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源,它们可以同步操作。

定时器的定时时间等于计数器的中断周期乘以中断的次数

STM32的通用定时器是一个通过可编程预分频器(Prescaler)驱动的16位自动重装主计数器(Counter Period)构成。可以对内部时钟或触发源以及外部时钟或触发源进行计数。

公式:定时时间=(Prescaler+1)*(Counter Period+1)/定时器时钟频率

例如要定时时间为0.1ms,可以设Prescaler=7199,Counter Period=999,(注Prescaler和Counter Period的值不是固定的)则:

(7199+1)*(999+1)/72000000=0.1ms

TIM在CUbeMX里的配置

【1】设置Clock Source时钟源

【2】设置Prescaler和Counter Period参数

【3】设置NVIC嵌套向量中断控制器

例:时钟信号72MHz,【1】利用TIM2实现间隔定时,每隔0.5秒将LED1的开关状态翻转。【2】利用TIM3实现间隔定时,每隔1秒将LED2的开关状态翻转。

代码如下(只给出主要部分):

/*通用定时器TIM练习*/
//回调函数,定时器中断服务函数调用的HAL库函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM3)
	{
		LED1_TOG;
	}
	if(htim->Instance==TIM4)
	{
		LED2_TOG;
	}
}
int main(void)
{

  HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();

  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_TIM4_Init();
  LED_GPIO_Init();
  /* USER CODE BEGIN WHILE */
  HAL_TIM_Base_Start_IT(&htim3);//使能定时器
  HAL_TIM_Base_Start_IT(&htim4);
}

PWM是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术

如图为向上计数:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 定时器重装载值为ARR,比较值CCRx ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? t时刻对计数器值和比较值进行比较 ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果计数器值小于CCRx值,输出低电平 ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果计数器值大于CCRx值,输出高电平?

PWM的一个周期? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?定时器从0开始向上计数 ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?当0-t1段,定时器计数器TIMx_CNT值小于CCRx值,输出低电平 ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? t1-t2段,定时器计数器TIMx_CNT值大于CCRx值,输出高电平;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 当TIMx_CNT值达到ARR时,定时器溢出,重新向上计数...循环此过程 至此一个PWM周期完成

影响因素? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ARR :决定PWM周期(在时钟频率一定的情况下,当前为默认内部时钟CK_INT)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CCRx : 决定PWM占空比(高低电平所占整个周期比例)

向下计数则是从一个设定的数递减到零。

可参考:?https://www.cnblogs.com/brianblog/p/7117896.html

以stm32f103ve为例

在pwm控制呼吸灯时TIM选择的PWM通道对应引脚要与LED对应引脚用杜邦线连接

如用TIM8的CH1来控制LED1,需将标出两引脚连接,同理如果用TIM1控制LED1的话将相应引脚连接即可。

int main(void)
{
	char up_down_flag,pwm_value;
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
//  MX_TIM1_Init();
  MX_TIM8_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1);开启PWM输出
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
			HAL_Delay(20);
		  if(pwm_value == 0)
		  {
			  up_down_flag = 0;
		  }
		  
		  if(pwm_value == 40)
		  {
			  up_down_flag = 1;
		  }
		  
		  if(up_down_flag == 0)
		  {
			  pwm_value++;
		  }
		  else
		  {
			  pwm_value--;
		  }		  
		  __HAL_TIM_SET_COMPARE(&htim8,TIM_CHANNEL_1,pwm_value);
  }
  /* USER CODE END 3 */
}

函数总结:

1 __HAL_TIM_SET_COMPARE()   // 是设置CCRx,一般是用在PWM输出的,控制PWM占空比
2 __HAL_TIM_GET_COMPARE()   // 是用来读取CCRx的,一般用于捕获处理

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:53:26  更:2022-02-05 21:53:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:38:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码