stm32寄存器點亮RGB LED燈


1. 項目:

   使用野火stm32指南者開發板寄存器點亮RGB LED燈。

2. 代碼:

  main.c

  

#include "stm32f10x.h"
int main(void)
{
/*操作寄存器絕對地址*/
    *(unsigned int *)0x40021018 |= ((1)<<3);                    //打開GPIO端口時鍾
    *(unsigned int *)0x40010c00 &= ~((0x0f)<<(4*0));    //將PB0口電平清零
    *(unsigned int *)0x40010c00 |= ((1)<<(4*0));            //配置PB0為通用推挽輸出,速度為10MHz(即CRL最低四位設置為0001)
    *(unsigned int *)0x40010c0c &= ~(1<<0);                        //控制PB0輸出低電平
}

void SystemInit(void)
{
    //函數體為空,目的是為了騙過編譯器報錯
}

 

stm32f10x.h

  新建即可,不需要添加代碼

3. 執行結果:此代碼只點亮綠燈

  

 

 

 

 方法二

4. 代碼:

  main.c

  

#include "stm32f10x.h"
int main(void)
{
    /*寄存器映射*/
    RCC_APB2ENR |= ((1)<<3);                    //打開GPIO端口時鍾
    GPIOB_CRL &= ~((0x0f)<<(4*0));        //將PB0口電平清零
#if 1
    //點亮綠燈
    //配置PB0為通用推挽輸出,速度為10MHz(即CRL最低四位設置為0001)
    GPIOB_CRL |= ((1)<<(4*0));
#elif 0
    //點亮藍燈
    //配置PB1為通用推挽輸出,速度為10MHz(即CRL的bit4/bit5/bit6/bit7四位設置為0001)
    GPIOB_CRL |= ((1)<<(4*1));
#else
    //點亮紅燈
    //配置PB5為通用推挽輸出,速度為10MHz(即CRL的bit16/bit17/bit18/bit19四位設置為0001)
    GPIOB_CRL |= ((1)<<(4*5));    
#endif
    GPIOB_ODR &= ~(1<<0);                            //控制PB0輸出低電平
} void SystemInit(void) { //函數體為空,目的是為了騙過編譯器報錯
}

 

  stm32f10x.h

  

//外設 peripheral

#define PERIPH_BASE                                ((unsigned int)0x40000000)
#define APB1PERIPH_BASE                        PERIPH_BASE
#define APB2PERIPH_BASE                        (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE                        (PERIPH_BASE + 0x20000)

#define RCC_BASE                            (AHBPERIPH_BASE + 0x1000)
#define GPIOB_BASE                        (APB2PERIPH_BASE + 0x0c00)

#define RCC_APB2ENR                        *(unsigned int *)(RCC_BASE + 0x18)
    
#define GPIOB_CRL                            *(unsigned int *)(GPIOB_BASE + 0x00)
#define GPIOB_CRH                            *(unsigned int *)(GPIOB_BASE + 0x04)
#define GPIOB_ODR                            *(unsigned int *)(GPIOB_BASE + 0x0c)

執行結果:

  設置if-else語句可以分別點亮紅綠藍三種顏色的燈。

點亮綠燈 點亮藍燈 點亮紅燈
if 1 if 0 if 0
elif 0 elif 1 elif 0
else else else
endif endif emdif

 

 

 

   

 

 

 

 

參考資料:

  1. 原理圖

  

 

   2. 這里的CRL只配置PB或者PA....PG等口的0到7口,8到15口由CRH控制。

    只有設置MODE[1:0]>00時才可以設置為輸出口功能。

    每4位對應一個PB口,例如bit0,bit1,bit2,bit3控制PB0口,以此類推。

    控制GPIOB口的輸出模式和速度主要靠設置CRL或CRH的位來控制。

  

 

   3. 控制PB0輸出低電平。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM