stm32跑馬燈實現及蜂鳴器實驗


學習stm32已經很長時間了,打算把以前做過的一些小東西整理一下,寫出來,以輸出倒逼輸入,讓自己知道有哪些東西是一知半解的。

跑馬燈

首先是led.h文件

#ifndef __LED_H
#define __LED_H

void led_init(void);


#endif

前兩行和最后一行是一個框架,防止頭文件被重復加載

然后是led.c文件

#include "led.h"
#include "stm32f10x.h"    //庫函數頭文件


void led_init(void)
{
    GPIO_InitTypeDef GPIO_Ini;   //C語言聲明要放在最前面
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //首先要調用該函數使能IO口的時鍾
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    
    
    GPIO_Ini.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Ini.GPIO_Pin=GPIO_Pin_5;
    GPIO_Ini.GPIO_Speed=GPIO_Speed_50MHz;
    
    
    GPIO_Init(GPIOB,&GPIO_Ini);        //第二步初始化IO口的模式,比如是輸入還是輸出等等
    GPIO_SetBits(GPIOB,GPIO_Pin_5);    //最后操作IO口輸出高低電平
    
    GPIO_Init(GPIOE,&GPIO_Ini);        
    GPIO_SetBits(GPIOE,GPIO_Pin_5);
    
}

 

 

最后是main文件

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"



int main()
{
    delay_init();
    led_init();
    
    while(1)
    {
        GPIO_SetBits(GPIOB,GPIO_Pin_5); //設置為高電平
        GPIO_SetBits(GPIOE,GPIO_Pin_5);
        delay_ms(500);                  //延時函數可以采用小工具自動生成
        GPIO_ResetBits(GPIOB,GPIO_Pin_5);  //設置為低電平
        GPIO_ResetBits(GPIOE,GPIO_Pin_5);
        delay_ms(500);
    }
}

 

 

蜂鳴器

首先是beep.h文件

#ifndef __BEEP_H
#define __BEEP_H
#include "sys.h"

#define BEEP PBout(8) //蜂鳴器接口,宏定義,此處采用位操作
void BEEP_Init(void);
#endif

然后是beep.c文件

#include "stm32f10x.h" 
#include "beep.h"

void BEEP_Init(void)
{
    GPIO_InitTypeDef GPIO_InitTy;
    GPIO_InitTy.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitTy.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitTy.GPIO_Speed = GPIO_Speed_50MHz;
    RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    
    GPIO_Init(GPIOB,&GPIO_InitTy);
    
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);
    
}

最后為main文件

#include "stm32f10x.h"
#include "led.h"
#include "beep.h"
#include "delay.h"



int main()
{
    delay_init();
    led_init();
    BEEP_Init();
    
    while(1)
    {
        GPIO_SetBits(GPIOB,GPIO_Pin_5); //設置為高電平
        GPIO_SetBits(GPIOE,GPIO_Pin_5);
        BEEP = 0;                       //此處為位操作,作用和GPIO_ResetBits()函數一樣,將端口設置為低電平
        delay_ms(500);                  //延時函數可以采用小工具自動生成
        GPIO_ResetBits(GPIOB,GPIO_Pin_5);  //設置為低電平
        GPIO_ResetBits(GPIOE,GPIO_Pin_5);
        BEEP=1;
        delay_ms(500);
    }
}

 


免責聲明!

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



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