久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3716|回復: 0
收起左側

STM32定時器學習筆記

[復制鏈接]
ID:128229 發表于 2016-6-29 14:51 | 顯示全部樓層 |閱讀模式
在配置STM32外設的時候,任何時候都要先使能該外設的時鐘!
第一個例程,首先,考慮一個延時程序,要實現這一功能,共四步步驟(實際使用中兩步就夠了,第一步任何例程都必須做,):
Stm32_Clock_Init(9); //系統時鐘設置,系統時鐘設置為9倍頻,即8Mhz*9=72Mhz
delay_init(72);      //延時初始化,按總線時鐘72Mhz延時
//LED_Init();      //初始化與LED連接的硬件接口,這個不算第三步,使用它以便演示流水燈
  delay_ms(300);
第一步,看第一個程序:
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp=0;   
MYRCC_DeInit();    //復位并配置向量表
RCC->CR|=0x00010000;  //外部高速時鐘使能HSEON
while(!(RCC->CR>>17));//等待外部時鐘就緒
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2;//抵消2個單位
RCC->CFGR|=PLL<<18;   //設置PLL值 2~16
RCC->CFGR|=1<<16;   //PLLSRC ON
FLASH->ACR|=0x32;   //FLASH 2個延時周期
RCC->CR|=0x01000000;  //PLLON
while(!(RCC->CR>>25));//等待PLL鎖定
RCC->CFGR|=0x00000002;//PLL作為系統時鐘  
while(temp!=0x02)     //等待PLL作為系統時鐘設置成功
{   
  temp=RCC->CFGR>>2;
  temp&=0x03;
}   
}      
第二步,延時功能初始化,看第二個程序
void delay_init(u8 SYSCLK)
{
SysTick->CTRL&=0xfffffffb;//bit2清空,選擇外部時鐘  HCLK/8
fac_us=SYSCLK/8;      
fac_ms=(u16)fac_us*1000;
}
第三部,調用延時程序:
void delay_ms(u16 nms)
{         
u32 temp;     
SysTick->LOAD=(u32)nms*fac_ms;//時間加載(SysTick->LOAD為24bit)
SysTick->VAL =0x00;           //清空計數器
SysTick->CTRL=0x01 ;          //開始倒數  
do
{
  temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時間到達,先將   
SysTick->CTRL=0x00;       //關閉計數器
SysTick->VAL =0X00;       //清空計數器        
}   
//延時nus
//nus為要延時的us數.                 
void delay_us(u32 nus)
{  
u32 temp;      
SysTick->LOAD=nus*fac_us; //時間加載      
SysTick->VAL=0x00;        //清空計數器
SysTick->CTRL=0x01 ;      //開始倒數   
do
{
  temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時間到達   
SysTick->CTRL=0x00;       //關閉計數器
SysTick->VAL =0X00;       //清空計數器  
}


------------------------------------

不得不說,《21天學通ARM嵌入式開發》是一本不折不扣的爛書,只是把官方手冊照搬上去,再把庫函數加些注釋就變成一本書了,誰買誰上當,視頻教程也沒什么技術含量可言,千萬不要買這本書。

STM32的定時器功能比單片機復雜,切不可照搬,首先給出一些基本定義:
ARR:auto reload register:自動重載寄存器,ARR也有定時器重載值的含義,STM32中的定時器是自動重載的,(不像單片機中的定時器有自動重載模式和手動軟件重載模式,而且手動重載用得較多);
TIMx_CR:定時器控制寄存器;
更新事件:更新不等于觸發中斷,更新是指計數器上溢或下溢時,內部產生一個更新信號,根據此時相關寄存器的設置執行一些相應操作,比如重載ARR,具體在下文中會介紹。
觸發事件:主要用于信號計數,可以使內部信號(定時器的輸出也可以作為觸發信號),也可以是外部引腳信號


接下來關注下面寄存器TIMx_CR中的兩個位
ARPE:自動重裝載預裝載允許位
TIMx_CR中的UDIS:update disable 禁止更新
ARPE為0時,若改變ARR值,影子寄存器中的值立即被改變;ARPE=1時,影子寄存器中的值將等到計數值到達上一次設定的溢出值(即發生更新事件后)時,才會裝載被修改過的ARR值;
UDIS:禁止更新,1有效
產生更新事件的條件:
①當計數器上溢或下溢時,并觸發中斷;
②當循環計數器計數值為0時(僅適用于TIM1),觸發中斷;
③通過軟件設置UG(Update Generation)位,這種情況下不會觸發定時中斷。



回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国内毛片毛片毛片毛片 | 精品综合久久久 | 成人精品一区二区三区中文字幕 | 日韩精品中文字幕在线 | 黄色三级在线播放 | 91在线免费视频 | 91视频国产一区 | 国产成人亚洲精品自产在线 | 国产亚洲欧美在线 | 午夜av成人| 亚洲欧洲综合av | 成人一区二区三区在线 | 国产久| 99精品亚洲国产精品久久不卡 | 97综合在线 | 欧美精产国品一二三区 | 韩日一区二区三区 | japan21xxxxhd美女| 日韩成人在线视频 | 99re热精品视频国产免费 | 亚洲精品视频在线播放 | 久久99国产精品久久99果冻传媒 | 天堂av在线影院 | 成人一区精品 | 嫩草视频网站 | 福利片在线看 | 欧美一二精品 | 欧美成人一区二区 | 欧美一区二区三区在线看 | 99精品视频免费观看 | 欧美精品片 | 高清成人av | 免费国产视频在线观看 | 国内自拍第一页 | 日韩在线视频一区 | 久久久久久久一区二区三区 | 中文字幕亚洲视频 | 欧美三级在线 | 久久久精品 | 激情五月综合 | 国产免费又色又爽又黄在线观看 |