SysTick,ST的數(shù)據(jù)手冊(cè)上稍微提了一下但是沒(méi)有詳細(xì)介紹,這里我們仔細(xì)研究下。如有錯(cuò)誤之處敬請(qǐng)更正。
SysTick位于NVIC中,它主要應(yīng)用在操作系統(tǒng)中,所以平常我們用的很少,但是我們可以用它來(lái)做簡(jiǎn)單的延時(shí),還是比較準(zhǔn)確的。
那我們先看一下跟他相關(guān)的寄存器吧:
主要有四個(gè)寄存器:CTRL,RELOAD,VAL,CALIB
CALIB我們一般不用,所以就不做介紹了。
對(duì)CTRL的操作實(shí)際就是設(shè)置SysTick的時(shí)鐘,以及使能等。
對(duì)LOAD的操作就是填充新的計(jì)數(shù)值
對(duì)VAL的操作時(shí)設(shè)置計(jì)數(shù)滿后的操作
學(xué)習(xí)最快最感性的莫過(guò)于實(shí)例了,那我們就通過(guò)一個(gè)例子來(lái)學(xué)習(xí)SysTick
那我們先說(shuō)下思路,延時(shí)函數(shù)通過(guò)SysTick來(lái)實(shí)現(xiàn),進(jìn)入延時(shí)函數(shù)時(shí)我們啟動(dòng)SysTick,根據(jù)工作的實(shí)際時(shí)鐘頻率來(lái)確定沒(méi)us或者每ms的初值,然后通過(guò)計(jì)算能得到延時(shí)nus或者nms是應(yīng)該填充的初值,但是LOAD寄存器只有24位是可用的,所以延時(shí)的上限為1860ms左右,足夠我們用了。
那我們下邊把代碼貼上來(lái):
/********************************************************************************
* @file SysTick/main.c
* @author swei
* @version V3.3.0
* @date 10/20/2010
* @brief Main program body.
******************************************************************************/
#include "stm32f10x.h"
uint32_t ms_value,us_value;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void Delay_init(uint8_t SYSCLK);
void Delay_us(uint32_t nus);
void Delay_ms(uint32_t nms);
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
Delay_init(72);
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
Delay_ms(1000);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
Delay_ms(1000);
}
}
void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
while(!RCC_WaitForHSEStartUp());
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(!(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==SET));
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(!(RCC_GetSYSCLKSource()==0x08));
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void Delay_init(uint8_t SYSCLK)
{
SysTick->CTRL = 0xfffffff8;
us_value = SYSCLK/8;
ms_value = us_value*1000;
}
void Delay_us(uint32_t nus)
{
uint32_t temp;
SysTick->LOAD = (uint32_t)nus*us_value;
SysTick->VAL = 0x00;
SysTick->CTRL |= 0x01;
do
{
temp = SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL &= 0xfffffff8;
SysTick->VAL = 0x00;
}
void Delay_ms(uint32_t nms)
{
uint32_t temp;
SysTick->LOAD = (uint32_t)nms*ms_value;
SysTick->VAL = 0x00;
SysTick->CTRL |= 0x01;
SysTick->CTRL |= 0x01;
do
{
temp = SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL &= 0xfffffff8;
SysTick->VAL = 0x00;
}
/******************* (C) COPYRIGHT 2010 SWEI ********************END OF FILE****/
上一篇:STM32F0_SYSTICK在STM32CUBEMX中的設(shè)置
下一篇:STM32之Systick定時(shí)器解析
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 新思科技:通過(guò)EDA和IP助力中國(guó)RISC-V發(fā)展
- 英飛凌:引領(lǐng)RISC-V成為汽車(chē)行業(yè)開(kāi)放標(biāo)準(zhǔn)
- 東芝推出輸出耐壓1800V的車(chē)載光繼電器
- 中國(guó)制定的全球首項(xiàng)鋰離子電池硅基負(fù)極材料國(guó)際標(biāo)準(zhǔn)發(fā)布
- 智能汽車(chē)合成數(shù)據(jù)架構(gòu)與應(yīng)用實(shí)踐分享
- 15家車(chē)企的固態(tài)電池汽車(chē)及供應(yīng)商一覽!
- 8月交付!鋰電巨頭全固態(tài)電池商業(yè)化“快進(jìn)”
- 白皮書(shū)點(diǎn)破汽車(chē)智駕營(yíng)銷(xiāo)現(xiàn)象:六個(gè)“不等于”揭示真實(shí)的輔助駕駛
- Unity引擎在智能座艙項(xiàng)目流程之深入優(yōu)化與未來(lái)技術(shù)
- Unity引擎在智能座艙項(xiàng)目流程之未來(lái)技術(shù)趨勢(shì)與高級(jí)整合
- 迎端午,芯幣可以兌換粽子啦!
- 下載有禮|ADI 用于多路抽頭輸出隔離電源的簡(jiǎn)易解決方案
- NXP COG趣味有獎(jiǎng)問(wèn)答
- MSP430經(jīng)典資料大搜集!贏給力TI 無(wú)線運(yùn)動(dòng)手表開(kāi)發(fā)工具?。?!
- 【EEWORLD第二十六屆】2011年05月社區(qū)明星人物揭曉!
- 美信基礎(chǔ)模擬IC APP下載 助力您創(chuàng)新模擬設(shè)計(jì)!評(píng)論、搶樓全有禮!
- 有獎(jiǎng)直播|圍觀 普源 全新中國(guó)“芯”示波器
- TI Sensor Menu 助力感應(yīng)全世界——下載有禮!
- 碳化硅功率器件市場(chǎng)預(yù)測(cè) 汽車(chē)行業(yè)是助力
- 打破傳統(tǒng)半導(dǎo)體測(cè)試僵局的利器——NI STS 使用培訓(xùn)教程(1)
- 蹭著電影的熱度,看看AI醫(yī)療是怎么回事?
- 更高速度及超低噪聲的MSO混合信號(hào)示波器問(wèn)市
- 大聯(lián)大品佳集團(tuán)推基于NXP產(chǎn)品的汽車(chē)無(wú)線充電應(yīng)用設(shè)計(jì)方案
- STM32—進(jìn)入STOP模式后功耗下不去問(wèn)題
- STM32—cubeMX+HAL庫(kù)的SPI接口使用
- STM32中time.h文件詳解
- 特斯拉軟件更新 配備盲點(diǎn)警告聲以及自動(dòng)折疊側(cè)視鏡功能
- 如何24小時(shí)保護(hù)愛(ài)車(chē)安全?特斯拉一套哨兵模式就解決了
- 求一款專業(yè)編程器
- WinCE6.0下可以使用waveout來(lái)播放PCM數(shù)據(jù)嗎?需要在系統(tǒng)中配置些什么呢?
- RL78/G14-Demo使用,好玩
- 請(qǐng)問(wèn)一個(gè)zigbee server可同時(shí)工作在多個(gè)信道嗎
- Altera參考設(shè)計(jì)匯總
- MSP430設(shè)置
- ADI推出超低功耗降壓調(diào)節(jié)器
- 簡(jiǎn)單的小程序(M8讀電話IC卡)
- 分享一個(gè)TI的APK,方便查看芯片和產(chǎn)品應(yīng)用
- WinCE6.0啟動(dòng)時(shí),顯示OALIntrRequestSysIntr異常。