日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]其實(shí)系統(tǒng)滴答就是一個(gè)24位的倒計(jì)時(shí)定時(shí)器,而且能夠自動(dòng)裝置。儀器8位單片機(jī)如AVR/51要跑操作系統(tǒng),需要專門(mén)占用一個(gè)定時(shí)器,但是由于優(yōu)先級(jí)的原因很容易被其他程序打亂。而STM32以Cortex M3為內(nèi)核,它專門(mén)開(kāi)辟了一個(gè)

其實(shí)系統(tǒng)滴答就是一個(gè)24位的倒計(jì)時(shí)定時(shí)器,而且能夠自動(dòng)裝置。儀器8位單片機(jī)如AVR/51要跑操作系統(tǒng),需要專門(mén)占用一個(gè)定時(shí)器,但是由于優(yōu)先級(jí)的原因很容易被其他程序打亂。而STM32以Cortex M3為內(nèi)核,它專門(mén)開(kāi)辟了一個(gè)硬件定時(shí)器,具有很高的優(yōu)先級(jí),即使在系統(tǒng)處于睡眠狀態(tài)也能工作。我們使用系統(tǒng)滴答點(diǎn)亮LED燈的方法有兩種:

第一種方法:就是將系統(tǒng)滴答作為普通的定時(shí)器,采用查詢的方法。首先使用ysTick->LOAD裝置初值,即要倒計(jì)的值。然后時(shí)鐘SysTick->CTRL控制寄存器使能計(jì)數(shù)器工作在連拍模式,也就是計(jì)數(shù)減到0的時(shí)候,會(huì)出現(xiàn)一個(gè)標(biāo)志位:COUNTFLAG,然后在使用while不斷地查詢這一位。按照這種編程方法封裝的文件代碼為:

SYSTICK.C

#include "systick.h"

//延時(shí)Nms

//注意Nms的范圍

//Nms<=0xffffff*8/SYSCLK

//對(duì)72M條件下,Nms<=1864

void delay_ms(u16 Nms)

{

SysTick->LOAD=(u32)Nms*9000; //給重裝載寄存器賦值,9000時(shí),將產(chǎn)生1ms的時(shí)基

SysTick->CTRL|=0x01;//開(kāi)始倒數(shù)

while(!(SysTick->CTRL&(1<<16)));//等待時(shí)間到達(dá)

SysTick->CTRL=0X00000000;//關(guān)閉計(jì)數(shù)器

SysTick->VAL=0X00000000;//清空計(jì)數(shù)器

}

//延時(shí)us

void delay_us(u32 Nus)

{

SysTick->LOAD=Nus*9;//時(shí)間加載

SysTick->CTRL|=0x01;//開(kāi)始倒數(shù)

while(!(SysTick->CTRL&(1<<16)));//等待時(shí)間到達(dá)

SysTick->CTRL=0X00000000;//關(guān)閉計(jì)數(shù)器

SysTick->VAL=0X00000000;//清空計(jì)數(shù)器

}

SYSTICK.H

#ifndef __SYSTICK_H

#define __SYSTICK_H

#include "stm32f10x_conf.h"

void delay_ms(u16 Nms);

void delay_us(u32 Nus);

#endif

第二種方法:中斷的方法。程序調(diào)用core_cm3.c里的SysTick_Config的函數(shù),方便不同cortex M3處理之間的移植。里面設(shè)置裝置寄存器,內(nèi)核時(shí)鐘,向下計(jì)數(shù)到0導(dǎo)致systick中斷,和使能寄存器。

SysTick_Config的函數(shù)定義為

static __INLINE uint32_t SysTick_Config(uint32_t ticks)

{

if (ticks > SysTick_LOAD_RELOAD_Msk)return (1);/* Reload value impossible */

SysTick->LOAD= (ticks & SysTick_LOAD_RELOAD_Msk) - 1;/* set reload register */

NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);/* set Priority for Cortex-M0 System Interrupts */

SysTick->VAL= 0;/* Load the SysTick Counter Value */

SysTick->CTRL= SysTick_CTRL_CLKSOURCE_Msk |

SysTick_CTRL_TICKINT_Msk|

SysTick_CTRL_ENABLE_Msk;/* Enable SysTick IRQ and SysTick Timer */

return (0);/* Function successful */

}

#endif

這里要注意的是系統(tǒng)滴答是24位寄存器,不能超過(guò)2的24次方,大約16M左右,所以我這里設(shè)置的是:系統(tǒng)時(shí)鐘的五分之一,14.4M。

SysTick_Config(SystemCoreClock/5);//這樣每隔0.2s中斷發(fā)生一次

主要程序代碼為:

unsigned char num=0;//第幾盞燈亮

void LED_Spark(void)

{

switch(num++)

{

case 0://燈1亮

LED1_ON();LED2_OFF();LED3_OFF();LED4_OFF();

break;

case 1://燈2亮

LED1_OFF();LED2_ON();LED3_OFF();LED4_OFF();

break;

case 2://燈3亮

LED1_OFF();LED2_OFF();LED3_ON();LED4_OFF();

break;

case 3://燈4亮

LED1_OFF();LED2_OFF();LED3_OFF();LED4_ON();

break;

default://全滅

num=0;LED1_OFF();LED2_OFF();LED3_OFF();LED4_OFF();

break;

}

}

int main(void)

{

/* Setup STM32 system (clock, PLL and Flash configuration) */

SystemInit();

/* Add your application code here

*/

LED_Configuration();

SysTick_Config(SystemCoreClock/5);//每隔0.2s中斷調(diào)用一次

NVIC_SetPriority(SysTick_IRQn, 0x0);//設(shè)置優(yōu)先級(jí)

/* Infinite loop */

while (1)

{

}

}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

上圖是LPC1114系統(tǒng)滴答定時(shí)器(SysTick)的結(jié)構(gòu)圖。系統(tǒng)滴答定時(shí)器位于Cortex-M0內(nèi)核中,也就是說(shuō),不論是LPC1114,還是其他的Cortex-M0內(nèi)核單片機(jī),都有這個(gè)系統(tǒng)定時(shí)器。其存在的主要目的是為嵌...

關(guān)鍵字: systick 滴答定時(shí)器 cortex-m0系統(tǒng)

在"嵌入式學(xué)習(xí)006_Systick使用(一)"中,詳細(xì)介紹了Systick中寄存器的使用方法,用到了很多函數(shù),實(shí)際上到了3.5版本的標(biāo)準(zhǔn)固件庫(kù)中,移除了相關(guān)驅(qū)動(dòng)函數(shù),用戶必須調(diào)用CMSIS.h中定義...

關(guān)鍵字: STM32 systick

1 硬件電路配置這里還是借用前面LED電路我就不貼圖片。2 時(shí)鐘說(shuō)明SysTick和HCK的時(shí)鐘頻率是一樣的庫(kù)函數(shù)代碼如下/***@briefInitializeandstarttheSysTickcounterandi...

關(guān)鍵字: STM32 systick 定時(shí)器

前言今天講解“STM32F103 SysTick系統(tǒng)滴答”,“SysTick系統(tǒng)滴答”是屬于Cortex-M3內(nèi)核的一部分,主要是為運(yùn)行的操作系統(tǒng)提供滴答時(shí)鐘,如常見(jiàn)的操作系統(tǒng):uCOS、RTOS等。不管M3芯片屬于哪一...

關(guān)鍵字: stm32f1 systick 系統(tǒng)滴答

今天多學(xué)習(xí)幾個(gè)模塊,首先是蜂鳴器。板上所用的是無(wú)源蜂鳴器,可以用直流電壓直接驅(qū)動(dòng)。還有一種叫有源蜂鳴器,要使用頻率的方波才能驅(qū)動(dòng)。使用的蜂鳴器的驅(qū)動(dòng)電壓,典型值為5V,額定工作電流為30mA。STM32的GPIO管腳

關(guān)鍵字: 串口 打印 神舟iv 蜂鳴器

RTC(real-time clock)也就我們?nèi)粘?吹降臅r(shí)鐘,STM32內(nèi)部專門(mén)使用了一組32位計(jì)數(shù)器,通過(guò)軟件的方式編寫(xiě)出當(dāng)前的時(shí)間和日期。首先我們從圖中可以看出RTC的時(shí)鐘來(lái)源有三個(gè):(1)是高速外部時(shí)鐘HSE除以...

關(guān)鍵字: rtc 實(shí)時(shí)時(shí)鐘 神舟iv

一。Systick原理和配置方法Systick定時(shí)器就是系統(tǒng)滴答定時(shí)器,CM3 內(nèi)核的處理器,內(nèi)部包含了一個(gè) SysTick 定時(shí)器, SysTick 是一個(gè) 24 位的倒計(jì)數(shù)定時(shí)器,當(dāng)計(jì)到 0 時(shí),將從 RELOAD...

關(guān)鍵字: systick 定時(shí)器

Q:什么是SYSTick定時(shí)器?SysTick 是一個(gè)24 位的倒計(jì)數(shù)定時(shí)器,當(dāng)計(jì)到0 時(shí),將從RELOAD 寄存器中自動(dòng)重裝載定時(shí)初值。只要不把它在SysTick 控制及狀態(tài)寄存器中的使能位清除,就永不停息。Q:為什么...

關(guān)鍵字: STM32 systick 定時(shí)器 延時(shí)函數(shù)

SysTick時(shí)鐘,俗稱“嘀嗒定時(shí)器”,它能按設(shè)定的時(shí)間產(chǎn)生一次中斷??刂乒こ檀a中隨處可見(jiàn)形如delay_ms()之函數(shù)。但是一直不清楚其內(nèi)在機(jī)制。今天花時(shí)間研究了一下。首先還是在數(shù)據(jù)手冊(cè)上看一下SysTick寄存器的...

關(guān)鍵字: Cortex STM32 systick 系統(tǒng)定時(shí)器

SYSTICK寄存器初始化void SysTick_Configuration(void){if (SysTick_Config(SystemCoreClock / 100)){while (1);}NVIC_SetPr...

關(guān)鍵字: STM32 systick 精確延時(shí)
關(guān)閉