在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SysTick方式實現LED流水燈效果。

電子工程師 ? 來源:lq ? 2019-02-11 15:35 ? 次閱讀

SysTick_Init()函數

SysTick_Init 函數代碼如下:

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

* 函 數 名 : SysTick_Init

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

* 輸 入 : SYSCLK:系統時鐘頻率

* 輸 出 : 無

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

void SysTick_Init(u8 SYSCLK)

{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

fac_us=SYSCLK/8; //SYSCLK的8分頻 保存1us所需的計數次數

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

}

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

下面的兩條語句是用來求取SysTick定時器在1us時間內和1ms時間內的計數次數。

delay_us()函數

delay_us 函數代碼如下:

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

* 函 數 名 : delay_us

* 函數功能 : us 延時,

* 輸 入 : nus:要延時的 us 數

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

2^24/fac_us@fac_us=21)

* 輸 出 : 無

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

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&=~0x01; //關閉計數器

SysTick->VAL =0X00; //清空計數器

}

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

②清空當前計數值寄存器 VAL。

③打開 SysTick 定時器,定時器開始向下遞減計數。

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

⑤關閉 SysTick 定時器。

⑥清空當前計數值寄存器 VAL。

delay_ms()函數

delay_ms 函數代碼如下:

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

* 函 數 名 : delay_ms

* 函數功能 : ms 延時,

* 輸 入 : nms:要延時的 ms 數

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

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

對 72M 條件下,nms<=1864ms

* 輸 出 : 無

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

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&=~0x01; //關閉計數器

SysTick->VAL =0X00; //清空計數器

}

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

主函數

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

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

* 函 數 名 : main

* 函數功能 : 主函數

* 輸 入 : 無

* 輸 出 : 無

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

int main()

{

SysTick_Init(72);

LED_Init();

while(1)

{

led1=0;

led2=1;

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

led1=1;

led2=0;

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

}

}

主函數實現的功能比較簡單,首先對 SysTick 定時器進行初始化配置,選擇系統時鐘 8 分頻作為 SysTick 的時鐘,然后初始化 LED,這個初始化過程前面已經介紹過,大家也可以進入這個函數內查看。最后進入 while 循環語句,對 PC0和 PC1 管腳進行位操作,里面也調用了 delay_ms 延時函數,這時候的延時是非常精確的。

將工程程序編譯下載到開發板內, 可以看到 LED 模塊的 2 個指示燈實現了流水燈效果。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23370

    瀏覽量

    663319
  • 流水燈
    +關注

    關注

    21

    文章

    433

    瀏覽量

    59837
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    13151

原文標題:STM32實例-SysTick實現2個LED流水燈效果

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【RA-Eco-RA2L1-48PIN-V1.0開發板試用】——點亮流水燈操作

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

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

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

    【正點原子STM32H7R3開發套件試用體驗】流水燈

    【正點原子STM32H7R3開發套件試用體驗】流水燈 本文介紹了使用 STM32CubeMX 輔助配置 GPIO 及晶振參數,實現流水燈的方法。 工程創建 1.打開 STM32CubeMX 軟件
    發表于 12-28 18:51

    低成本單片機方案——觸摸流水燈開關控制

    概述本方案旨在提供一種基于低成本單片機的觸摸流水燈開關控制解決方案。該方案結合了單片機技術、電容式觸摸傳感技術和LED驅動技術,實現了通過觸摸操作控制流水燈
    的頭像 發表于 12-26 16:37 ?259次閱讀
    低成本單片機方案——觸摸<b class='flag-5'>流水燈</b>開關控制

    【RA-Eco-RA4E2-64PIN-V1.0開發板試用】RA4E2 實現流水燈操作

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

    【RA-Eco-RA4E2-64PIN-V1.0開發板試用】MDK+點燈+流水燈

    ” 文件,在 hal_entry 函數里面編寫我們的代碼。 直接運行,燈會常亮 流水燈實驗,延遲200ms
    發表于 12-15 15:59

    基于51單片機的跑馬燈/流水燈系統

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

    FPGA 實驗一:流水燈模塊

    實現流水燈效果。最初,每個步驟的停留時間是 1秒,然后步驟03按順序執行便會產生流水效果。步驟4是用來切換模式,步驟5則是根據isTag的內
    發表于 06-10 09:38

    單片機POV LED流水燈制作

    電子發燒友網站提供《單片機POV LED流水燈制作.docx》資料免費下載
    發表于 05-28 14:34 ?3次下載

    【紫光同創盤古PGX-Nano教程】——(盤古PGX-Nano開發板/PG2L50H_MBG324第三章)鍵控流水燈實驗例程

    燈、按鍵、撥碼開關等。 二:實驗目的 由PB0(即開發板S0位置)按鍵輸入,切換LED0~LED7的輸出效果。 三:實驗原理 實現框架如下: (1)頂層
    發表于 04-29 16:06

    【紫光同創盤古PGX-MINI-4K教程】——(盤古PGX-MINI-4K開發板/PGC4KD-6ILPG144第二章)LED 流水燈實驗例程

    載 jtag 調試接口, 預留兩組 20PIN 擴展 IO、數碼管、按鍵、led 燈等硬件資源,為用戶提供基本的 開發環境。 二:實驗目的掌握流水燈原理并實現流水燈 三:實驗要求
    發表于 03-26 16:24

    利用systick計時器對LED等延時的時候,for循環中的ms和systick–&gt;LOAD的值為什么不是同一個?

    我們在利用systick計時器對LED等延時的時候,這里的for循環中的ms和我們的systick–>LOAD的值不是同一個,那當for循環結束以后,為啥我的systick–&a
    發表于 03-25 07:57

    如何實現SysTick中斷的嵌套自身?

    當前 MSR XPSR,R7 MOV PC, R6 ;BXLR ENDP END 我想通過SysTick的嵌套自身,實現任務的搶占式調度,請問有人知道要怎么弄嗎? 上面的匯編是我直接偽造返回現場讓
    發表于 03-25 06:20

    【紫光同創盤古PGX-Lite 7K教程】——(盤古PGX-Lite 7K開發板/PGC7KD-6IMBG256第二章)?LED 流水燈實驗例程

    流水燈原理并實現流水燈 三:實驗要求流水燈:8 個 LED 以 0.5s 間隔接替閃爍 四:實驗原理相比上一個
    發表于 03-20 15:07

    51單片機流水燈制作

    ?流水燈是學習51單片機的一個基本項目,是我們對單片機IO口輸出認識的基本項目。當然學會了花樣流水燈也很好玩。 下面就分享一種51單片機流水燈制作的方法。 一、流水燈原理圖 二、相關知
    的頭像 發表于 02-26 10:06 ?1710次閱讀
    51單片機<b class='flag-5'>流水燈</b>制作
    主站蜘蛛池模板: 亚洲午夜久久久精品影院视色 | 国产激烈床戏无遮挡观看 | 久久99精品久久久久久久野外 | 免费久久精品国产片香蕉 | 午夜大片网 | 国产成人精品亚洲日本在线观看 | 色偷偷91久久综合噜噜噜 | 99久久精品99999久久 | 午夜资源网 | 老司机亚洲精品影院在线观看 | 美女视频网站色 | 色综合久久九月婷婷色综合 | 午夜久久久久久网站 | 高h细节肉爽文男男 | 中文字幕一区二区三区5566 | 天天综合天天看夜夜添狠狠玩 | 欧美日韩在线成人免费 | 色婷婷六月丁香在线观看 | 婷婷六月综合网 | 麒麟色欧美影院在线播放 | 亚洲香蕉久久一区二区三区四区 | 美女免费视频黄 | 色多多福利网站老司机 | 欧美特级黄 | 日本wwwhdsex69| 日本色www | 欧美成人一区二区三区在线视频 | 女的扒开尿口让男人桶爽 | 都市激情亚洲综合 | 欧美成人猛男性色生活 | 免费看黄色小视频 | 亚洲区免费 | 久久天天躁狠狠躁夜夜 | 久久国产精品99精品国产987 | 日本国产高清色www视频在线 | 国产亚洲精品成人一区看片 | 亚洲视频入口 | 国产91啪| 毛片网站网址 | 四虎影院在线免费 | 爱啪网站 |