色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

STM32時鐘與GPIO分析 基于STM32的LED燈開發

CHANBAEK ? 來源:Qt歷險記 ? 作者:諾蘇編程 ? 2023-08-22 15:57 ? 次閱讀

一、 STM32時鐘分析

寄存器 :寄存器的功能是存儲二進制代碼,它是由具有存儲功能的觸發器組合起來構成的。一個觸發器可以存儲1位二進制代碼,故存放n位二進制代碼的寄存器,需用n個觸發器來構成

在計算機領域,寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和 控制寄存器 。寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非常快。

控制寄存器 :相當一排可通過0/1進行設置外設功能的開關,程序中通過地址查找到對應的寄存器,所以說控制寄存器的地址是唯一。

芯片時鐘:芯片工作時,是需要脈沖,脈沖相當于給芯片起振,可保證芯片的正常工作,類似于人,心臟正常跳動,人體生命特征才能正常。

1HZ:一秒產生1個脈沖

頻率換算單位:

1GHZ = 1000MHZ = 1000 000KHZ = 1000 000 000HZ

STM32時鐘源

時鐘源是可以產生器件。

LSIRC 32KHZ32 kHz低速內部RC (LSI RC)
LSEOSC 32.168KHZ32.768 kHz低速外部晶振(LSE晶振)
16MHZ HSI RC16MHZ高速內部RC (LSI RC)
4-26MHZ HSE OSC4-26MHZ高速外部晶振(HSE 晶振)粵嵌開發板外部晶振為8MHZ

注意:外部晶振產生的脈沖是精準, RC振蕩時鐘產生的脈沖是不精準

STM32主要總線時鐘頻率

SYSCLK168MHZ
HCLK168MHZ
AHB1/AHB2168MHZ
APB142MHZ
APB284MHZ

Al解釋:

在STM32微控制器中,有一些關鍵的概念需要了解:

  1. SYSCLK(System Clock):是微控制器系統中的主時鐘源,它驅動著整個系統,包括CPU、外設等。SYSCLK的頻率決定了整個系統的工作速度。
  2. HCLK(AHB Bus Clock):是系統的主總線時鐘,它連接了CPU、內存、外設等,用于數據傳輸和控制信號
  3. AHB1/AHB2(Advanced High-performance Bus):是高性能總線,用于連接內存和一些高性能外設,如DMA控制器、GPIO控制器等。AHB1和AHB2是兩個不同的總線,它們可以擁有不同的配置和頻率。
  4. APB1(Advanced Peripheral Bus 1):是高級外設總線,用于連接一些低速外設,如定時器、串口通信等。APB1總線上的外設可以以較低的頻率工作。
  5. APB2(Advanced Peripheral Bus 2):是高級外設總線,用于連接一些高速外設,如GPIO、SPI、I2C等。APB2總線上的外設可以以較高的頻率工作。

二、 GPIO分析

1、GPIO

GPIO: GPIO(英語:General-purpose input/output),通用型之輸入輸出的簡稱。

GPIO分組

STM32F407ZET6(芯片型號)

-  一共有7組IO口(PA  PB  PC  PD  PE  PF  PG)

-  每組IO口有16個IO引腳

-  一共16X7=112個IO引腳

外加2個PH0和PH1

一共114個IO口引腳(I:input O:output)

原理圖上GPIO連接與功能說明

圖片

每組(PA PB PC PD PE PF PG)通用 I/O 端口包括:

?4 個 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)。

?2 個 32 位數據寄存器(GPIOx_IDR 和 GPIOx_ODR)。

?1 個 32 位置位/復位寄存器 (GPIOx_BSRR)、

?1 個 32 位鎖定寄存器(GPIOx_LCKR)

?2 個 32 位復用功能選擇寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。

GPIO工作方式寄存器設置GPIO工作方式

n4種輸入模式

q浮空輸入(沒有上下拉電阻

q上拉輸入(有上拉電阻)

q下拉輸入(有下拉電阻)

q模擬輸入

n4種輸出模式

q開漏輸出(帶上拉或者下拉)

q開漏復用功能(帶上拉或者下拉)

q推挽式輸出(帶上拉或者下拉)

q推挽是復用功能(帶上拉或者下拉)

n4種最大輸出速度

q2MHZ

q25MHZ

q50MHZ

q100MHZ

注意點:

開漏輸出只能輸出0(低電平),若想出輸出1(高電平),需要外部接上拉電阻(類似到51單片機P0組)。

推挽式輸出可輸出0(低電平)或者1(高電平),這是常用模式

2、寄存器地址查找

寄存器地址 = 寄存組基地址+偏移地址

圖片

圖片

寄存器查看

圖片

三、 LED燈開發

1、理解led燈原理圖

LED0連接在PF9

PF9輸出低電平(0),燈亮;PF9輸出高電平(1),燈滅;

圖片

2、打開GPIOF組時鐘

//將第5位置1 使能GPIOF組時鐘
RCC_AHB1ENR |= (0x01< 5);

3、設置PF9燈為輸出模式 輸出推挽 上拉 速度(50MHZ)

4、通過GPIOF_BSRR控制LED燈亮與滅

LED舉例-1

一、led.h

#ifndef __LED_H
#define __LED_H


#include "stm32f4xx.h"





#define RCC_AHB1ENR   (*((unsigned int *)(0x40023800+0x30)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值


#define GPIOF_MODER   (*((unsigned int *)(0x40021400+0x00)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_OTYPER  (*((unsigned int *)(0x40021400+0x04)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_OSPEEDR (*((unsigned int *)(0x40021400+0x08)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_PUPDR   (*((unsigned int *)(0x40021400+0x0C)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_ODR     (*((unsigned int *)(0x40021400+0x14)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_BSRR    (*((unsigned int *)(0x40021400+0x18)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值










void Led_Init(void);


#endif

二、led.c

#include "led.h"




/*********************************
引腳說明:


LED0 -- PF9


**********************************/
void Led_Init(void)
{
  //將第5位置1  使能GPIOF組時鐘
  RCC_AHB1ENR |= (0x01< 5);

  //設置GPIOF9為輸出模式
  GPIOF_MODER &= ~(0x01< 19);  //19位清0
  GPIOF_MODER |= (0x01< 18);  //18位置1


  //設置GPIOF9為輸出推挽
  GPIOF_OTYPER &= ~(0x01< 9);  //9位清0

  //設置GPIOF9為上拉
  GPIOF_PUPDR &= ~(0x01< 19);  //19位清0
  GPIOF_PUPDR |= (0x01< 18);  //18位置1  

  //設置GPIOF9輸出速度50MHZ
  GPIOF_OSPEEDR |= (0x01< 19);  //19位置1
  GPIOF_OSPEEDR &= ~(0x01< 18);  //18位清0
}

三、main.c

#include "stm32f4xx.h"
#include "led.h"




// 延時函數
void delay(int n)
{
  int i,j;

  for(i=0; i< n; i++)
    for(j=0; j< 30000; j++);


}






int main(void)
{
  Led_Init();

  while(1)
  {
    //BSRR 25位置1  ODR輸出0  燈亮
    GPIOF_BSRR |= (0x01< 25);
    delay(1000);

    //BSRR 9位置1  ODR輸出1  燈滅
    GPIOF_BSRR |= (0x01< 9);
    delay(1000);

  }
  return 0;
}

四、作業拓展

上拉電阻和下拉電阻二者共同的作用是:避免電壓的“懸浮”,造成電路的不穩定。

1、概念:將一個不確定的信號,通過一個電阻與電源VCC相連,固定在高電平;通過一個電阻與電源GND相連,固定在低電平

2、上拉是對器件注入電流,灌電流;下拉是對引腳進行分流,拉電流;

3、當一個接有上拉電阻的IO端口設置為輸入狀態時,它的常態為高電平。

圖片

LED流水燈舉例-2

一、led.h

#ifndef __LED_H
#define __LED_H


#include "stm32f4xx.h"





#define RCC_AHB1ENR   (*((unsigned int *)(0x40023800+0x30)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值


#define GPIOF_MODER   (*((unsigned int *)(0x40021400+0x00)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_OTYPER  (*((unsigned int *)(0x40021400+0x04)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_OSPEEDR (*((unsigned int *)(0x40021400+0x08)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_PUPDR   (*((unsigned int *)(0x40021400+0x0C)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_ODR     (*((unsigned int *)(0x40021400+0x14)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOF_BSRR    (*((unsigned int *)(0x40021400+0x18)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值


#define GPIOE_MODER   (*((unsigned int *)(0x40021000+0x00)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOE_OTYPER  (*((unsigned int *)(0x40021000+0x04)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOE_OSPEEDR (*((unsigned int *)(0x40021000+0x08)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOE_PUPDR   (*((unsigned int *)(0x40021000+0x0C)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOE_ODR     (*((unsigned int *)(0x40021000+0x14)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值
#define GPIOE_BSRR    (*((unsigned int *)(0x40021000+0x18)))  //值強制類型轉為地址,通過地址解引用,訪問地址空間的值






void Led_Init(void);








void Led0(void);
void Led1(void);
void Led2(void);
void Led3(void);
void Beep(void);


#endif

二、led.c

#include "led.h"






void Led_Init(void)
{
  //將第5位置1  使能GPIOF組時鐘
  RCC_AHB1ENR |= (0x01< _AHB1ENR |= (0x01< *********************************
引腳說明:


LED0 -- PF9


**********************************/
void Led0()
{
  //設置GPIOF9為輸出模式 
  GPIOF_MODER &= ~(0x01< MODER |= (0x01< _OTYPER &= ~(0x01< PUPDR &= ~(0x01< _PUPDR |= (0x01< OSPEEDR |= (0x01< _OSPEEDR &= ~(0x01< *********************************
引腳說明:


LED1 -- PF10


**********************************/
void Led1()
{
  //設置GPIOF10為輸出模式
  GPIOF_MODER &= ~(0x01< MODER |= (0x01< _OTYPER &= ~(0x01< PUPDR &= ~(0x01< _PUPDR |= (0x01< OSPEEDR |= (0x01< _OSPEEDR &= ~(0x01< *********************************
引腳說明:


LED2 -- PE13


**********************************/
void Led2()
{
  //將第4位置1  使能GPIOE組時鐘
  RCC_AHB1ENR |= (0x01< MODER &= ~(0x01< _MODER |= (0x01< OSPEEDR |= (0x01< _OSPEEDR &= ~(0x01< PUPDR &= ~(0x01< _PUPDR |= (0x01< OTYPER &= ~(0x01< *******************************
引腳說明:


LED3 -- PE14


**********************************/
void Led3()
{
  //設置GPIOE14為輸出模式
  GPIOE_MODER &= ~(0x01< MODER |= (0x01< _OSPEEDR |= (0x01< OSPEEDR &= ~(0x01< _PUPDR &= ~(0x01< PUPDR |= (0x01< _OTYPER &= ~(0x01< 

三、main.c

#include "stm32f4xx.h"
#include "led.h"




void delay(int n)
{
  int i,j;

  for(i=0; i< n; i++)
    for(j=0; j< 30000; j++);


}




int main(void)
{
  Led_Init();
  while(1)
  {
    //BSRR 25位置1  ODR輸出0  Led0燈亮
    GPIOF_BSRR |= (0x01< 25);
    delay(1000);

    //BSRR 9位置1  ODR輸出1  燈滅
    GPIOF_BSRR |= (0x01< 9);
    //delay(1000);

    //BSRR 26位置1  ODR輸出0  Led1燈亮
    GPIOF_BSRR |= (0x01< 26);
    delay(1000);

    //BSRR 10位置1  ODR輸出1  燈滅
    GPIOF_BSRR |= (0x01< 10);
    //delay(1000);

    //BSRR 29位置1  ODR輸出0  Led2燈亮
    GPIOE_BSRR |= (0x01< 29);
    delay(1000);

    //BSRR 13位置1  ODR輸出1  燈滅
    GPIOE_BSRR |= (0x01< 13);
    //delay(1000);

    //BSRR 30位置1  ODR輸出0  Led3燈亮
    GPIOE_BSRR |= (0x01< 30);
    delay(1000);

    //BSRR 14位置1  ODR輸出1  燈滅
    GPIOE_BSRR |= (0x01< 14);
    //delay(1000);

    //BSRR 24位置1  ODR輸出0  蜂鳴器響
    GPIOE_BSRR |= (0x01< 30);
    delay(1000);

    //BSRR 8位置1  ODR輸出1  蜂鳴器關
    GPIOE_BSRR |= (0x01< 14);

    //BSRR 24位置1  ODR輸出0  蜂鳴器響
    GPIOF_BSRR |= (0x01< 8);

    delay(100);

  }


  return 0;
}

LED流水燈和蜂鳴器舉例-3

一、beep.h

#ifndef __BEEP_H
#define __BEEP_H


#include "stm32f4xx.h"
#include "led.h"






void Beep_Init(void);


#endif

二、beep.c

#include "beep.h"




/*********************************
引腳說明:


Beep -- PF8


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




void Beep_Init(void)
{
  //將第5位置1  使能GPIOF組時鐘
  RCC_AHB1ENR |= (0x01< _MODER &= ~(0x03< MODER |= (0x01< _OTYPER &= ~(0x01< PUPDR &= ~(0x03< _OSPEEDR |= (0x01< OSPEEDR |= (0x01< 

三、main.c

#include "stm32f4xx.h"
#include "led.h"
#include "beep.h"


void delay(int n)
{
  int i,j;

  for(i=0; i< n; i++)
    for(j=0; j< 30000; j++);


}




int main(void)
{
  Beep_Init();

  while(1)
  {
    //BSRR 24位置1  ODR輸出0  蜂鳴器響
    GPIOF_BSRR |= (0x01< 8);

    delay(100);

    //BSRR 8位置1  ODR輸出1  蜂鳴器關
    GPIOF_BSRR |= (0x01< 24);
    delay(1000);
  }


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

    關注

    31

    文章

    5363

    瀏覽量

    120915
  • STM32
    +關注

    關注

    2270

    文章

    10921

    瀏覽量

    356995
  • 時鐘
    +關注

    關注

    11

    文章

    1746

    瀏覽量

    131667
  • 觸發器
    +關注

    關注

    14

    文章

    2002

    瀏覽量

    61284
  • GPIO
    +關注

    關注

    16

    文章

    1216

    瀏覽量

    52267
收藏 人收藏

    評論

    相關推薦

    使用STM32 HAL庫進行GPIO控制的實例

    在基于STM32微控制器的嵌入式系統開發中,GPIO(GeneralPurposeInput/Output)控制是其中最基本、最常見的操作之一。通過使用STM32的HAL庫,可以輕松地
    的頭像 發表于 12-21 15:22 ?3647次閱讀

    采用STM32上一個GPIO口來控制對應的一個LED的點亮和熄滅

    實驗一 單個LED的閃爍1.1系統功能實現對STM32開發板上單個LED的循環點亮與熄滅,使
    發表于 12-15 06:08

    STM32單片機學習】第四課:GPIO控制LED(用寄存器編程)

    GPIO點亮熄滅LED13.5.5.寫代碼控制GPIO點亮熄滅LED23.5.6.STM32時鐘設置函數移植與講解13.5.7.
    發表于 11-14 15:36 ?0次下載
    【<b class='flag-5'>STM32</b>單片機學習】第四課:<b class='flag-5'>GPIO</b>控制<b class='flag-5'>LED</b>(用寄存器編程)

    STM32-GPIO

    GPIO被分成很多組,每組有16個引腳,所有的GPIO引腳都有基本的輸入輸出功能。最基本的輸出功能是由STM32控制引腳輸出高、低電平,實現開關控制,如把GPIO引腳接入
    發表于 11-22 19:51 ?10次下載
    <b class='flag-5'>STM32-GPIO</b>篇

    STM32F103_IOT物聯網開發板學習專欄3_STM32F103控制LED

    STM32F103_IOT物聯網開發板學習專欄3_STM32F103控制LED
    發表于 12-03 17:51 ?7次下載
    <b class='flag-5'>STM32</b>F103_IOT物聯網<b class='flag-5'>開發</b>板學習專欄3_<b class='flag-5'>STM32</b>F103控制<b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    STM32 LED位帶操作控制(以STM32F429為例)

    /*LED0GPIO口以及引腳,時鐘的宏定義,用于LED的初始化*/#define
    發表于 12-04 21:06 ?10次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>LED</b><b class='flag-5'>燈</b>位帶操作控制(以<b class='flag-5'>STM32</b>F429為例)

    STM32F103點亮LED

    點亮LED,需要用到GPIO端口。為了點亮LED,需要三個步驟:打開GPIO口的
    發表于 12-07 09:51 ?16次下載
    <b class='flag-5'>STM32</b>F103點亮<b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    STM32開發板學習1 NUCLEO-L476RG:GPIO例程 點亮LED2

    STM32開發板學習1 NUCLEO-L476RG:GPIO例程 點亮LED2
    發表于 12-08 15:36 ?31次下載
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>開發</b>板學習1 NUCLEO-L476RG:<b class='flag-5'>GPIO</b>例程 點亮<b class='flag-5'>LED</b>2<b class='flag-5'>燈</b>

    6 . STM32 GPIO介紹

    連接起來,從而實現與外部通訊、控制以及數據采集的功能。不過GPIO 最簡單的應用還屬點亮LED 了,只需通過軟件控制GPIO 輸出高低電平即可。當然
    發表于 12-24 19:08 ?2次下載
    6 . <b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b>介紹

    stm32控制led

    stm32控制LEDGPIO初始化配置void GPIO_Config(void)
    發表于 12-24 19:23 ?18次下載
    <b class='flag-5'>stm32</b>控制<b class='flag-5'>led</b><b class='flag-5'>燈</b>

    STM32 使用PWM實現呼吸

    STM32 PWM實現呼吸使用STM32F103ZET6 定時器4 CH2通道產生PWM波,在GPIOD,GPIO_PIN13引腳LED1
    發表于 12-24 19:41 ?55次下載
    <b class='flag-5'>STM32</b> 使用PWM實現呼吸<b class='flag-5'>燈</b>

    STM32F103LED流水燈

    STM32系列。所有的資料都可以在野火官網上下載野火資料下載中心二、點燈點亮LED,需要用到GPIO端口。為了點亮LED
    發表于 01-12 19:57 ?4次下載
    <b class='flag-5'>STM32F103LED</b>流水燈

    STM32庫函數開發-GPIO

    ” 的學習STM32,實際操作過程中知識盲區比想象中要多很多!只做了兩個GPIO口項目。實戰一 · I/O口1. 文件夾結構USERsystem_stm32f10x.c 系統時鐘初始
    發表于 01-13 16:17 ?14次下載
    <b class='flag-5'>STM32</b>庫函數<b class='flag-5'>開發</b>-<b class='flag-5'>GPIO</b>

    STM32G0開發筆記:LED示例

    使用Platformio平臺的libopencm3開發框架來開發STM32G0,下面為LED示例。
    的頭像 發表于 01-17 10:52 ?1453次閱讀
    <b class='flag-5'>STM32</b>G0<b class='flag-5'>開發</b>筆記:<b class='flag-5'>LED</b><b class='flag-5'>燈</b>示例

    STM32F407-點亮LED

    點亮LED需要首先初始化。這塊STM32F4開發板的LED共有4個,都是鏈接到GPIO上的。
    發表于 06-07 16:46 ?2292次閱讀
    <b class='flag-5'>STM32</b>F407-點亮<b class='flag-5'>LED</b><b class='flag-5'>燈</b>
    主站蜘蛛池模板: 久久99精国产一区二区三区四区| 亚洲精品久久久久无码AV片软件| 91麻豆精品| 末班车动漫无删减免费| x8国产精品视频| 无毒成人社区| 久久伊人免费| 初中XXXXXL| 在线观看免费毛片| 日本特交大片免费观看| 亚在线观看免费视频入口| 精品久久久久久久99热| 99re.05久久热最新地址| 十次啦中文网| 久久中文骚妇内射| 国产 亚洲 中文字幕 在线| 一二三四视频免费社区5| 青青草原直播| 久久精品国产首叶| 国产av在在免费线观看美女| 中文中幕无码亚洲在线| 忘忧草在线影院WWW日本二 | 国产AV天堂亚洲AV麻豆| 亚洲综合AV色婷婷五月蜜臀| 人妻插B视频一区二区三区| 狠狠色香婷婷久久亚洲精品| 白丝女仆被啪到深夜漫画| 亚洲日韩国产精品乱-久| 日韩AV片无码一区二区三区不卡| 久久精品国产亚洲AV热无遮挡| 搞基福利社| 97亚洲狠狠色综合久久位| 香蕉精品国产高清自在自线| 暖暖视频在线观看高清...| 极品美女久久久久久久久久久| 俄罗斯女人与马Z00Z视频| 87影院午夜福利| 亚洲精品人成电影网| 十九禁啊啪射视频在线观看| 欧美阿v天堂视频在99线| 久久精品视频在线直播6|