娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

1.STM32的Timer簡介

STM32中一共有11個定時器,其中2個高級控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的SysTick,看門狗定時器以后再詳細研究。今天主要是研究剩下的8個定時器。

定時器

計數器分辨率

計數器類型

預分頻系數

產生DMA請求

捕獲/比較通道

互補輸出

TIM1

TIM8

16位

向上,向下,向上/向下

1-65536之間的任意數

可以

4

TIM2

TIM3

TIM4

TIM5

16位

向上,向下,向上/向下

1-65536之間的任意數

可以

4

沒有

TIM6

TIM7

16位

向上

1-65536之間的任意數

可以

0

沒有

其中TIM1和TIM8是能夠產生3對PWM互補輸出的高級登時其,常用于三相電機的驅動,時鐘由APB2的輸出產生。TIM2-TIM5是普通定時器,TIM6和TIM7是基本定時器,其時鐘由APB1輸出產生。由于STM32的TIMER功能太復雜了,所以只能一點一點的學習。因此今天就從最簡單的開始學習起,也就是TIM2-TIM5普通定時器的定時功能。


2.普通定時器TIM2-TIM5

2.1時鐘來源

計數器時鐘可以由下列時鐘源提供:

·內部時鐘(CK_INT)

·外部時鐘模式1:外部輸入腳(TIx)

·外部時鐘模式2:外部觸發輸入(ETR)

       ·內部觸發輸入(ITRx):使用一個定時器作為另一個定時器的預分頻器,如可以配置一個定時器Timer1而作為另一個定時器Timer2的預分頻器。

    由于今天的學習是最基本的定時功能,所以采用內部時鐘。TIM2-TIM5的時鐘不是直接來自于APB1,而是來自于輸入為APB1的一個倍頻器。這個倍頻器的作用是:當APB1的預分頻系數為1時,這個倍頻器不起作用,定時器的時鐘頻率等于APB1的頻率;當APB1的預分頻系數為其他數值時(即預分頻系數為2、4、8或16),這個倍頻器起作用,定時器的時鐘頻率等于APB1的頻率的2倍。APB1的分頻在STM32_SYSTICK的學習筆記中有詳細描述。通過倍頻器給定時器時鐘的好處是:APB1不但要給TIM2-TIM5提供時鐘,還要為其他的外設提供時鐘;設置這個倍頻器可以保證在其他外設使用較低時鐘頻率時,TIM2-TIM5仍然可以得到較高的時鐘頻率。


2.2    計數器模式

TIM2-TIM5可以由向上計數、向下計數、向上向下雙向計數。向上計數模式中,計數器從0計數到自動加載值(TIMx_ARR計數器內容),然后重新從0開始計數并且產生一個計數器溢出事件。在向下模式中,計數器從自動裝入的值(TIMx_ARR)開始向下計數到0,然后從自動裝入的值重新開始,并產生一個計數器向下溢出事件。而中央對齊模式(向上/向下計數)是計數器從0開始計數到自動裝入的值-1,產生一個計數器溢出事件,然后向下計數到1并且產生一個計數器溢出事件;然后再從0開始重新計數。

1..自動裝載寄存器部分實際上包含兩個寄存器:
自動裝載寄存器緩沖寄存器 和 自動裝載寄存器影子寄存器
其中自動裝載寄存器緩沖寄存器可以有ARPE位控制是否起作用:
ARPE = 0 寫"自動裝載寄存器"時,數據直接寫入到"自動裝載寄存器緩沖寄存器"的同時,立即更新到"自動裝載寄存器影子寄存器"
ARPE = 1 寫"自動裝載寄存器"時,數據直接寫入到"自動裝載寄存器緩沖寄存器"的同時,只有更新事件發生的時候,才更新到"自動裝載寄存器影子寄存器"
2.預分頻器控制寄存器也分為兩部分:
預分頻器緩沖寄存器 和 預分頻器影子寄存器
當更新事件發生的時候,"預分頻器緩沖寄存器"的內容更新到"預分頻器影子寄存器中"

3.UDIS位作用:
UDIS = 1 禁止更新事件發生,但是計數器上下益處使,計數器和預分頻計數器歸0不受影響
UDIS = 0 允許更新事件發生
4.URS位作用:
URS = 1 只有計數器上下溢出才產生更新事件,從而產生中斷和DMA請求
URS = 0 計數器上下溢出,軟件設置UG位以及從模式控制器產生的更新 都會產生更新事件,從而產生中斷和DMA請求

編程步驟
1. 配置優先級;
2. 使能時鐘
3. 配置GPIO;
4. 配置TIME;
5.使能計數器;
6.開中斷;
7.清除標志位;
具體配置如下:
(1) NVIC_Configuration(void);配置優先級
(2) void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)使能時鐘
(3) void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);配置GPIO
(4) TIM_Configuration (void);配置TIM6/TIM7
(5) TIM_Cmd(TIM7, ENABLE);使能定時器
(6) TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);使能中斷
(7) TIM_ClearFlag(TIM7, TIM_FLAG_Update);清除標志位
步驟(4)中的預分頻系數用來確定TIMx所使用的時鐘頻率,具體計算方法為:CK_INT/(TIM_Perscaler+1)。CK_INT是內部時鐘源的頻率,是根據2.1中所描述的APB1的倍頻器送出的時鐘,TIM_Perscaler是用戶設定的預分頻系數,其值范圍是從0 – 65535。
步驟(4)中的時鐘分割定義的是在定時器時鐘頻率(CK_INT)與數字濾波器(ETR,TIx)使用的采樣頻率之間的分頻比例。TIM_ClockDivision的參數如下表:
TIM_ClockDivision        描述        二進制值
TIM_CKD_DIV1        tDTS = Tck_tim        0x00
TIM_CKD_DIV2        tDTS = 2 * Tck_tim        0x01
TIM_CKD_DIV4        tDTS = 4 * Tck_tim        0x10
步驟(4)中需要禁止使用預裝載緩沖器。當預裝載緩沖器被禁止時,寫入自動裝入的值(TIMx_ARR)的數值會直接傳送到對應的影子寄存器;如果使能預加載寄存器,則寫入ARR的數值會在更新事件時,才會從預加載寄存器傳送到對應的影子寄存器。
ARM中,有的邏輯寄存器在物理上對應2個寄存器,一個是程序員可以寫入或讀出的寄存器,稱為preload register(預裝載寄存器),另一個是程序員看不見的、但在操作中真正起作用的寄存器,稱為shadow register(影子寄存器);設計preload register和shadow register的好處是,所有真正需要起作用的寄存器(shadow register)可以在同一個時間(發生更新事件時)被更新為所對應的preload register的內容,這樣可以保證多個通道的操作能夠準確地同步。如果沒有shadow register,或者preload register和shadow register是直通的,即軟件更新preload register時,同時更新了shadow register,因為軟件不可能在一個相同的時刻同時更新多個寄存器,結果造成多個通道的時序不能同步,如果再加上其它因素(例如中斷),多個通道的時序關系有可能是不可預知的。

 

3.     程序源代碼

本例實現的是通過TIM2的定時功能,使得LED燈按照1s的時間間隔來閃爍

 

#include "stm32f10x_lib.h"

 

void RCC_cfg();

void TIMER_cfg();

void NVIC_cfg();

void GPIO_cfg();

 

int main()

{

       RCC_cfg();

       NVIC_cfg();

       GPIO_cfg();

       TIMER_cfg();

 

       //開啟定時器2

       TIM_Cmd(TIM2,ENABLE);

 

       while(1);

}

 

void RCC_cfg()

{

      

       //定義錯誤狀態變量

       ErrorStatus HSEStartUpStatus;

      

       //將RCC寄存器重新設置為默認值

       RCC_DeInit();

 

       //打開外部高速時鐘晶振

       RCC_HSEConfig(RCC_HSE_ON);

 

       //等待外部高速時鐘晶振工作

       HSEStartUpStatus = RCC_WaitForHSEStartUp();

       if(HSEStartUpStatus == SUCCESS)

       {

              //設置AHB時鐘(HCLK)為系統時鐘

              RCC_HCLKConfig(RCC_SYSCLK_Div1);

 

              //設置高速AHB時鐘(APB2)為HCLK時鐘

              RCC_PCLK2Config(RCC_HCLK_Div1);

 

              //設置低速AHB時鐘(APB1)為HCLK的2分頻

              RCC_PCLK1Config(RCC_HCLK_Div2);

             

              //設置FLASH代碼延時

              FLASH_SetLatency(FLASH_Latency_2);

 

              //使能預取指緩存

              FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

 

              //設置PLL時鐘,為HSE的9倍頻 8MHz * 9 = 72MHz

              RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

 

              //使能PLL

              RCC_PLLCmd(ENABLE);

 

              //等待PLL準備就緒

              while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

 

              //設置PLL為系統時鐘源

              RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

 

              //判斷PLL是否是系統時鐘

              while(RCC_GetSYSCLKSource() != 0x08);

       }

 

       //允許TIM2的時鐘

       RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

       //允許GPIO的時鐘

       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

 

}

 

void TIMER_cfg()

{

       TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

 

       //重新將Timer設置為缺省值

       TIM_DeInit(TIM2);

       //采用內部時鐘給TIM2提供時鐘源

       TIM_InternalClockConfig(TIM2);

       //預分頻系數為36000-1,這樣計數器時鐘為72MHz/36000 = 2kHz

       TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;

       //設置時鐘分割

       TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

       //設置計數器模式為向上計數模式

       TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

       //設置計數溢出大小,每計2000個數就產生一個更新事件

       TIM_TimeBaseStructure.TIM_Period = 2000 - 1;

       //將配置應用到TIM2中

       TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

 

       //清除溢出中斷標志

       TIM_ClearFlag(TIM2, TIM_FLAG_Update);

       //禁止ARR預裝載緩沖器

       TIM_ARRPreloadConfig(TIM2, DISABLE);

       //開啟TIM2的中斷

       TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

}

 

void NVIC_cfg()

{

       NVIC_InitTypeDef NVIC_InitStructure;

        //選擇中斷分組1

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

        

        

        //選擇TIM2的中斷通道

        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;      

        //搶占式中斷優先級設置為0

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

       //響應式中斷優先級設置為0

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

[1] [2]
關鍵字:STM32  通用定時器  基本定時 引用地址:STM32通用定時器---基本定時學習

上一篇:STM32--UART異步通信學習
下一篇:STM32單片機學習---PWM輸出

推薦閱讀

  在我國新疆地區,萬畝棉田團團簇簇盛放枝頭,只待農戶前來采摘。相對于傳統的人工作業,現在許多農戶都更愿意用科技手段,來提升作業效率,節省相關成本。其中,在噴灑落葉劑環節,植保無人機正日漸成為主力。   不僅如此,在東北平原、在東南丘陵,無論是稻田還是果樹、林地的施藥作業,很多都已經由植保無人機包攬。短短數年內,植保無人機正加...
在2019全球分銷供應鏈領袖峰會上,與會嘉賓探討了目前產業里關注的5G熱點和分銷商原廠合作問題,其中,理查森電子中國區總經理蘇志建發表了《市場機遇以及給分銷商帶來的挑戰》的演講,分享了5G小站市場的趨勢和設計挑戰。 他指出,今年6月6號,工信部發布5G牌照給四大運營商,開啟了中國5G時代,在11月1號,5G商用套餐公布,50個開啟5G服務,預計2...
藍牙在現代生活中具有諸多應用,但究其根本,藍牙的作用在于傳輸信號。對于藍牙,我們日常接觸較多的便是藍牙耳機。那么,藍牙耳機的原理是什么呢?本文中,小編將對藍牙耳機的原理予以探討。如果你對藍牙耳機及其原理具有興趣,不妨繼續往下閱讀哦。 藍牙作為一種新的短距離無線通信技術在當今社會的使用是越來越高了,其中最為常見的就...
動態血糖監測設備(CGM)雖小,卻可以改善全球數以百萬計糖尿病患者的生活質量。如1型糖尿病患者,現行常規的方法是指尖釆血法檢測血糖,且是每天必不可少的。事實上,指尖釆血1天最多只能有7次。但這只能獲得單一時間點的血糖快照。遺憾的是,這種快照只能提供特定時間段的血糖值,無法提供糖尿病患者全天候的血糖值。糖尿病患者也無法獲得全面血糖的變化情...

史海拾趣

問答坊 | AI 解惑

功率變換技術發展史呼喚綠色回歸

功率變換技術是按用戶需求改變電能應用方式(改變電能的波形、頻率等)的技術;可以有AC/DC、DC/DC、DC/AC、AC/AC及其相互組合的多種變換。40年代前后,由電磁元件組合形成的各種功率變換過程基本上可實現清潔電源。例如,將交流電動機與直流發 ...…

查看全部問答∨

煩煩煩

我怎么下載不下來附件呢????:Q…

查看全部問答∨

基于DSP的語音識別系統的設計與實現

基于DSP的語音識別系統的設計與實現…

查看全部問答∨

我的做人文化

企業講企業文化,組織講組織文化,做人講的做人文化,以下就是我的個人文化內涵的總結和解釋。我的文化其實很簡單,只有六個字“知足、感恩、惜緣”,但這六個字就讓我悟了32年,直到兩年前才真正總結出來。知足是對現實的物質和環境沒有抱怨,但不 ...…

查看全部問答∨

工信部首次明確3G牌照歸屬 年底或明年初發照

工信部首次明確3G牌照歸屬 年底或明年初發照 http://tech.163.com/08/1212/11/4SV7EQOV000915BE.html           工業和信息化部部長李毅中今日稱,根據綜合考慮,我們將通過一定的程序在年底或明年年初發放3G牌照 ...…

查看全部問答∨

ARM初學者求方法

     我之前主要從事MSP430單片機的開發,51和AVR也玩過,但對ARM一點都不懂,現在想開始自學ARM,并且手上有一套TI公司的LM3S3748開發板,在此想請教一下玩ARM的高手指教一下入門的方法,推薦一本適合我的書,或者其他什么資料的 ...…

查看全部問答∨

stm32定貨周期?

                                 剛才打電話給微芯力科,全系列芯片定貨周期都10周?象我們小公司沒有那么好的計劃,都不敢用了.…

查看全部問答∨

STM32外部RAM存儲數據JLINK無法調試

我講外部RAM存儲數據,內部RAM放堆棧,程序很簡單,就是將外部ram復制,同時讀取,讀取后用串口發出來,我用JLINK調試,程序始終停在串口等待處,查看賦值也不對。我手動復位板子,不用JLINK帶,STM32能夠對外部RAM賦值,并且能夠從串口輸出來 ...…

查看全部問答∨

ccs中怎么把graphical display的圖像導出來

如題   謝謝了   不是截圖的那種  …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 东乌珠穆沁旗| 合阳县| 清苑县| 禄劝| 临清市| 百色市| 阿拉善右旗| 荣成市| 吉首市| 泌阳县| 体育| 衡水市| 靖江市| 潼关县| 巴楚县| 咸阳市| 交城县| 嫩江县| 随州市| 庐江县| 丹东市| 千阳县| 原阳县| 平度市| 朔州市| 尉犁县| 安阳县| 邮箱| 应城市| 霸州市| 阳东县| 长海县| 吴江市| 葫芦岛市| 福贡县| 灌南县| 肇庆市| 高邑县| 南康市| 大新县| 萨迦县|