云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > STM32—通用定时器应用

STM32—通用定时器应用

  • 62 次阅读
  • 3 次下载
  • 2025/6/1 12:25:02

我的第三个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—通用定时器应用 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

我的第三个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) {

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com