STM32F103定時器1每毫秒中斷一次

定時器溢出中斷,在程序設計中經常用到。在使用TIM1和TIM8溢出中斷時,需要注意“TIM_TimeBaseStructure.TIM_RepetitionCounter=0;”,它表示溢出一次,并可以設置中斷標志位。?? ?

TIM1_Interrupt_Initializtion(1000,72);?//當arr=1000,psc=72時,則為1ms溢出一次就設置中斷標志位,,誤差為1us;

因為標準庫默認TIM_TimeBaseStructure.TIM_RepetitionCounter=10,就表示溢出10次,才設置中斷標志位。

若忘記設置,就是導致溢出時間不準確,嚴重會浪費調試時間。

時間久了,就會忘記,還是記錄一下,加深記憶。

TIM1程序如下:

#include "Timer1.h"u16 TIM1_MillisecondCounter;
u8  TIM1_SecondFlag;void TIM1_Interrupt_Initializtion(u16 arr,u16 psc);//函數聲明//定時器1中斷初始化
//APB2時鐘為72MHz
//arr:自動重裝值。
//psc:時鐘預分頻數
//TIM_CKD_DIV1:定時器時鐘 = 輸入頻率
//TIM_CKD_DIV2:定時器時鐘 = 輸入頻率/2
//TIM_CKD_DIV4:定時器時鐘 = 輸入頻率/4
//TIM1溢出時間: arr*psc/72000000/TIM_CKD_DIVx
//TIM1_Interrupt_Initializtion(1000,72);//當arr=1000,psc=72時,則為1ms,誤差為1us;
void TIM1_Interrupt_Initializtion(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;
//	u8 ch;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定時器TIM1的APB2外設時鐘//定時器TIM1初始化TIM_TimeBaseStructure.TIM_Period = arr-1; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值	TIM_TimeBaseStructure.TIM_Prescaler =psc-1; //設置用來作為TIMx時鐘頻率除數的預分頻值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim//計算公式:arr*psc/72000000/1,當arr=1000,psc=72時,則溢出時間為1ms,誤差為1us;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//TIM1溢出一次,則中斷1次;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據指定的參數初始化TIMx的時間基數單位TIM_SetCounter(TIM1,0);                      //設置TIM1的計數器值為0;TIM_ClearFlag(TIM1, TIM_FLAG_Update);        //清除TIM1溢出的待處理標志位TIM_ClearITPendingBit(TIM1, TIM_IT_Update ); //清除TIM1中斷的待處理位TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //允許TIM1溢出產生中斷//中斷優先級NVIC設置//NVIC_PriorityGroup_4設置NVIC中斷分組4:表示搶占優先級為4位,取值為0~15,沒有響應優先級,取值為0//NVIC_PriorityGroup_3設置NVIC中斷分組3:表示搶占優先級為3位,取值為0~7,響應優先級只有1位,取值為0~1//NVIC_PriorityGroup_2設置NVIC中斷分組3:表示搶占優先級為2位,取值為0~3,響應優先級只有2位,取值為0~3//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統中斷優先級分組4NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM1中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //設置搶占優先級為1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //設置響應優先級為0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化NVIC嵌套向量中斷控制寄存器TIM_Cmd(TIM1, ENABLE);//使能TIM1外設TIM1_MillisecondCounter=0;
}//函數功能:TIM1每1ms溢出中斷一次
void TIM1_UP_IRQHandler()
{if (TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) //TIM1計數器溢出產生中斷{TIM1_MillisecondCounter++;if(TIM1_MillisecondCounter>=1000){TIM1_MillisecondCounter=0;TIM1_SecondFlag=1;}TIM_ClearITPendingBit(TIM1,TIM_IT_Update); //清除TIM1計數器的溢出中斷標志;}
}

TIM1頭文件

#ifndef __Timer1_H
#define __Timer1_H	
#include "stm32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_textern u8  TIM1_SecondFlag;extern void TIM1_Interrupt_Initializtion(u16 arr,u16 psc);#endif

main,c程序

#include "stm32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t
#include "stdio.h"  //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()
#include "USART1.h"
//注意:"USART1.h"要放在 "stdio.h" 包含文件之后,如果這個位置顛倒了,業不能打印浮點數。
#include "Timer1.h"int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統中斷優先級分組4USART1_Serial_Interface_Enable(115200);printf("\r\nCPU reset\r\n");TIM1_Interrupt_Initializtion(1000,72);//當arr=1000,psc=72時,則為1ms,誤差為1us;while(1){if(TIM1_SecondFlag){TIM1_SecondFlag=0;printf("TIM1_SecondFlag=%u\r\n",TIM1_SecondFlag);}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83445.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫——SQL約束窗口函數介紹

4.SQL約束介紹 (1)主鍵約束 A、基本內容 基本內容 p r i m a r y primary primary k e y key key約束唯一表示數據庫中的每條記錄主鍵必須包含唯一的值(UNIQUE)主鍵不能包含NULL值(NOT NULL)每個表都應…

【typenum】 8 常量文件(consts.rs)

一、源碼 這段代碼通過類型級編程(type-level programming)在編譯期實現數值計算。以下是常量定義部分: // THIS IS GENERATED CODE #![allow(missing_docs)] use crate::int::{NInt, PInt}; /** Type aliases for many constants.This fil…

第8講、Multi-Head Attention 的核心機制與實現細節

🤔 為什么要有 Multi-Head Attention? 單個 Attention 機制雖然可以捕捉句子中不同詞之間的關系,但它只能關注一種角度或模式。 Multi-Head 的作用是: 多個頭 多個視角同時觀察序列的不同關系。 例如: 一個頭可能專…

百度智能云千帆攜手聯想,共創MCP生態宇宙

5月7日,2025聯想創新科技大會(Tech World)在上海世博中心舉行,本屆大會以“讓AI成為創新生產力”為主題。會上,聯想集團董事長兼CEO楊元慶展示了包括覆蓋全場景的超級智能體矩陣,包括個人超級智能體、企業超…

【OpenCV】幀差法、級聯分類器、透視變換

一、幀差法(移動目標識別): 好處:開銷小,不怎么消耗CPU的算力,對硬件要求不高,但只適合固定攝像頭 1、優點 計算效率高,硬件要求 響應速度快,實時性強 直接利用連續幀…

數據庫遷移的藝術:團隊協作中的沖突預防與解決之道

title: 數據庫遷移的藝術:團隊協作中的沖突預防與解決之道 date: 2025/05/17 00:13:50 updated: 2025/05/17 00:13:50 author: cmdragon excerpt: 在團隊協作中,數據庫遷移腳本沖突是常見問題。通過Alembic工具,可以有效地管理和解決這些沖突。沖突預防的四原則包括功能分…

Linux常用命令43——bunzip2解壓縮bz2文件

在使用Linux或macOS日常開發中,熟悉一些基本的命令有助于提高工作效率,bunzip2可解壓縮.bz2格式的壓縮文件。bunzip2實際上是bzip2的符號連接,執行bunzip2與bzip2 -d的效果相同。本篇學習記錄bunzip2命令的基本使用。 首先查看幫助文檔&#…

盲盒:拆開未知的驚喜,收藏生活的儀式感

一、什么是盲盒?—— 一場關于“未知”的浪漫冒險 盲盒,是一種充滿神秘感的消費體驗: 🎁 盒中藏驚喜——每個盲盒外觀相同,但內含隨機商品,可能是普通款、稀有款,甚至是“隱藏款”;…

Android 中使用通知(Kotlin 版)

1. 前置條件 Android Studio:確保使用最新版本(2023.3.1)目標 API:最低 API 21,兼容 Android 8.0(渠道)和 13(權限)依賴庫:使用 WorkManager 和 Notificatio…

使用大模型預測急性結石性疾病技術方案

目錄 1. 數據預處理與特征工程偽代碼 - 數據清洗與特征處理數據預處理流程圖2. 大模型構建與訓練偽代碼 - 模型訓練模型訓練流程圖3. 術前預測系統偽代碼 - 術前風險評估術前預測流程圖4. 術中實時調整系統偽代碼 - 術中風險預警術中調整流程圖5. 術后護理系統偽代碼 - 并發癥預…

每日Prompt:生成自拍照

提示詞 幫我生成一張圖片:圖片風格為「人像攝影」,請你畫一張及其平凡無奇的iPhone對鏡自拍照,主角是穿著JK風格cos服的可愛女孩,在自己精心布置的可按風格的房間內的落地鏡前用后置攝像頭隨手一拍的快照。照片開啟了閃光燈&…

動態規劃-64.最小路徑和-力扣(LetCode)

一、題目解析 從左上角到右下角使得數字總和最小且只能向下或向右移動 二、算法原理 1.狀態表示 我們需要求到達[i,j]位置時數字總和的最小值,所以dp[i][j]表示:到達[i,j]位置時,路徑數字總和的最小值。 2.狀態轉移方程 到達[i,j]之前要先…

LeetCode LCR 010 和為 K 的子數組 (Java)

兩種解法詳解:暴力枚舉與前綴和哈希表尋找和為k的子數組 在解決數組中和為k的連續子數組個數的問題時,我們可以采用不同的方法。本文將詳細解析兩種常見的解法:暴力枚舉法和前綴和結合哈希表的方法,分析它們的思路、優缺點及適用…

OpenVLA (2) 機器人環境和環境數據

文章目錄 [TOC](文章目錄) 前言1 BridgeData V21.1 概述1.2 硬件環境 2 數據集2.1 場景與結構2.2 數據結構2.2.1 images02.2.2 obs_dict.pkl2.2.3 policy_out.pkl 3 close question3.1 英偉達環境3.2 LIBERO 環境更適合仿真3.3 4090 運行問題 前言 按照筆者之前的行業經驗, 數…

深度學習(第3章——亞像素卷積和可形變卷積)

前言: 本章介紹了計算機識別超分領域和目標檢測領域中常常使用的兩種卷積變體,亞像素卷積(Subpixel Convolution)和可形變卷積(Deformable Convolution),并給出對應pytorch的使用。 亞像素卷積…

大模型在腰椎間盤突出癥預測與治療方案制定中的應用研究

目錄 一、引言 1.1 研究背景 1.2 研究目的與意義 二、腰椎間盤突出癥概述 2.1 定義與病因 2.2 癥狀與診斷方法 2.3 治療方法概述 三、大模型技術原理與應用基礎 3.1 大模型的基本原理 3.2 大模型在醫療領域的應用現狀 3.3 用于腰椎間盤突出癥預測的可行性分析 四、…

Vue3學習(組合式API——ref模版引用與defineExpose編譯宏函數)

目錄 一、ref模版引用。 &#xff08;1&#xff09;基本介紹。 &#xff08;2&#xff09;核心基本步驟。(以獲取DOM、組件為例) &#xff08;3&#xff09;案例&#xff1a;獲取dom對象演示。 <1>需求&#xff1a;點擊按鈕&#xff0c;讓輸入框聚焦。 &#xff08;4&…

公鏈開發及其配套設施:錢包與區塊鏈瀏覽器

公鏈開發及其配套設施&#xff1a;錢包與區塊鏈瀏覽器的技術架構與生態實踐 ——2025年區塊鏈基礎設施建設的核心邏輯與創新突破 一、公鏈開發&#xff1a;構建去中心化世界的基石 1. 技術架構設計的三重挑戰 公鏈作為開放的區塊鏈網絡&#xff0c;需在性能、安全性與去中心…

Kotlin 作用域函數(let、run、with、apply、also)對比

Kotlin 的 作用域函數&#xff08;Scope Functions&#xff09; 是簡化代碼邏輯的重要工具&#xff0c;它們通過臨時作用域為對象提供更簡潔的操作方式。以下是 let、run、with、apply、also 的對比分析&#xff1a; 一、核心區別對比表 函數上下文對象引用返回值是否擴展函數…

14、Python時間表示:Unix時間戳、毫秒微秒精度與time模塊實戰

適合人群&#xff1a;零基礎自學者 | 編程小白快速入門 閱讀時長&#xff1a;約5分鐘 文章目錄 一、問題&#xff1a;計算機中的時間的表示、Unix時間點&#xff1f;1、例子1&#xff1a;計算機的“生日”&#xff1a;Unix時間點2、答案&#xff1a;&#xff08;1&#xff09;U…