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

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

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

基于STM32F407寄存器開發(fā)點(diǎn)燈

CHANBAEK ? 來(lái)源:小浩筆記 ? 作者:一紙HH ? 2023-05-19 15:08 ? 次閱讀

點(diǎn)燈點(diǎn)燈點(diǎn)到流水燈

效果圖:

圖片

1寄存器

寄存器的功能是存儲(chǔ)二進(jìn)制代碼,它是由具有存儲(chǔ)功能的觸發(fā)器組合起來(lái)構(gòu)成的。一個(gè)觸發(fā)器可以存儲(chǔ)1位二進(jìn)制代碼,故存放n位二進(jìn)制代碼的寄存器,需用n個(gè)觸發(fā)器來(lái)構(gòu)成。

在計(jì)算機(jī)領(lǐng)域中,寄存器是CPU內(nèi)部的元件,包括通用寄存器、專用寄存器和控制寄存器。寄存器擁有非常高的讀寫速度,所以在寄存器之間的數(shù)據(jù)傳送非??臁?/p>

舉一個(gè)例子,在殿上,寄存器比如太監(jiān),CPU比如皇帝,內(nèi)存比如大臣,傳送文件,你細(xì)品,再細(xì)品....

STM32內(nèi)部的所有寄存器都有唯一的地址

寄存器地址 = 寄存器基地址+偏移地址(偏移量)

比如說(shuō)查找GPIO F端口模式寄存器的地址,首先通過(guò) 《STM32F4xx中文參考手冊(cè)》(可在本公眾號(hào)后臺(tái)點(diǎn)擊->筆記->技術(shù)秘籍大全獲取) 找到GPIOF的邊界地址:0x4002 1400,然后再查找GPIO端口模式寄存器 的偏移地址:0x00,最后就得到GPIO F端口模式寄存器的地址0x0x40021400+0x00,其他寄存器也是如此。

圖片

圖片

圖片

2時(shí)鐘樹分析

時(shí)鐘源:晶振、RC振蕩器

晶振:自身產(chǎn)生時(shí)鐘信號(hào),為各種微處理芯片作時(shí)鐘參考,晶振相當(dāng)于這些微處理芯片的心臟,沒有晶振,這些微處理芯片將無(wú)法工作。

RC振蕩器:適用于低頻振蕩,一般用于產(chǎn)生1Hz~1MHz的低頻信號(hào)。因?yàn)閷?duì)于RC振蕩電路來(lái)說(shuō),增大電阻R即可降低振蕩頻率,而增大電阻是無(wú)需增加成本的

時(shí)鐘源用于產(chǎn)生方波時(shí)鐘脈沖信號(hào)

時(shí)鐘頻率是一秒產(chǎn)生方波的計(jì)量單位

時(shí)鐘頻率(主頻):1GHZ=1000MHZ=1000 000KHZ=1000 000 000HZ

1HZ:1S產(chǎn)生一個(gè)方波,1MHZ:1S產(chǎn)生1000 000 方波

1、STM32時(shí)鐘源

LSI RC 32KHZ 低速內(nèi)部振蕩時(shí)鐘源

LSE OSC 32.768KHZ 低速外部晶振時(shí)鐘源

16MHZ HSI RC 高速內(nèi)部振蕩時(shí)鐘源

4-26MHZ HSE OSC 高速外部晶振時(shí)鐘源(本次筆記使用的是晶振8HZ)

2、STM32F407主要的時(shí)鐘總線頻率

FCLK,HCLK,PCLK都稱為系統(tǒng)時(shí)鐘,但區(qū)別如下,

FCLK,提供給CPU內(nèi)核的時(shí)鐘信號(hào),CPU的主頻就是指這個(gè)信號(hào);

HCLK,提供給高速總線AHB的時(shí)鐘信號(hào);

PCLK,提供給低速總線APB的時(shí)鐘信號(hào);

SYSCLK(cpu 主頻) 168MHZ

HCLK 168MHZ

AHB(AHB1 AHB2) 168MHZ

APB1 42MHZ

APB2 84MHZ

3GPIO輸出開發(fā)

GPIO:(General-purpose input/output)通用型之輸入輸出的簡(jiǎn)稱

STM32F407ZET6板子:

一共有7組IO(ABCDEF)每組IO口有16個(gè)引腳,外加2個(gè)PH0和PH1(這兩個(gè)引腳用于連接晶振)一共有114個(gè)IO引腳

每組通用I/O端口包括10個(gè)寄存器:

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

2 個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR 和 GPIOx_ODR)。

1 個(gè)32位置位/復(fù)位寄存器 (GPIOx_BSRR)、

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

2 個(gè)32位復(fù)用功能選擇寄存器(GPIOx_AFRH 和GPIOx_AFRL)。

GPIO工作方式:

4種輸入模式

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

上拉輸入(有上拉電阻)

下拉輸入(有下拉電阻)

模擬輸入(模擬信號(hào))

4種輸出模式

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

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

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

推挽式復(fù)用功能(帶上拉或者下拉)

4種最大輸出速度

2MHZ

25MHZ

50MHZ

100MHZ

補(bǔ)充:

開漏只能輸出0,輸出要靠外部上拉電阻才輸出1(如IIC

推挽式可輸出1及輸出0

上拉電阻和下拉電阻有什么用?

提高驅(qū)動(dòng)能力:

例如,用單片機(jī)輸出高電平,但由于后續(xù)電路的影響,輸出的高電平不高,就是達(dá)不到VCC,影響電路工作。所以要接上拉電阻。下拉電阻情況相反,讓單片機(jī)引腳輸出低電平,結(jié)果由于后續(xù)電路影響輸出的低電平達(dá)不到GND,所以接個(gè)下拉電阻。

在單片機(jī)引腳電平不定的時(shí)候,讓后面有一個(gè)穩(wěn)定的電平:

例如上面接下拉電阻的情況下,在單片機(jī)剛上電的時(shí)候,電平是不定的,還有就是如果你連接的單片機(jī)在上電以后,單片機(jī)引腳是輸入引腳而不是輸出引腳,那這時(shí)候的單片機(jī)電平也是不定的,R18的作用就是如果前面的單片機(jī)引腳電平不定的話,強(qiáng)制讓電平保持在低電平。

4LED燈寄存器

(1)理解LED燈原理圖

LED0連接在PF9引腳

PF9輸出VCC(1),燈滅

PF9輸出GND(0),燈亮

圖片

引腳電平變化是通過(guò)芯片內(nèi)部(代碼來(lái)改變),作為輸出

引腳電平變化是通過(guò)芯片外部(按鍵、傳感器....),作為輸入

(2)配置好各個(gè)寄存器的地址(上面有提到如何尋找地址)

#define   RCC_AHB1ENR *((volatile unsigned int *)(0x40023800+0x30)) //值強(qiáng)制轉(zhuǎn)化為地址,通過(guò)*解引訪問(wèn)地址空間的值


#define   GPIOF_MODER *((volatile unsigned int *)(0x40021400+0x00)) //值強(qiáng)制轉(zhuǎn)化為地址,通過(guò)*解引訪問(wèn)地址空間的值
#define   GPIOF_OTYPER *((volatile unsigned int *)(0x40021400+0x04)) //值強(qiáng)制轉(zhuǎn)化為地址,通過(guò)*解引訪問(wèn)地址空間的值
#define   GPIOF_OSPEEDR *((volatile unsigned int *)(0x40021400+0x08)) //值強(qiáng)制轉(zhuǎn)化為地址,通過(guò)*解引訪問(wèn)地址空間的值
#define   GPIOF_PUPDR *((volatile unsigned int *)(0x40021400+0x0C)) //值強(qiáng)制轉(zhuǎn)化為地址,通過(guò)*解引訪問(wèn)地址空間的值
#define   GPIOF_BSRR *((volatile unsigned int *)(0x40021400+0x18)) //值強(qiáng)制轉(zhuǎn)化為地址,通過(guò)*解引訪問(wèn)地址空間的值

(3)配置好外設(shè)使能寄存器,打開GPIOF組時(shí)鐘,也叫做使能F組時(shí)鐘(STM32當(dāng)中外設(shè)的時(shí)鐘不打開,降低功耗)

//使能GPIO F組時(shí)鐘,
RCC_AHB1ENR|= (0x01<<5);

圖片

(4)配置好GPIO9組的寄存器

把GPIOF9引腳設(shè)置為輸出模式輸出推挽上拉速度

設(shè)置GPIOF9引腳對(duì)應(yīng)的是18、19位 ,然后為輸出模式:01,其他寄存器也類似,如圖下所示

圖片

圖片

圖片

圖片

void Led_Init(void)
{
  //使能GPIO F組時(shí)鐘,
  RCC_AHB1ENR |= (0x01<<5);
  
  //設(shè)置為輸出模式
  GPIOF_MODER &= ~(0x01<<19); //19位置0
  GPIOF_MODER |= (0x01<<18); //18位置1
  
  //輸出推挽
  GPIOF_OTYPER &= ~(0x01<<9); //9位置0
  
  //快速
  GPIOF_OSPEEDR |= (0x01<<19); //19位置1
  GPIOF_OSPEEDR &= ~(0x01<<18); //18位置0

  
  //上拉
  GPIOF_PUPDR &= ~(0x01<<19); //19位置0
  GPIOF_PUPDR |= (0x01<<18); //18位置1
  
}

點(diǎn)燈來(lái)了......

通過(guò)手冊(cè)查找用來(lái)點(diǎn)燈的寄存器,就是這個(gè)GPIOx_BSRR寄存器

在25位 ,置1,燈會(huì)亮

在9位 ,置1,燈會(huì)滅

圖片

main.c

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

#define COUNT 100

//粗延時(shí)
void  delayms(int n)
{
  int i, j;
  
  for(i=0; i

成功點(diǎn)亮一盞燈,至于流水燈,設(shè)置好一些燈,然后用延時(shí)控制燈的亮與滅

接下來(lái)的筆記是庫(kù)函數(shù)開發(fā),按鍵中斷等等......

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

    關(guān)注

    22

    文章

    1588

    瀏覽量

    107407
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119212
  • 晶振
    +關(guān)注

    關(guān)注

    33

    文章

    2728

    瀏覽量

    67512
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    1990

    瀏覽量

    60873
  • STM32F407
    +關(guān)注

    關(guān)注

    15

    文章

    187

    瀏覽量

    29205
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32F407 GPIO口輸入配置配置步驟

    介紹STM32F407新建寄存器工程流程,介紹輸入模式的配置方式,以按鍵為例完成按鍵輸入檢測(cè)。
    的頭像 發(fā)表于 07-06 14:28 ?1836次閱讀
    <b class='flag-5'>STM32F407</b> GPIO口輸入配置配置步驟

    STM32F407 位帶配置步驟

    介紹STM32F407位帶操作方法,設(shè)置寄存器的偏移量,實(shí)現(xiàn)按GPIO口指定位進(jìn)行讀寫操作,方便編程。
    的頭像 發(fā)表于 07-06 14:30 ?1030次閱讀
    <b class='flag-5'>STM32F407</b> 位帶配置步驟

    STM32F407 UCOS III實(shí)驗(yàn)

    STM32F407 UCOS III實(shí)驗(yàn),介紹基于STM32F407的UCOSIII實(shí)例,參考下
    發(fā)表于 09-22 14:08 ?81次下載

    STM32F407 開發(fā)板原理圖

    STM32F407 開發(fā)板原理圖
    發(fā)表于 09-22 16:12 ?393次下載
    <b class='flag-5'>STM32F407</b> <b class='flag-5'>開發(fā)</b>板原理圖

    STM32F407開發(fā)板用戶手冊(cè)】第13章 STM32F407啟動(dòng)過(guò)程詳解

    STM32F407開發(fā)板用戶手冊(cè)】第13章 STM32F407啟動(dòng)過(guò)程詳解
    發(fā)表于 11-23 18:06 ?73次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊(cè)】第13章 <b class='flag-5'>STM32F407</b>啟動(dòng)過(guò)程詳解

    STM32F407開發(fā)板用戶手冊(cè)】第14章 STM32F407的電源,復(fù)位和時(shí)鐘系統(tǒng)

    STM32F407開發(fā)板用戶手冊(cè)】第14章 STM32F407的電源,復(fù)位和時(shí)鐘系統(tǒng)
    發(fā)表于 12-02 16:21 ?42次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊(cè)】第14章 <b class='flag-5'>STM32F407</b>的電源,復(fù)位和時(shí)鐘系統(tǒng)

    STM32F407芯片介紹

    1. 文檔準(zhǔn)備做嵌入式開發(fā)的第一步就是了解主芯片,了解STM32F407主要要關(guān)注幾個(gè)文檔:1. stm32F407芯片手冊(cè)2. stm32F407參考手冊(cè)3. Arm Cortex-
    發(fā)表于 12-04 13:21 ?109次下載
    <b class='flag-5'>STM32F407</b>芯片介紹

    STM32F407開發(fā)板用戶手冊(cè)】第1章?? 初學(xué)STM32F407的準(zhǔn)備工作

    STM32F407開發(fā)板用戶手冊(cè)】第1章?? 初學(xué)STM32F407的準(zhǔn)備工作
    發(fā)表于 12-04 13:36 ?75次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊(cè)】第1章?? 初學(xué)<b class='flag-5'>STM32F407</b>的準(zhǔn)備工作

    STM32F407開發(fā)板用戶手冊(cè)】第21章 STM32F407的NVIC中斷分組和配置(重要)

    STM32F407開發(fā)板用戶手冊(cè)】第21章 STM32F407的NVIC中斷分組和配置(重要)
    發(fā)表于 12-04 13:51 ?21次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊(cè)】第21章 <b class='flag-5'>STM32F407</b>的NVIC中斷分組和配置(重要)

    STM32F407開發(fā)板用戶手冊(cè)】第8章 STM32F407的終極調(diào)試組件Event Recorder

    STM32F407開發(fā)板用戶手冊(cè)】第8章 STM32F407的終極調(diào)試組件Event Recorder
    發(fā)表于 12-04 14:21 ?18次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊(cè)】第8章 <b class='flag-5'>STM32F407</b>的終極調(diào)試組件Event Recorder

    STM32F407開發(fā)板用戶手冊(cè)】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO

    STM32F407開發(fā)板用戶手冊(cè)】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO
    發(fā)表于 12-05 15:21 ?39次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊(cè)】第19章 <b class='flag-5'>STM32F407</b>的GPIO應(yīng)用之按鍵FIFO

    STM32F103點(diǎn)燈程序(寄存器

    STM32F103點(diǎn)燈程序(寄存器
    發(fā)表于 12-08 17:21 ?20次下載
    <b class='flag-5'>STM32F</b>103<b class='flag-5'>點(diǎn)燈</b>程序(<b class='flag-5'>寄存器</b>)

    STM32】基于STM32F407寄存器方式點(diǎn)亮LED流水燈

    目錄一、通過(guò)寄存器方式點(diǎn)亮1.二、通過(guò)庫(kù)函數(shù)方式點(diǎn)亮三級(jí)目錄本文使用原子STM32F407最小系統(tǒng)板示例核心芯片為:STM32F407ZGT6一、通過(guò)寄存器方式點(diǎn)亮1.二、通過(guò)庫(kù)函數(shù)方
    發(fā)表于 12-08 17:51 ?7次下載
    【<b class='flag-5'>STM32</b>】基于<b class='flag-5'>STM32F407</b><b class='flag-5'>寄存器</b>方式點(diǎn)亮LED流水燈

    STM32F407開發(fā)板原理圖下載

    STM32F407 開發(fā)板原理圖,有興趣的同學(xué)可以參考!
    發(fā)表于 04-29 17:09 ?60次下載

    STM32F407 FreeRTOS開發(fā)手冊(cè) V1.1

    STM32F407 FreeRTOS開發(fā)手冊(cè)_V1.1PDF文件下載。
    發(fā)表于 07-31 11:16 ?52次下載