日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定时器中断实验

發(fā)布時(shí)間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定时器中断实验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

通用定時(shí)器

?

APB1默認(rèn)為36M,36*2=72M,

計(jì)數(shù)器是0~65535

?

兩個(gè)AHB/APB橋在AHB2個(gè)APB總線間提供同步連接。 APB1操作速度限于36MHzAPB2
作于全速(最高72MHz)
注意: 當(dāng)對APB寄存器進(jìn)行8位或者16位訪問時(shí),該訪問會被自動(dòng)轉(zhuǎn)換成32位的訪問:橋會自動(dòng)將8
或者32位的數(shù)據(jù)擴(kuò)展以配合32位的向量。
程序存儲器、數(shù)據(jù)存儲器、寄存器和輸入輸出端口被組織在同一個(gè)4GB的線性地址空間內(nèi)。

下面的例子說明如何映射別名區(qū)中SRAM地址為0x20000300的字節(jié)中的位216進(jìn)制的計(jì)算
0x22006008 = 0x22000000 + (0x300× 32) + (2× 4).
0x22006008地址的寫操作與對SRAM中地址0x20000300字節(jié)的位2執(zhí)行讀--寫操作有著相
同的效果

128 256? 512 1024

一個(gè)輸入通道可以給兩個(gè)捕獲通道

?時(shí)鐘分頻是設(shè)置采樣濾波的

重復(fù)計(jì)數(shù)器是高級定時(shí)器需要設(shè)置的

分頻系數(shù)會自動(dòng)加一,為36000,不能超過65535

500ms=1000*36000/72M

讀取狀態(tài)標(biāo)志位以及清除中斷標(biāo)志位,函數(shù)分別為TIM_GetFlagStatus和TIM_ClearFlag

?time.c

?

#include "time.h"
#include "led.h"

?

void TIM4_Init(u16 pre,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//結(jié)構(gòu)體初始化
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4時(shí)鐘

TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//定時(shí)器預(yù)分頻器
TIM_TimeBaseInitStructure.TIM_Period=pre; //定時(shí)器周期
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//技術(shù)模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //時(shí)鐘分頻
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);//清除標(biāo)志

NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//搶占式優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; //響應(yīng)優(yōu)先級,0到3選擇
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷通道
NVIC_Init(&NVIC_InitStructure);

?

TIM_Cmd(TIM4,ENABLE);

}

?

void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)==1)
{
led2=!led2;
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);//清除標(biāo)志
}

?

?總結(jié):1.TIM4初始化函數(shù),定義變量

? ? ? ? ? ? 2.TIM和NVIC結(jié)構(gòu)體初始化

? ? ? ? ? ? 3.使能TIM4時(shí)鐘,掛接在APB1上

? ? ? ? ? ? 4.定時(shí)器預(yù)分頻器,周期,技術(shù)模式,時(shí)鐘分頻,初始變量及結(jié)構(gòu)地址

? ? ? ? ? ?5.TIM_ITConfig,清除標(biāo)志

? ? ? ? ? ?6.NVIC的設(shè)置,?TIM_Cmd(TIM4,ENABLE);

? ? ? ? ? ?7.TIM4_IRQHandler函數(shù),if語句判斷狀態(tài)if(TIM_GetITStatus(TIM4,TIM_IT_Update)==1)

? ? ? ? ? ?8.清除標(biāo)志,TIM_ClearITPendingBit(TIM4,TIM_IT_Update);

?

?time.h

#ifndef _time_H
#define _time_H

#include "system.h"

void TIM4_Init(u16 pre,u16 psc);

#endif

總結(jié):注意包含頭文件#include "system.h",初始化函數(shù)

?

main.c

?

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "time.h"

?

int main()
{
u8 i=0;
SysTick_Init(72);//72M
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init();//初始化
TIM4_Init(1000,36000-1);//500ms定時(shí)器時(shí)間

while(1) //可以檢測是否死機(jī)
{
i++;
if(i%20==0)
{
led1=!led1; //led1不斷閃爍
}
delay_ms(10);
}
}

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/296389183yy/p/9370730.html

總結(jié)

以上是生活随笔為你收集整理的定时器中断实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。