手机网站模板制作工具,网站公司打电话来说做网站,建设网站课程设计摘要,彩票开奖网站开发提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、STM32定时器的结构#xff1f;1. 51定时器的结构1.1如何实现定时1s的功能#xff1f; 2. stm32定时器的结构2.1 通用定时器 二、使用步骤1.开启时钟2.初始… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言一、STM32定时器的结构1. 51定时器的结构1.1如何实现定时1s的功能 2. stm32定时器的结构2.1 通用定时器 二、使用步骤1.开启时钟2.初始化定时器3.中断配置分组、优先级3.1 配置中断源3.2配置中断优先级3.3 开启定时器3.4 中断服务函数3.5判断中断源 清除中断源 三、参考初始化函数3.1写成外设初始化函数方便main函数调用3.2中断函数3.3 中断服务函数加入时分秒 四、测试验证4.1时钟使能查看4.2 更新中断状态位4.3 其他状态和配置 五、拓展总结 前言
提示这里可以添加本文要记录的大概内容
定时器有什么用精准延时,PWM,做一个时钟年月日时分秒。时钟最基本的就是1s怎么来 提示以下是本篇文章正文内容下面案例可供参考
一、STM32定时器的结构
1. 51定时器的结构 1.1如何实现定时1s的功能 选定时功能装初值配置定时器中断中断里面计数计数多少次根据定时的需要
2. stm32定时器的结构 2.1 通用定时器
部分芯片时没有基本定时器的 有基本定时器的型号 时钟来源RCC控制器应该是要使能分频器装计数初值中断
二、使用步骤
1.开启时钟 代码如下示例
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);2.初始化定时器 代码如下示例
//TIM_TimeBaseInitStruct.TIM_ClockDivision
TIM_TimeBaseInitStruct.TIM_CounterModeTIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period50000-1;
TIM_TimeBaseInitStruct.TIM_Prescaler 72-1;
//TIM_TimeBaseInitStruct.TIM_RepetitionCounterTIM_TimeBaseInit(TIM6, TIM_TimeBaseInitStruct);3.中断配置分组、优先级
3.1 配置中断源
timer6只有溢出中断 TIM_ITConfig( TIM6, TIM_IT_Update, ENABLE);3.2配置中断优先级 NVIC_InitStruct.NVIC_IRQChannelTIM6_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority0; //0-3NVIC_InitStruct.NVIC_IRQChannelSubPriority 1; //0-3NVIC_Init(NVIC_InitStruct);3.3 开启定时器
出了GPIO今后每个外设都要单独开启 TIM_Cmd( TIM6, ENABLE); //使能3.4 中断服务函数
在启动文件找到中断向量表然后完成中断服务函数
void TIM6_IRQHandler()
{if(TIM_GetITStatus( TIM6, TIM_IT_Update)){TIM_ClearITPendingBit(TIM6, TIM_IT_Update);num;if(num20){num0;//led取反}}
}3.5判断中断源 清除中断源 三、参考初始化函数
3.1写成外设初始化函数方便main函数调用
void timer6()
{/*1.开启APB1时钟 72MHz2.配置定时器6 TimeInit 72预分配0-65535 1000000us/50000us CNT20 定时时间/中断溢出时间计数值3.中断配置 分组优先级 。开启中断源4.中断服务函数 计数值 1us 计数20次后让一个LED取反*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);//TIM_TimeBaseInitStruct.TIM_ClockDivisionTIM_TimeBaseInitStruct.TIM_CounterModeTIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period50000-1;TIM_TimeBaseInitStruct.TIM_Prescaler 72-1;//TIM_TimeBaseInitStruct.TIM_RepetitionCounterTIM_TimeBaseInit(TIM6, TIM_TimeBaseInitStruct);//开启中断TIM_ITConfig( TIM6, TIM_IT_Update, ENABLE);TIM_Cmd( TIM6, ENABLE); //使能NVIC_InitStruct.NVIC_IRQChannelTIM6_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority0; //0-3NVIC_InitStruct.NVIC_IRQChannelSubPriority 1; //0-3NVIC_Init(NVIC_InitStruct);}3.2中断函数
void TIM6_IRQHandler()
{if(TIM_GetITStatus( TIM6, TIM_IT_Update)){TIM_ClearITPendingBit(TIM6, TIM_IT_Update);num;if(num20){num0;//led取反}}
}3.3 中断服务函数加入时分秒
void TIM6_IRQHandler()
{if(TIM_GetITStatus( TIM6, TIM_IT_Update)){TIM_ClearITPendingBit(TIM6, TIM_IT_Update);num;if(num20){num0;//led取反GPIOA-ODR^0x0100; // 异或相同为0不同为1 //拿0 去异或原来是0还是0原来是1还是1。既可以保持不变//拿1 去异或原来是0变成1原来是0变成1。起到取反的作用second;one_second_flag1;if(second60){second0;minute;if(minute60){minute0;hour;if(hour24){hour0;}}}}}
}四、测试验证
在中断服务函数设定断点 4.1时钟使能查看 4.2 更新中断状态位 4.3 其他状态和配置 五、拓展
串口 时钟
通过串口获取时分秒通过串口修改时间 总结
深入浅出从51单片机定时结构到stm32定时结构引导讲解了STM32如何实现定时1s的原理并工程实现