STM32F407基本定时器6学习

#include “timer.h”
#include “stdio.h”
#include “led.h”
/********************************************************************************************
*函数名: TIM6_Init
*功 能: 初始化定时器6
*参 数: 无
*返 回: 无
备 注: 1.步骤:1.使能时钟 2.调用定时器初始化函数 3.允许更新中断(映射) 4.NVIC相关设置
2.RCC_AHB1时钟频率 42MHz(168/4)
3.基本定时器 (TIM6和TIM7)的特性:16 位自动重装载值递增计数器
4.举例:IM6_Int_Init(8000-1,5000-1); 定时器时钟42
2M,分频系数8400,所以84M/8400=10Khz的计数频率,计数5000次为500ms
********************************************************************************************/
void TIM6_Init(u16 psc, u16 arr)
{
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 , ENABLE);			//使能时钟
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;	//计数模式
TIM_TimeBaseInitStruct.TIM_Period = arr - 1;					//自动重装载值,范围0~65535,
TIM_TimeBaseInitStruct.TIM_Prescaler = psc - 1;					//分频系数,不为1时,定时器频率挂载总线的两倍(看时钟树得出),所以42000000/42000 
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct);				//初始化
TIM_Cmd(TIM6, ENABLE);											//使能定时器6

TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); 						//允许定时器6更新中断
NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;			
NVIC_EnableIRQ(TIM6_DAC_IRQn );									//使能TIM6中断
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}

/********************************************************************************************
*函数名: TIM6_IRQHandler
*功 能: 定时器6中断服务函数
*参 数: 无
*返 回: 无
*备 注: 1.步骤:设置当发生中断溢出才进入事件,然后清除标志位。
********************************************************************************************/
void TIM6_DAC_IRQHandler(void)//曾经的错误:void TIM6_DAC_IRQn (void),TIM6_IRQHandler
{
if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET) //溢出中断
{
printf(“进入定时器中断6\r\n”); //需放在发生中断溢出后才执行,不然会一直产生。
LED1 = !LED1;
}
TIM_ClearITPendingBit(TIM6,TIM_IT_Update); //清除中断标志位
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个使用STM32F407高级定时器的例程: ```c #include "sys.h" #include "delay.h" #include "usart.h" #include "pwm.h" int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置系统中断优先级分组2 delay_init(168); // 初始化延时函数 uart_init(115200); // 初始化串口波特率为115200 TIM1_PWM_Init(2000-1, 840-1); // 84分频。PWM频率=84000000/840/2000=50hz TIM_SetCompare1(TIM1, 100); while(1) { // 主循环中可以添加其他代码 } } ``` 这个例程使用了STM32F407的高级定时器(TIM1)来生成PWM信号。首先,通过`NVIC_PriorityGroupConfig`函数设置系统中断优先级分组。然后,初始化延时函数和串口波特率。接下来,使用`TIM1_PWM_Init`函数初始化定时器1为PWM模式,设置了2000-1的自动重载值和840-1的预分频值,从而得到50Hz的PWM频率。最后,使用`TIM_SetCompare1`函数设置通道1的占空比为100。在主循环中,可以添加其他代码。 请注意,这只是一个例程,具体的使用方法和功能可以参考STM32F407的数据手册和相关库函数的使用说明。 #### 引用[.reference_title] - *1* [【开源】STM32F407-定时器实验教程 ——疯壳·ARM双处理器开发板系列](https://blog.csdn.net/weixin_47220339/article/details/116013211)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32F407高级定时器驱动舵机](https://blog.csdn.net/fafaloveai/article/details/122166471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32F407基本定时器6学习](https://blog.csdn.net/weixin_45370783/article/details/112590512)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值