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

當(dāng)前位置:首頁(yè) > 電源 > 電源-LED驅(qū)動(dòng)
[導(dǎo)讀]實(shí)驗(yàn)?zāi)康拈W燈程序在嵌入式學(xué)習(xí)中猶如“Hello World!”在C/C++語(yǔ)言學(xué)習(xí)中一樣經(jīng)典。它以簡(jiǎn)單的方式引導(dǎo)了無數(shù)的嵌入式愛好者。通過本節(jié)的學(xué)習(xí)你可以基本了解STM32

實(shí)驗(yàn)?zāi)康?/p>

閃燈程序在嵌入式學(xué)習(xí)中猶如“Hello World!”在C/C++語(yǔ)言學(xué)習(xí)中一樣經(jīng)典。它以簡(jiǎn)單的方式引導(dǎo)了無數(shù)的嵌入式愛好者。通過本節(jié)的學(xué)習(xí)你可以基本了解STM32的GPIO以及基本定時(shí)器的使用。

硬件說明

本例程需要一個(gè)定時(shí)器和一個(gè)LED,其中LED就是擴(kuò)展板上的紅色LED接在PD3上且正極接在高電平上,定時(shí)器選用基本定時(shí)器7。

1. STM32 GPIO簡(jiǎn)介

GPIO主要特性

輸出狀態(tài)可選推挽、開漏、上拉或下拉

可為每個(gè)I/O選擇速度

輸入狀態(tài)可選則懸空、上拉/下拉、模擬

每個(gè)I/O引腳都有復(fù)用功能

可對(duì)每個(gè)輸出引腳進(jìn)行位操作

STM32的每個(gè)GPIO都有4個(gè)32位配置寄存器:模式選擇寄存器、輸出類型配置寄存器、輸出速度配置寄存器、上拉/下拉電阻配置寄存器;2個(gè)32位數(shù)據(jù)寄存器:數(shù)據(jù)輸入寄存器、數(shù)據(jù)輸出寄存器;1個(gè)32位鎖定寄存器和2個(gè)32位復(fù)用功能選擇寄存器。無論你選擇某個(gè)I/O作為輸入還是輸出,都可以給根據(jù)需求選擇是否使用上拉或下拉電阻。總的來講,每個(gè)I/O有8中模式可供選擇:輸入懸空、帶上拉輸入、來下拉輸入、帶上拉或下拉開漏輸出、帶上拉或下拉推挽輸出、模擬輸入、推挽且?guī)侠蛳吕膹?fù)用功能、開漏且?guī)侠蛳吕膹?fù)用功能。

1.1 I/O模式選擇

每個(gè)I/O引腳都有4種用途模式可供選擇。GPIOx_MODER(x = A..I)是一個(gè)32位寄存器,每?jī)晌慌渲靡粋€(gè)引腳,位[1:0]配置引腳0以此類推。其取值及含義如表1.1所示。

表1.1 I/O用途模式設(shè)置

MODER[1:0] 描述

B00 輸入模式(初始值)

B01 通用輸出模式

B10 復(fù)用功能模式

B11 模擬信號(hào)模式

1.2 輸出類型選擇

根據(jù)輸出需求你可在GPIOx_OTYPER中設(shè)置推挽或開漏輸出。這個(gè)寄存器只有低16位有效,取值及定義如表1.2所示。

表1.2 輸出類型設(shè)置

OT[0] 描述

B0 推挽輸出(初始值)

B1 開漏輸出

1.3 輸出速度設(shè)置

表1.3 端口輸出速度設(shè)置

OSPEEDER[1:0] 描述

B00 2MHZ低速

B01 25MHZ中速

B10 50MHZ快速

B11 100MHZ高速

1.4 上拉下拉電阻設(shè)置

表1.4 上拉下拉電阻設(shè)置

PUPDR[1:0] 描述

B00 無上拉或下拉電阻

B01 上拉電阻連接

B10 下拉電阻連接

B11 保留

1.5 數(shù)據(jù)輸入和輸出

當(dāng)GPIO設(shè)置為通用輸入時(shí),讀取寄存器GPI Ox_IDR)(x = A..I)可得到端口的輸入狀態(tài)且這個(gè)寄存器是只讀的;GPIOx_ODR(x = A..I)是一個(gè)可讀寫寄存器,寫數(shù)據(jù)到這個(gè)寄存器可控制端口輸出電平,從這個(gè)寄存器讀數(shù)據(jù)可判斷端口的輸出狀態(tài)。

1.6 復(fù)用功能選擇

STM32中有16種復(fù)用功能,一個(gè)引腳會(huì)對(duì)應(yīng)其中幾種。共有兩個(gè)寄

存器GPIOx_AFRL與GPIOx_AFRH 用來設(shè)置引腳的復(fù)用功能,其中每

4位對(duì)應(yīng)一個(gè)引腳。

表1.6 復(fù)用功能配置

AFR[3:0] 描述

0X1 AF1(TIM1/TIM2)

0X2 AF2(TIM3...5)

0X4 AF4(I2C1...3)

0XD AF14(DCMI)

2. STM32基本定時(shí)器簡(jiǎn)介

STM32的定時(shí)器非常強(qiáng)大,根據(jù)功能可分為高級(jí)控制定時(shí)器、通用定時(shí)器、基本定時(shí),其中定時(shí)器6、7為基本定時(shí)器。在這里我們主要對(duì)基本定時(shí)器給予簡(jiǎn)單介紹。它具有一個(gè)16位自動(dòng)重載加法計(jì)數(shù)器和一個(gè)16位可編程預(yù)分頻器。預(yù)分頻器對(duì)輸入時(shí)鐘進(jìn)行分頻,然后提供給計(jì)數(shù)器作為計(jì)數(shù)時(shí)鐘使用。STM32的自動(dòng)重載寄存器(TIMx_ARR)在物理上對(duì)應(yīng)兩個(gè)寄存器,一個(gè)是咱們可以隨便讀寫的,另一個(gè)則只能被定時(shí)器讀取。這個(gè)咱們無法操作的寄存器被稱作影子寄存器。當(dāng)TIMx_CR1中的ARPE位等于0時(shí)改變TIMx_ARR的值就可馬上改變影子寄存器里的值。當(dāng)ARPE等于1時(shí)TIMx_ARR的值被緩存起來了,只有當(dāng)更新事件發(fā)生后才會(huì)將新的值傳送到影子寄存器中。

操作定會(huì)器前需要先打開輸入時(shí)鐘,然后可設(shè)置重預(yù)分頻系數(shù)寄存器(TIMx_PSC)和自動(dòng)載值寄存器。因?yàn)槲覀円尪〞r(shí)器產(chǎn)生更新中斷,因此必需使能TIMx_DIER中的UIE位以及設(shè)置NVIC相關(guān)寄存器。初始化完成后設(shè)置TIMx_CR1的CEN位即可開啟定時(shí)器。

實(shí)驗(yàn)原理及程序結(jié)構(gòu)

實(shí)驗(yàn)設(shè)計(jì)

利用STM32的基本定時(shí)器產(chǎn)生更新中斷,在中斷處理函數(shù)中控制LED引腳的電平,帶給大家一個(gè)閃燈的效果。本例程會(huì)涉及到GPIO_D03以及基本定時(shí)器7的初始化和一個(gè)定時(shí)器7 中斷服務(wù)例程等。

源程序說明

下面讓我們來看看blink.c是如何實(shí)現(xiàn)的。

LED初始化

/* blink.c */

void led_init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* 使能GPIOD時(shí)鐘 */

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

/* 配置GPIO_LED引腳 */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOD, &GPIO_InitStructure);

}

LED的初始化比較簡(jiǎn)單,選擇好引腳并將引腳用途模式設(shè)置為輸出即可。需要注意的是STM32的每個(gè)外設(shè)的時(shí)鐘都可單獨(dú)控制,在操作前需要打開時(shí)鐘而且要從STM32用戶手冊(cè)中確認(rèn)清楚,你要用到的外設(shè)具體掛載在哪個(gè)總線上的(AHB1、APB1等)。

LED控制

/* blink.c */

void led_on(void)

{

/* 設(shè)置PD3為低電平 */

GPIO_ResetBits(GPIOD, GPIO_Pin_3);

}

void led_off(void)

{

/* 設(shè)置PD3為高電平 */

GPIO_SetBits(GPIOD, GPIO_Pin_3);

}

void led_toggle(void)

{

/* 切換PD3電平狀態(tài) */

GPIO_ToggleBits(GPIOD, GPIO_Pin_3);

}

這三個(gè)LED控制函數(shù)都使用了位操作,由于LED的正極是接在高電平上的,led_on是讓PD3輸出低電平從而點(diǎn)亮LED。led_toggle將會(huì)在定時(shí)器的中斷服務(wù)例程中調(diào)用,它會(huì)把引腳在高低電平之間切換達(dá)到閃燈的果。

定時(shí)器初始化

/* blink.c */

void TIM7_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

/* 操作定時(shí)器前先使能輸入時(shí)鐘 */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);

/**** Time base configuration ****/

/* 設(shè)置自動(dòng)重裝載周期,計(jì)數(shù)到5000為1000ms */

TIM_TimeBaseInitStruct.TIM_Period = 5000;

/* 設(shè)置預(yù)分頻值,即定時(shí)器計(jì)數(shù)頻率為10Khz */

TIM_TimeBaseInitStruct.TIM_Prescaler =(8400-1);

TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;

/* 向上計(jì)數(shù)模式 */

TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;

/* 根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIM7的時(shí)基單位 */

TIM_TimeBaseInit(TIM7, &TIM_TimeBaseInitStruct);

/* 使能TIM7更新中斷 */

TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);

/* Configure the NVIC Preemption Priority Bits */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/* Enable the TIM7 global Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

/* 啟動(dòng)定時(shí)器 */

TIM_Cmd(TIM7, ENABLE);

}

這里使用的是最簡(jiǎn)單的基本定時(shí)器,打開輸入時(shí)鐘、設(shè)置預(yù)分頻器和計(jì)數(shù)重載值后配置好相關(guān)中斷寄存器后就可啟動(dòng)定時(shí)器了。在ST庫(kù)代碼的stm32f4xx_it.C中定義了所有中斷入口,我們需要在里面添加如下代碼:

定時(shí)器7中斷服務(wù)例程

/* stm32f4xx_it.C */

void TIM7_IRQHandler(void)

{

if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)

{

/* 清除中斷標(biāo)志 */

TIM_ClearITPendingBit(TIM7, TIM_IT_Update );

/* 切換I/O狀態(tài) */

led_toggle();

}

}

本站聲明: 本文章由作者或相關(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)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉