学习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); } }