本文介绍: 除非APB1的分频系数是1,否则通用定时器的时钟等于APB1的时钟的2倍。4.内部触发输入itrx:使用一i个定时器作为另一个定时器的预分频器。3.外部时钟模式2:外部触发输入(ETR)2.外部时钟模式1:外部输入脚(TIX)
目前的想法是直接过一遍视频,然后再码一下代码,熟悉一下,百炼成金!!!!!
定时器中断实验
时钟的选择:
1.内部时钟
2.外部时钟模式1:外部输入脚(TIX)
3.外部时钟模式2:外部触发输入(ETR)
4.内部触发输入itrx:使用一i个定时器作为另一个定时器的预分频器
除非APB1的分频系数是1,否则通用定时器的时钟等于APB1的时钟的2倍
/*
定时器中断实现步骤
1.定时器时钟使能
2.初始化定时器,配置ARR.PSC
3.开启定时器中断,配置NVIC
4.使能定时器
6.编写中断服务函数
产生现象如下:
通过定时器配置,每500ms中断一次,然后中断服务函数中控制LED实现LED1状态取反(闪烁)
*/
#include "time.h"
#include "led.h"
void TIM3_Int_Init(u16 arr,u16 psc){
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseInitStructure.TIM_Period=arr;
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision= TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
//中断优先级nvic配置
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 0 级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
NVIC_Init(&NVIC_InitStructure); //④初始化 NVIC 寄存器
TIM_Cmd(TIM3, ENABLE);
}
//定时器中断服务函数
void TIM3_IRQHandler(void){
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){
LED1=!LED1;
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
}
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置 NVIC 中断分组 2
LED_Init(); //LED 初始化
TIM3_Int_Init(4999,7199);//500ms
while(1){
LED0=!LED0;
delay_ms(200);
}
原文地址:https://blog.csdn.net/qq_44727038/article/details/135490489
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_54653.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。