STM32F103实验跑马灯与蜂鸣器

前言

这里,我使用的是ALIENTEK精英STM32F103的开发板,以后的文章都是基于该开发板实现,撰写本文的目的主要是以后为了方便自己开发工程项目。




正文

关于系统时钟的功能,参考: https://blog.csdn.net/csshuke/article/details/78899911
关于芯片的资料,参考:https://wenku.baidu.com/view/e0c9703fc77da26925c5b08b.html
关于工作模式,参考:https://blog.csdn.net/it1988888/article/details/7944314

流水灯

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main(void)
{ 
 
	delay_init();		  
	LED_Init();		       
	while(1)
	{
			GPIO_ResetBits(GPIOB,GPIO_Pin_5);  	//相当于设置GPIOB口的引脚5低电平
			GPIO_SetBits(GPIOE,GPIO_Pin_5);   	//相当于设置GPIOB口的引脚5高电平
			delay_ms(300);  		   			//延时300ms
			GPIO_SetBits(GPIOB,GPIO_Pin_5);	   
			GPIO_ResetBits(GPIOE,GPIO_Pin_5); 
			delay_ms(300);                    
	}
} 
#include "led.h"
void LED_Init(void)
{
 
	 GPIO_InitTypeDef  GPIO_InitStructure;	//初始化一个结构体
	 	
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	
	 //功能为打开或关闭对应的外设输出时钟端口
		
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;			//设置对应的引脚,端口配置	 
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	//普通推挽输出
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口时钟频率50MHZ	 
	 GPIO_Init(GPIOB, &GPIO_InitStructure);				//初始化该端口号GPIOB				
	
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	    		
	 GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 
	 GPIO_SetBits(GPIOE,GPIO_Pin_5); 					//初始化该端口号GPIOE	
}

我们发现,写一个简单的流水灯,跟51系列的单片机相比,需要这么多步骤;但由于这个原因,STM32有着51系列不能比的功能优势。在51中,因为芯片引脚少,所以默认端口的时钟都是开的,哪怕我们不使用这个端口,而且时钟频率大致都是固定不变的,我们可以直接使用寄存器,如P0,来控制。


蜂鸣器

我的开发板的蜂鸣器是在GPIOB的引脚8,这里,参考上述流水灯,能够实现蜂鸣器。

#include "sys.h"	
#include "delay.h"	
#include "beep.h" 
 

 int main(void)
 {
	delay_init();	    	 //延时函数初始化  
	BEEP_Init();         	//蜂鸣器初始化
	while(1)
	{
		GPIO_SetBits(GPIOB,GPIO_Pin_8);
	}
 }
 void BEEP_Init(void)
{
 
	 GPIO_InitTypeDef  GPIO_InitStructure;
	 	
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能GPIOB端口时钟
	 
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 //BEEP-->PB.8 端口配置
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //50MHz
	 GPIO_Init(GPIOB, &GPIO_InitStructure);	 
}

改进

以下方法也能驱动LED灯

#define LED0 PBout(5)	//PB5
LED0 = 1;
//IO口操作,只对单一的IO口!
//确保n的值小于16!
//位带操作,实现51类似的GPIO控制功能
//应该是类似51的位操作,如P1_0 = P1^0;



总结

通过流水灯和蜂鸣器的实验,让我大致了解STM32的开发过程以及跟51系列单片机的不同;这激发了我继续深入学下去的动力。

下一篇,有关于按键输入和串口实验

猜你喜欢

转载自blog.csdn.net/qq_40318498/article/details/95940254