學習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); } }