1. 程式人生 > >用定時器控制Led燈閃爍

用定時器控制Led燈閃爍

實驗目的
閃燈程式在嵌入式學習中猶如“Hello World!”在C/C++語言學習中一樣經典。它以簡單的方式引導了無數的嵌入式愛好者。通過本節的學習你可以基本瞭解STM32的GPIO以及基本定時器的使用。
硬體說明
本例程需要一個定時器和一個LED,其中LED就是擴充套件板上的紅色LED接在PD3上且正極接在高電平上,定時器選用基本定時器7。
1. STM32 GPIO簡介
 GPIO主要特性
 輸出狀態可選推輓、開漏、上拉或下拉
 可為每個I/O選擇速度
 輸入狀態可選則懸空、上拉/下拉、模擬
 每個I/O引腳都有複用功能
 可對每個輸出引腳進行位操作
STM32的每個GPIO都有4個32位配置暫存器:模式選擇暫存器、輸出型別配置暫存器、輸出速度配置暫存器、上拉/下拉電阻配置暫存器;2個32位資料暫存器:資料輸入暫存器、資料輸出暫存器;1個32位鎖定暫存器和2個32位複用功能選擇暫存器。無論你選擇某個I/O作為輸入還是輸出,都可以給根據需求選擇是否使用上拉或下拉電阻。總的來講,每個I/O有8中模式可供選擇:輸入懸空、帶上拉輸入、來下拉輸入、帶上拉或下拉開漏輸出、帶上拉或下拉推輓輸出、模擬輸入、推輓且帶上拉或下拉的複用功能、開漏且帶上拉或下拉的複用功能。

1.1 I/O模式選擇
每個I/O引腳都有4種用途模式可供選擇。GPIOx_MODER(x = A..I)是一個32位暫存器,每兩位配置一個引腳,位[1:0]配置引腳0以此類推。其取值及含義如表1.1所示。
表1.1 I/O用途模式設定
MODER[1:0] 描述
B00 輸入模式(初始值)
B01 通用輸出模式
B10 複用功能模式
B11 模擬訊號模式

1.2 輸出型別選擇
根據輸出需求你可在GPIOx_OTYPER中設定推輓或開漏輸出。這個暫存器只有低16位有效,取值及定義如表1.2所示。
表1.2 輸出型別設定
OT[0] 描述
B0 推輓輸出(初始值)
B1 開漏輸出

1.3 輸出速度設定
表1.3 埠輸出速度設定
OSPEEDER[1:0] 描述
B00 2MHZ低速
B01 25MHZ中速
B10 50MHZ快速
B11 100MHZ高速

1.4 上拉下拉電阻設定
表1.4 上拉下拉電阻設定
PUPDR[1:0] 描述
B00 無上拉或下拉電阻
B01 上拉電阻連線
B10 下拉電阻連線
B11 保留

1.5 資料輸入和輸出
當GPIO設定為通用輸入時,讀取暫存器GPI Ox_IDR)(x = A..I)可得到埠的輸入狀態且這個暫存器是隻讀的;GPIOx_ODR(x = A..I)是一個可讀寫暫存器,寫資料到這個暫存器可控制埠輸出電平,從這個暫存器讀資料可判斷埠的輸出狀態。
1.6 複用功能選擇
STM32中有16種複用功能,一個引腳會對應其中幾種。共有兩個寄 
存器GPIOx_AFRL與GPIOx_AFRH 用來設定引腳的複用功能,其中每
4位對應一個引腳。 
表1.6 複用功能配置
AFR[3:0] 描述
0X1 AF1(TIM1/TIM2)
0X2 AF2(TIM3...5)
0X4 AF4(I2C1...3)
0XD AF14(DCMI)

2. STM32基本定時器簡介
STM32的定時器非常強大,根據功能可分為高階控制定時器、通用定時器、基本定時,其中定時器6、7為基本定時器。在這裡我們主要對基本定時器給予簡單介紹。它具有一個16位自動過載加法計數器和一個16位可程式設計預分頻器。預分頻器對輸入時鐘進行分頻,然後提供給計數器作為計數時鐘使用。STM32的自動過載暫存器(TIMx_ARR)在物理上對應兩個暫存器,一個是咱們可以隨便讀寫的,另一個則只能被定時器讀取。這個咱們無法操作的暫存器被稱作影子暫存器。當TIMx_CR1中的ARPE位等於0時改變TIMx_ARR的值就可馬上改變影子暫存器裡的值。當ARPE等於1時TIMx_ARR的值被快取起來了,只有當更新事件發生後才會將新的值傳送到影子暫存器中。
操作定會器前需要先開啟輸入時鐘,然後可設定重預分頻係數暫存器(TIMx_PSC)和自動載值暫存器。因為我們要讓定時器產生更新中斷,因此必需使能TIMx_DIER中的UIE位以及設定NVIC相關暫存器。初始化完成後設定TIMx_CR1的CEN位即可開啟定時器。

實驗原理及程式結構
實驗設計
利用STM32的基本定時器產生更新中斷,在中斷處理函式中控制LED引腳的電平,帶給大家一個閃燈的效果。本例程會涉及到GPIO_D03以及基本定時器7的初始化和一個定時器7 中斷服務例程等。
源程式說明
下面讓我們來看看blink.c是如何實現的。 
LED初始化

相關推薦

定時控制Led閃爍

實驗目的 閃燈程式在嵌入式學習中猶如“Hello World!”在C/C++語言學習中一樣經典。它以簡單的方式引導了無數的嵌入式愛好者。通過本節的學習你可以基本瞭解STM32的GPIO以及基本定時器的使用。 硬體說明 本例程需要一個定時器和一個LED,其中LED就是擴充套件板上的紅色LED接在PD3上且正極接

STM32-自學筆記(9.SysTick定時控制LED閃爍,程式到的庫函式介紹)

1.SysTick_CLKSourceConfig 函式原型:viod SysTick_CLKSourceConfig (u32 SysTick_CLKSource) 功能:選擇SysTick的時鐘源 引數:SysTick_CLKSource:SysTick時鐘源 引數:S

STM32-自學筆記(8.使用STM32的SysTick定時控制LED閃爍

SysTick定時器,被稱為“系統節拍時鐘”。SysTick屬於ARM  Cortex-M3核心的一個內設,STM32也帶有SysTick定時器。 SysTick定時器的基本結構 SysTick工作原理: SysTick從時鐘源介面獲得時鐘驅動 從重灌暫存器將

定時控制LED閃爍定時1)

TIM.c檔案#include "TIM1.h"void TIM1_Init(void){    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  NVIC_InitTypeDef NVIC_InitStructure;  //使

2440裸機程式——定時控制LED閃爍

/********************************************************************************************* * File name:timer.c * Author:ZXL  * Description:通過定時器,讓LED燈每

3. 定時控制 LED 閃爍定時 1 )

#include <TIM1.H> void TIM1_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; //使能

STM32實戰3.定時控制LED閃爍定時1)

#include "sys.h" #include "led.h" #include "delay.h" #include "TIM1.h" int main(void) { NVIC_Configuration(); LED_Init(); delay_init

簡單的一個定時控制的流水c程式

用定時器以間隔500MS在6位數碼管上依次顯示0、1、2、3….C、D、E、F,重複。 #include<reg52.h> typedef unsigned int u8; typede

STM32通用定時的基本定時功能實現閃爍

/*MAIN.C*/ /* Includes ------------------------------------------------------------------*/#inclu

控制LED閃爍時間(500ms)

#include<reg52.h> #define uint unsigned int void delay(uint z)//1ms延時程式 { uint i,j; for(i=0;i<z;i++) for(j=0;j<110;j++);

51微控制器組合語言程式設計:定時控制輸出矩形波

80C51微控制器的時鐘頻率為12MHz,利用定時器T1和P1.0輸出矩形脈衝。波形只畫出了2段:一段為100us 另一段為50us。要完全的、完整的、詳細的編寫此程式的過程!謝謝懸賞分:5 | 解決時間:2011-1-9 15:24------------------------最佳答案:用一個定時器定時

學習樹莓派驅動LED閃爍

個人網站: 黑客攻防學習課程: 號外:新課上線啦~~ 電腦端學習入口: 手機端學習入口:請掃二維碼~ 如果本部落格對你的有所幫助,不妨小額打賞下博主,您的鼓勵是我不斷寫部落格的動力。關於金額多少隨意,心意到就好。博主萬分感

定時T0查詢方式2 P0口8位控制LED閃爍 T1查詢方式2 P1口8位控制LED閃爍

//用定時器T0查詢方式P0口8位控制LED閃爍T1查詢方式P1口8位控制LED閃爍 #include<reg52.h>        //  包含52微控制器暫存器定義的標頭檔案 #define uchar unsigned char #define uint

定時T0的中斷控制8位LED閃爍

#include<reg52.h> #define uchar unsigned char #define uint unsigned int uint i; void main() {

Stm32定時中斷使LED閃爍

知識點: Stm32共有11個定時器: 1.兩個高階定時器:TIM1、TIM8-------------------------APB2 2.四個通用定時器:TIM2~TIM5-------------------------APB1 3.兩個基本定時器:TIM6、TIM7

STM32F407ZET6 串列埠通過鍵盤控制LED的亮滅

1、串列埠定義 串列埠通訊是一種裝置間非常常用序列通訊(資料互動)方式,因為它比較簡單便捷,大部分電子裝置支援串列埠通訊方式,電子工工程師除錯裝置時常用的介面 序列通訊:佔用I/O較少,速度上較慢點 並行通訊:佔用I/O較多,速度上快速 2、

STM32例項之LED閃爍控制以及相關注意事項

在本例項中,主要是為了實現LED燈的閃爍。首先分析LED的驅動方式,本實驗中使用的是OpenM3V,內建8個LED均採用灌流方式驅動(低電平亮)。如果想要實現其閃爍,則需要給相應埠持續不斷的高低交替電

imx6q核心定時實現led閃爍

/************************************************************************* > File Name: led_drv.c > Author: XXDK > Email: [em

51微控制器定時實現LED閃爍

要啟用一個定時器,先要開啟定時器,然後產生中斷 系統中斷: 初始化程式應完成如下工作: 對TMOD賦值,以確定T0和T1的工作方式。 計算初值,並將其寫入TH0、TL0或TH1、TL1。 中斷方式時,則對EA賦值,開放定時器中斷。 使TR0或TR1置位,啟動定時/計數器定時或計數。

DSP:C54x定時及使用定時產生led的1s週期閃爍

一、C54x的片內定時器是一個可程式設計的定時器,同時可以用於週期性地產生中斷,為16位計數器。定時器主要由定時器暫存器TIM、定時週期暫存器PRD、定時控制暫存器TCR(包括分頻係數TDDR、預標定