第一范文网 - 专业文章范例文档资料分享平台

STM32—通用定时器应用

来源:用户分享 时间:2025/7/24 22:06:38 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

我的第三个STM32程序,使用MDK

其中timer.c程序如下,其它使用keil自带的文件

#include \

void RCC_cfg() //时钟系统初始化 {

ErrorStatus HSEStartUpStatus; //定义错误状态变量

RCC_DeInit(); //将RCC寄存器重新设置为默认值 RCC_HSEConfig(RCC_HSE_ON); //打开外部高速时钟晶振

HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速时钟晶振工作

if(HSEStartUpStatus == SUCCESS) {

RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK)为系统时钟 RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(APB2)为HCLK时钟 RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟(APB1)为HCLK的2分频

FLASH_SetLatency(FLASH_Latency_2); //设置FLASH代码延时 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能预取指缓存

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz

RCC_PLLCmd(ENABLE); //使能PLL

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; //等待PLL准备就绪

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置PLL为系统时钟源

while(RCC_GetSYSCLKSource() != 0x08); //判断PLL是否是系统时钟 }

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //允许TIM2的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //允许GPIO的时钟

}

void TIMER_cfg() //定时器初始化程序 {

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_DeInit(TIM2); //重新将Timer设置为缺省值 TIM_InternalClockConfig(TIM2); //采用内部时钟给TIM2提供时钟源

TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1; //预分频系数为36000-1,这样计数器时钟为72MHz/36000 = 2kHz

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割 0

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置计数器模式为向上计数模式 TIM_TimeBaseStructure.TIM_Period = 2000 - 1; //设置计数溢出大小,每计2000个数就产生一个更新事件

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //将配置应用到TIM2中

TIM_ClearFlag(TIM2, TIM_FLAG_Update); //清除溢出中断标志 TIM_ARRPreloadConfig(TIM2, DISABLE); //禁止ARR预装载缓冲器 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //开启TIM2的中断 }

void NVIC_cfg() //中断管理初始化 {

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //选择中断分组1

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; //选择TIM2的中断通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断 NVIC_Init(&NVIC_InitStructure); }

搜索更多关于: STM32—通用定时器应用 的文档
STM32—通用定时器应用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c90h9d24i0i1wxgv8jpqh_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top