一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SysTick方式實(shí)現(xiàn)LED流水燈效果。

電子工程師 ? 來源:lq ? 2019-02-11 15:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

SysTick_Init()函數(shù)

SysTick_Init 函數(shù)代碼如下:

/*************************************************************************

* 函 數(shù) 名 : SysTick_Init

* 函數(shù)功能 : SysTick 初始化,SYSTICK 的時(shí)鐘固定為 AHB 時(shí)鐘的 1/8

* 輸 入 : SYSCLK:系統(tǒng)時(shí)鐘頻率

* 輸 出 : 無

**************************************************************************/

void SysTick_Init(u8 SYSCLK)

{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

fac_us=SYSCLK/8; //SYSCLK的8分頻 保存1us所需的計(jì)數(shù)次數(shù)

fac_ms=(u16)fac_us*1000; //每個(gè) ms 需要的 systick 時(shí)鐘數(shù)

}

SysTick_Init 函數(shù)形參 SYSCLK 表示的系統(tǒng)時(shí)鐘大小,默認(rèn)配置我們使用的系統(tǒng)時(shí)鐘是 72M,所以調(diào)用這個(gè)函數(shù)時(shí),形參值即為 72。函數(shù)內(nèi)部調(diào)用了一個(gè)庫函數(shù) SysTick_CLKSourceConfig,此函數(shù)用來對(duì) SysTick 定時(shí)器時(shí)鐘的選擇,我們使用的SysTick定時(shí)器時(shí)鐘是系統(tǒng)時(shí)鐘的8 頻 ,所以參數(shù)是SysTick_CLKSource_HCLK_Div8。如果使用系統(tǒng)時(shí)鐘作為 SysTick 定時(shí)器時(shí)鐘,那么參數(shù)即為 SysTick_CLKSource_HCLK。這個(gè)函數(shù)在 misc.c 庫文件內(nèi),如何查找我們前面介紹過方法。

下面的兩條語句是用來求取SysTick定時(shí)器在1us時(shí)間內(nèi)和1ms時(shí)間內(nèi)的計(jì)數(shù)次數(shù)。

delay_us()函數(shù)

delay_us 函數(shù)代碼如下:

/**********************************************************************

* 函 數(shù) 名 : delay_us

* 函數(shù)功能 : us 延時(shí),

* 輸 入 : nus:要延時(shí)的 us 數(shù)

注 意 :nus 的 值 , 不 要 大 于 798915us( 最 大 值 即

2^24/fac_us@fac_us=21)

* 輸 出 : 無

**********************************************************************/

void delay_us(u32 nus)

{

u32 temp;

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

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

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

do

{

temp=SysTick->CTRL;

}while((temp&0x01)&&!(temp&(1<<16))); //等待時(shí)間到達(dá)

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

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

}

①將需要延時(shí)多少 us 的計(jì)數(shù)值加載到 SysTick 的 LOAD 寄存器中,fac_us值是延時(shí) 1us 所需的計(jì)數(shù)值。

②清空當(dāng)前計(jì)數(shù)值寄存器 VAL。

③打開 SysTick 定時(shí)器,定時(shí)器開始向下遞減計(jì)數(shù)。

④CTRL 寄存器的第 16 位是 SysTick 遞減到 0 的標(biāo)志位,如果遞減到 0,此為置 1,通過讀取該位來判斷延時(shí)是否完成,從而退出 while 循環(huán)。

⑤關(guān)閉 SysTick 定時(shí)器。

⑥清空當(dāng)前計(jì)數(shù)值寄存器 VAL。

delay_ms()函數(shù)

delay_ms 函數(shù)代碼如下:

/*************************************************************

* 函 數(shù) 名 : delay_ms

* 函數(shù)功能 : ms 延時(shí),

* 輸 入 : nms:要延時(shí)的 ms 數(shù)

注意:nms 的值,SysTick->LOAD 為 24 位寄存器,

不要大于 0xffffff*8*1000/SYSCLK

對(duì) 72M 條件下,nms<=1864ms

* 輸 出 : 無

**************************************************************/

void delay_ms(u16 nms)

{

u32 temp;

SysTick->LOAD=(u32)nms*fac_ms; // 時(shí) 間 加 載

(SysTick->LOAD 為 24bit)

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

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

do

{

temp=SysTick->CTRL;

}while((temp&0x01)&&!(temp&(1<<16))); //等待時(shí)間到達(dá)

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

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

}

此函數(shù)功能與 delay_us 基本一樣,只不過這里是延時(shí) ms。要注意的是,SysTick 定 時(shí) 器 是 24 位 的 , 其 計(jì) 數(shù) 最 大 值 為 0xffffff , 時(shí) 間 為nms<=0xffffff*8*1000/SYSCLK,SYSCLK 是系統(tǒng)時(shí)鐘為 72M,所以最大延時(shí)為1864ms。如果需要延時(shí)大于 1.864S,可以調(diào)用多個(gè) delay_ms 函數(shù)即可。

主函數(shù)

在 main.c 文件中前面引入了工程中所需的頭文件,可以打開工程查看,這里我們主要看下 main 函數(shù),代碼如下:

/**************************************************************

* 函 數(shù) 名 : main

* 函數(shù)功能 : 主函數(shù)

* 輸 入 : 無

* 輸 出 : 無

***************************************************************/

int main()

{

SysTick_Init(72);

LED_Init();

while(1)

{

led1=0;

led2=1;

delay_ms(500); //精確延時(shí) 500ms

led1=1;

led2=0;

delay_ms(500); //精確延時(shí) 500ms

}

}

主函數(shù)實(shí)現(xiàn)的功能比較簡單,首先對(duì) SysTick 定時(shí)器進(jìn)行初始化配置,選擇系統(tǒng)時(shí)鐘 8 分頻作為 SysTick 的時(shí)鐘,然后初始化 LED,這個(gè)初始化過程前面已經(jīng)介紹過,大家也可以進(jìn)入這個(gè)函數(shù)內(nèi)查看。最后進(jìn)入 while 循環(huán)語句,對(duì) PC0和 PC1 管腳進(jìn)行位操作,里面也調(diào)用了 delay_ms 延時(shí)函數(shù),這時(shí)候的延時(shí)是非常精確的。

將工程程序編譯下載到開發(fā)板內(nèi), 可以看到 LED 模塊的 2 個(gè)指示燈實(shí)現(xiàn)了流水燈效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23843

    瀏覽量

    674012
  • 流水燈
    +關(guān)注

    關(guān)注

    21

    文章

    433

    瀏覽量

    60510
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    13593

原文標(biāo)題:STM32實(shí)例-SysTick實(shí)現(xiàn)2個(gè)LED流水燈效果

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【沁恒CH585開發(fā)板免費(fèi)試用體驗(yàn)】GPIO 流水燈

    電路圖 值得注意的,不同的開發(fā)板,LED連接的GPIO一般是不同的,請(qǐng)注意修改。這里將LED0接到PB8,LED1接到PB17。 3 GPIO 流水燈
    發(fā)表于 07-04 22:55

    【RA-Eco-RA4M2開發(fā)板評(píng)測(cè)】點(diǎn)燈實(shí)現(xiàn)6種LED花式流水燈操作

    很高興收到瑞薩電子提供的RA4M2開發(fā)板,這次帖子就專門用來說說專業(yè)點(diǎn)燈操作,實(shí)現(xiàn)各種花式的流水燈,可以十分方便地控制LED的各種狀態(tài),甚至多個(gè)LED組合控制,如跑馬燈等。 打開原理圖
    發(fā)表于 04-28 21:28

    【RA-Eco-RA4M2開發(fā)板評(píng)測(cè)】使用串口通信實(shí)現(xiàn)花樣流水燈操作

    串口使用USB串口吧,節(jié)省USB口線?。。。?! 使用串口通信實(shí)現(xiàn)花樣流水燈操作,本次測(cè)評(píng)通過使用串口助手發(fā)送數(shù)據(jù)來控制RA4M2的流水燈操作,總共有9中模式: (1)發(fā)送0,3個(gè)LED
    發(fā)表于 04-27 21:33

    【RA-Eco-RA4M2開發(fā)板評(píng)測(cè)】2 初識(shí)GPIO流水燈

    電平,再加上延時(shí),從而實(shí)現(xiàn)流水燈效果。 4 實(shí)驗(yàn)現(xiàn)象 將編譯好的程序下載到板子中,可以看到三個(gè)LED燈依次閃爍。
    發(fā)表于 04-25 23:06

    使用單片機(jī)驅(qū)動(dòng)多組LED實(shí)現(xiàn)呼吸效果電路

    各位大佬,請(qǐng)教下,當(dāng)前我需要使用單片機(jī)驅(qū)動(dòng)控制20路并聯(lián)LED燈,需要PWM驅(qū)動(dòng)實(shí)現(xiàn)呼吸燈的效果,目前我是直接使用三極管驅(qū)動(dòng),這種電路會(huì)有什么問題?跟有些使用三極管控制MOS來驅(qū)動(dòng)LED
    發(fā)表于 04-11 14:24

    【瑞薩RA2L1入門學(xué)習(xí)】+LED流水燈實(shí)驗(yàn)

    基于 Arm? Cortex?-M23 核心(現(xiàn)今 Arm? Cortex-M 系列中功耗最低的 CPU)。 這款產(chǎn)品采用優(yōu)化的制程和瑞薩電子的低功耗工藝技術(shù),是業(yè)界一流水平的超低功耗微控制器。 RA2L1
    發(fā)表于 03-07 15:27

    【RA-Eco-RA2L1-48PIN-V1.0開發(fā)板試用】——點(diǎn)亮流水燈操作

    燒錄板子,現(xiàn)在看到,LED1和LED2都常亮了?。?! (2)實(shí)現(xiàn)更復(fù)雜的流水燈效果 打開KEIL,在hal_entyr.c文件中定義好
    發(fā)表于 01-23 09:57

    #中國香河英茂科工#STC32G12K128#屠龍刀三.2 流水燈例程

    流水燈
    丙丁先生
    發(fā)布于 :2025年01月19日 14:19:35

    【正點(diǎn)原子STM32H7R3開發(fā)套件試用體驗(yàn)】流水燈

    【正點(diǎn)原子STM32H7R3開發(fā)套件試用體驗(yàn)】流水燈 本文介紹了使用 STM32CubeMX 輔助配置 GPIO 及晶振參數(shù),實(shí)現(xiàn)流水燈的方法。 工程創(chuàng)建 1.打開 STM32CubeMX 軟件
    發(fā)表于 12-28 18:51

    低成本單片機(jī)方案——觸摸流水燈開關(guān)控制

    概述本方案旨在提供一種基于低成本單片機(jī)的觸摸流水燈開關(guān)控制解決方案。該方案結(jié)合了單片機(jī)技術(shù)、電容式觸摸傳感技術(shù)和LED驅(qū)動(dòng)技術(shù),實(shí)現(xiàn)了通過觸摸操作控制流水燈
    的頭像 發(fā)表于 12-26 16:37 ?816次閱讀
    低成本單片機(jī)方案——觸摸<b class='flag-5'>流水燈</b>開關(guān)控制

    【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】RA4E2 實(shí)現(xiàn)流水燈操作

    本帖子主要使用RA4E2開發(fā)板來實(shí)現(xiàn)流水燈的交替電量操作,具體實(shí)驗(yàn)現(xiàn)象就是LE1亮LED2滅,LED1滅LED2亮。 好的,下面開始進(jìn)行操作
    發(fā)表于 12-18 12:52

    【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】MDK+點(diǎn)燈+流水燈

    ” 文件,在 hal_entry 函數(shù)里面編寫我們的代碼。 直接運(yùn)行,燈會(huì)常亮 流水燈實(shí)驗(yàn),延遲200ms
    發(fā)表于 12-15 15:59

    基于51單片機(jī)的跑馬燈/流水燈系統(tǒng)

    具體實(shí)現(xiàn)功能(1)9種LED流水燈模式通過按鍵進(jìn)行切換,數(shù)碼管顯示流水燈模式。(2)通過加減按鍵可以切換每種LED
    的頭像 發(fā)表于 10-22 14:12 ?702次閱讀
    基于51單片機(jī)的跑馬燈/<b class='flag-5'>流水燈</b>系統(tǒng)

    【CH32V208】2、體驗(yàn)systick

    Java version: 1.8.0_221 【實(shí)驗(yàn)程序】 1、創(chuàng)建一個(gè)新的空白工程。 2、打開SysTick中斷void SysTick_Handler(void) __attribute__
    發(fā)表于 07-31 09:37

    LED機(jī)械矩陣屏:打造獨(dú)特視覺效果的視覺盛宴

    您更好地了解和應(yīng)用這一技術(shù)。 LED機(jī)械矩陣屏 二、LED機(jī)械矩陣屏的定義及特點(diǎn) 1. 定義 LED機(jī)械矩陣屏是一種采用LED燈珠組成的機(jī)械結(jié)構(gòu)顯示屏幕,通過紅、綠、藍(lán)三基色
    的頭像 發(fā)表于 07-29 09:30 ?927次閱讀