<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32延時(shí)函數分析

STM32延時(shí)函數分析

作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò ) 收藏
Cortex-M3內核處理器有個(gè)systick 24位倒計時(shí)定時(shí)器,當計數到0時(shí),重新裝載初值.


delay_init(u8 SYSCLK) //定時(shí)初始化函數分析
{
Systick->CTRL&=0xfffffffb; //bit2清空,選擇外部時(shí)鐘 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}

摘自STM32手冊
6.2.6

本文引用地址:http://dyxdggzs.com/article/201611/323874.htm
系統時(shí)鐘(SYSCLK)選擇
系統復位后,HSI振蕩器被選為系統時(shí)鐘。當時(shí)鐘源被直接或通過(guò)PLL間接作為系統時(shí)鐘時(shí),它將不能被停止。
只有當目標時(shí)鐘源準備就緒了(經(jīng)過(guò)啟動(dòng)穩定階段的延遲或PLL穩定),從一個(gè)時(shí)鐘源到另一個(gè)時(shí)鐘源的切換才會(huì )發(fā)生。在被選擇時(shí)鐘源沒(méi)有就緒時(shí),系統時(shí)鐘的切換不會(huì )發(fā)生。直至目標時(shí)鐘源就緒,才發(fā)生切換。
在時(shí)鐘控制寄存器(RCC_CR)里的狀態(tài)位指示哪個(gè)時(shí)鐘已經(jīng)準備好了,哪個(gè)時(shí)鐘目前被用作系統時(shí)鐘。

Systick時(shí)鐘那里來(lái)?



Systick時(shí)鐘由系統時(shí)鐘8分頻后決定.

解析delay_us(u32 nus)函數

void delay_us(u32 nus)
{
u32 temp;
Systick->LOAD=nus*fac_us; //裝入定時(shí)值
Systick->VAL=0x00; //清空計數器值
Systick->CTRL=0x01; //開(kāi)啟倒計時(shí)定時(shí)器
do
{
temp=Systick->CTRL; //定時(shí)器狀態(tài)賦給變量
}while((temp&0x01)&&(temp&(1<<16))); //判斷開(kāi)啟和是否計數到了0 (到達設定值)
Systick->CTRL=0x00; //關(guān)閉定時(shí)
Systick->VAL=0x00; //清空計數值

}




定時(shí)1us分析:
由于Systick時(shí)鐘設置為是系統時(shí)鐘的8分頻 ,假設SYSCLK=72M 則Systick=9MHZ

因為fac_us是基數無(wú)單位

fac_us=SYSCLK/8; 即72/8=9 則Systick->LOAD=nus*fac_us, 假設定時(shí)1us 則Systick->LOAD=9.
因為Systick是9M的速度倒計時(shí) 所以9個(gè)計數時(shí)間為9*(1/9M) 就是1us

必須保證nus<=(2^24)/fac_us

編程實(shí)例: I/O口輸出500us方波

#include
#include "sys.h"
#include "delay.h"
#include "usart.h"

#define LED0 PBout(0)
#define LED1 PBout(1)


void led_init(void)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRL&=0xffffff00;
GPIOB->CRL|=0x00000033; //推挽輸出
GPIOB->ODR|=0xffff;

}


int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
led_init();
while(1)
{
LED0=0;
delay_us(500);
LED0=1;
delay_us(500);
}
}





delay_ms(u16 nms)函數分析:
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//時(shí)間加載(SysTick->LOAD為24bit)
SysTick->VAL =0x00; //清空計數器
SysTick->CTRL=0x01 ; //開(kāi)始倒數
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時(shí)間到達
SysTick->CTRL=0x00; //關(guān)閉計數器
SysTick->VAL =0X00; //清空計數器
}

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: STM32延時(shí)函

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>